收藏 分享(赏)

根据模型中决策变量的取值范围和目标函数以及约束函数....ppt

上传人:cjc2202537 文档编号:1027101 上传时间:2018-06-05 格式:PPT 页数:35 大小:113.50KB
下载 相关 举报
根据模型中决策变量的取值范围和目标函数以及约束函数....ppt_第1页
第1页 / 共35页
根据模型中决策变量的取值范围和目标函数以及约束函数....ppt_第2页
第2页 / 共35页
根据模型中决策变量的取值范围和目标函数以及约束函数....ppt_第3页
第3页 / 共35页
根据模型中决策变量的取值范围和目标函数以及约束函数....ppt_第4页
第4页 / 共35页
根据模型中决策变量的取值范围和目标函数以及约束函数....ppt_第5页
第5页 / 共35页
点击查看更多>>
资源描述

1、,根据模型中决策变量的取值范围和目标函数以及约束函数的特性,模型可分为以下几类:LP/ILP/PILP QP /IQP/ PIQPNLP/INLP/PINLP(以I开头表示IP:整数规划,以PI开头表示PIP:纯整数规划)(1)当决策变量的所有分量均为连续数值时,优化模型称为连续优化,也就是所说的数学规划。若目标函数及约束条件均为线性的称为LP(线性规划) ,若目标函数和约束条件至少有一个是非线性函数则为 NLP(非线性规划),若目标函数是一个二次函数,而约束是线性函数则为QP(二次规划)(2)当决策变量的一个活多歌分量值取离散数值,则优化模型称为离散优化,或称组合优化。若一个或多个变量只取整

2、数数值,称为整数规划(IP)若所有变量只取整数数值,则称为纯整数规划(PIP),部分变量只取整数数值,则为混合整数规划(MIP),特别地有01规(ZOP),优化模型的基本类型,后缀(lg4):LONGO格式的模型文件,只有能读出它后缀(lng):表示文本格式文件,以此格式保存模型文件将会丢失格式信息后缀(ldt):表示数据文件后缀(ltf):命令脚本文件后缀(lgr):报告文件后缀(ltx):格式的模型文件后缀(mps):数学规划系统格式的模型文件除了(lg4)文件以外,另外几种格式的文件都属于普通文本文件,LINGO几种不同的文件类型:,模型的数据部分和初始部分,数据部分以关键字“data:

3、”开始,以关键字“enddata”结束。在这里,可以指定集成员、集的属性。其语法如下: object_list = value_list; 对象列(object_list)包含要指定值的属性名、要设置集成员的集名,用逗号或空格隔开。一个对象列中至多有一个集名,而属性名可以有任意多。如果对象列中有多个属性名,那么它们的类型必须一致。 数值列(value_list)包含要分配给对象列中的对象的值,用逗号或空格隔开。注意属性值的个数必须等于集成员的个数。sets: set1/A,B,C/: X,Y; endsets data: X=1,2,3; Y=4,5,6; enddata,等价地可以写成:se

4、ts: set1/A,B,C/: X,Y; endsets data: X,Y=1 4 2 5 3 6; enddata,模型的数据部分和初始部分,参数 在数据部分也可以指定一些标量变量。当一个标量变量在数据部分确定时,称之为参数。 data: X = .085; enddata 也可以同时指定多个参数。 data: X, Y = .085 .03; enddata,模型的数据部分和初始部分,实时数据处理 在某些情况,模型中的某些数据并不是定值,我们把这种情况称为实时数据处理。LINGO可以通过在本该放数的地方输入一个问号(?)。 data: X,Y = .085 ?; enddata 每一次

5、求解模型时,LINGO都会提示为参数Y输入一个值。在WINDOWS操作系统下,将会接收到一个对话框,直接输入一个值再点击OK按钮,LINGO就会把输入的值指定给Y,然后继续求解模型。 除了参数之外,也可以实时输入集的属性值,但不允许实时输入集成员名。,模型的数据部分和初始部分,指定属性为一个值 可以在数据声明的右边输入一个值来把所有的成员的该属性指定为一个值。sets: days /MO,TU,WE,TH,FR,SA,SU/:needs; endsets data: needs = 20; enddata LINGO将用20指定days集的所有成员的needs属性。sets: days /MO

6、,TU,WE,TH,FR,SA,SU/:needs,cost; endsets data: needs cost = 20 100; enddata,数据部分的未知数值 有时只想为一个集的部分成员的某个属性指定值,而让其余成员的该属性保持未知,以便让LINGO去求出它们的最优值。 在数据声明中输入两个相连的逗号表示该位置对应的集成员的属性值未知。两个逗号间可以有空格。 sets: years/1.5/: capacity; endsets data: capacity = ,34,20,; enddata 属性capacity的第2个和第3个值分别为34和20,其余的未知。,模型的数据部分和初

7、始部分,模型的初始部分 在初始部分输入的值仅被LINGO求解器当作初始点来用,并且仅仅对非线性模型有用。 一个初始部分以“init:”开始,以“endinit”结束。 init: X, Y = 0, .1; endinit Y=log(X); X2+Y2=1;,模型的数据部分和初始部分,数据内容结束,LINGO函数,算术运算符 乘方 乘 除 加 减 LINGO唯一的一元算术运算符是取反函数“”。 关系运算符 关系运算符主要是被用在模型中,来指定一个表达式的左边是否等于、小于等于、或者大于等于右边,形成模型的一个约束条件。 LINGO有三种关系运算符:“=”、“=”。LINGO中还能用“”表示大

8、于等于关系。LINGO并不支持严格小于和严格大于关系运算符。严格小于为:A+=B,LINGO函数,逻辑运算符 在LINGO中,逻辑运算符主要用于集循环函数的条件表达式中,来控制在函数中哪些集成员被包含,哪些被排斥。在创建稀疏集时用在成员资格过滤器中。 #not# 否定该操作数的逻辑值,not是一个一元运算符 #eq# 若两个运算数相等,则为true;否则为flase #ne# 若两个运算符不相等,则为true;否则为flase #gt# 若左边的运算符严格大于右边的运算符,则为true;否则为flase #ge# 若左边的运算符大于或等于右边的运算符,则为true;否则为flase #lt#

9、若左边的运算符严格小于右边的运算符,则为true;否则为flase #le# 若左边的运算符小于或等于右边的运算符,则为true;否则flase #and# 仅当两个参数都为true时,结果为true;否则为flase #or# 仅当两个参数都为false时,结果为false;否则为true,下面给出以上三类操作符的优先级: 高 #not# (取反) #eq# #ne# #gt# #ge# #lt# #le# #and# #or# 低 =,LINGO函数,LINGO函数,数学函数 LINGO提供了大量的标准数学函数: abs(x) 返回x的绝对值 sin(x) 返回x的正弦值,x采用弧度制 c

10、os(x) 返回x的余弦值 tan(x) 返回x的正切值 exp(x) 返回常数e的x次方 log(x) 返回x的自然对数 lgm(x) 返回x的gamma函数的自然对数 sign(x) 如果x=0时,返回不超过x的最大整数;当x0时,返回不低于x的最大整数。 smax(x1,x2,xn) 返回x1,x2,xn中的最大值 smin(x1,x2,xn) 返回x1,x2,xn中的最小值,LINGO函数,金融函数 1fpa(I,n) 返回如下情形的净现值:单位时段利率为I,连续n个时段支付,每个时段支付单位费用。若每个时段支付x单位的费用,则净现值可用x乘以fpa(I,n)算得。 例 贷款买房问题

11、贷款金额50000元,贷款年利率5.31%,采取分期付款方式(每年年末还固定金额,直至还清)。问拟贷款10年,每年需偿还多少元? LINGO代码如下: 50000 = x * fpa(.0531,10); 答案是x=6573.069元。 2fpl(I,n) 返回如下情形的净现值:单位时段利率为I,第n个时段支付单位费用。,概率函数 1pbn(p,n,x) 二项分布的累积分布函数。当n和(或)x不是整数时,用线性插值法进行计算。 2pcx(n,x) 自由度为n的2分布的累积分布函数。 3peb(a,x) 当到达负荷为a,服务系统有x个服务器且允许无穷排队时的Erlang繁忙概率。 4pel(a,

12、x) 当到达负荷为a,服务系统有x个服务器且不允许排队时的Erlang繁忙概率。 5pfd(n,d,x) 自由度为n和d的F分布的累积分布函数。 6pfs(a,x,c) 当负荷上限为a,顾客数为c,平行服务器数量为x时,有限源的Poisson服务系统的等待或返修顾客数的期望值。a是顾客数乘以平均服务时间,再除以平均返修时间。当c和(或)x不是整数时,采用线性插值进行计算。 7phg(pop,g,n,x) 超几何(Hypergeometric)分布的累积分布函数。pop表示产品总数,g是正品数。从所有产品中任意取出n(npop)件。pop,g,n和x都可以是非整数,这时采用线性插值进行计算。,L

13、INGO函数,概率函数8ppl(a,x) Poisson分布的线性损失函数,即返回max(0,z-x)的期望值,其中随机变量z服从均值为a的Poisson分布。 9pps(a,x) 均值为a的Poisson分布的累积分布函数。当x不是整数时,采用线性插值进行计算。 10psl(x) 单位正态线性损失函数,即返回max(0,z-x)的期望值,其中随机变量z服从标准正态分布。 11psn(x) 标准正态分布的累积分布函数。 12ptd(n,x) 自由度为n的t分布的累积分布函数。,LINGO函数,13qrand(seed) 产生服从(0,1)区间的拟随机数。qrand只允许在模型的数据部分使用,它

14、将用拟随机数填满集属性。通常,声明一个mn的二维表,m表示运行实验的次数,n表示每次实验所需的随机数的个数。model: data: M=4; N=2; seed=1234567; enddata sets: rows/1.M/; cols/1.N/; table(rows,cols): x; endsets data: X=qrand(seed); enddata end,LINGO函数,14rand(seed) 返回0和1间的伪随机数,依赖于指定的种子。典型用法是U(I+1)=rand(U(I)。注意如果seed不变,那么产生的随机数也不变。 model: sets: series/1.1

15、5/: u; endsets u( 1) = rand( .1234); for(series( I)| I #GT# 1: u( I) = rand( u( I - 1) ); end,LINGO函数,LINGO函数,变量界定函数 变量界定函数实现对变量取值范围的附加限制,共4种: bin(x) 限制x为0或1 bnd(L,x,U) 限制LxU free(x) 取消对变量x的默认下界为0的限制,即x可以取任意实数 gin(x) 限制x为整数 在默认情况下,LINGO规定变量是非负的,也就是说下界为0,上界为+。free取消了默认的下界为0的限制,使变量也可以取负值。bnd用于设定一个变量的上

16、下界,它也可以取消默认下界为0的约束。,LINGO函数,集操作函数 1in(set_name,primitive_index_1 ,primitive_index_2,) 如果元素在指定集中,返回1;否则返回0。 sets: I/x1.x4/; B(I)/x2/; C(I)|#not#in(B, endsets &1表示对应第一个父集合的元素的索引值2index(set_name, primitive_set_element) 该函数返回在集set_name中原始集成员primitive_set_element的索引。3size(set_name) 该函数返回集set_name的成员个数。在模

17、型中明确给出集大小时最好使用该函数。它的使用使模型更加数据中立,集大小改变时也更易维护。,集循环函数 集循环函数遍历整个集进行操作,其语法为function(setname(set_index_list)|conditional_qualifier: expression_list);function相应于下面罗列的四个集循环函数之一;setname是要遍历的集set_ index_list是集索引列表;conditional_qualifier是用来限制集循环函数的范围。expression_list是被应用到每个集成员的表达式列表,LINGO函数,LINGO函数,1for 该函数用来产生对

18、集成员的约束。for函数允许只输入一个约束,然后LINGO自动产生每个集成员的约束。 产生序列,6,, model: sets: number/1.5/:x; endsets for(number(I): x(I)=I); end,LINGO函数,2sum 该函数返回遍历指定的集成员的一个表达式的和。 例 求向量5,1,3,4,6,10前5个数和后三个数的和。 model: data: N=6; enddata sets: number/1.N/:x; endsets data: x = 5 1 3 4 6 10; enddata s=sum(number(I) | I #le# 5: x);

19、 d=sum(number(i)|i#ge#N-2:x);end,LINGO函数,3.min和max 返回指定的集成员的一个表达式的最小值或最大值。 例 求向量5,1,3,4,6,10前5个数的最小值,后3个数的最大值。 model: data: N=6; enddata sets: number/1.N/:x; endsets data: x = 5 1 3 4 6 10; enddata minv=min(number(I) | I #le# 5: x); maxv=max(number(I) | I #ge# N-2: x); end,LINGO函数,输入和输出函数 1file函数 该函

20、数用从外部文件中引入数据或文本,可以放在模型中任何地方。该函数的语法格式为file(filename)。这里filename是文件名(可以带有路径,也可以没有表示当前目录),该文件中记录之间用分开2text函数 该函数被用在数据部分用来把解输出至文本文件中。它可以输出集成员和集属性值。其语法为 text(filename) ,文件名可以带有路径,没有指定路径时表示在当前目录下生成这个文件,3ole函数 OLE是从EXCEL中引入或输出数据的接口函数,它是基于传输的OLE技术。OLE函数可在数据部分和初始部分引入数据。其语法为:Ole(Filename,Range-name-list)在EXCE

21、L中定义Ranges名: 按鼠标左键拖曳选择Range, 释放鼠标按钮, 选择“插入|名称|定义”, 输入希望的名字, 点击“确定”按钮。Ole(filename,rangename),从文件中rangename所指示的单元中取出数据X,y,z=Ole(filename) ,没指明哪个单元格赋值,采取默认方式(接收与变量名称相同的范围)从文件中的x,y,z指定的单元格赋值给三个变量ole(filename,rangename)=m,将m输出赋给rangename指定单元格,LINGO函数,MODEL:Sets: demand/1.6/:a,b,d; supply/1.2/:x,y,e; lin

22、k(demand,supply):c;endsetsdata:a=1.25,8.75,0.5,5.75,3,7.25;b=1.25,0.75,4.75,5,6.5,7.75;d=3,5,4,7,6,11; e=20,20;text(out.txt)=supply料场的合适位置为x,y;enddatainit:x,y=5,1,2,7;endinitmin=sum(link(i,j): c(i,j)*(x(j)-a(i)2+(y(j)-b(i)2)(1/2) );For(demand(i):sum(supply(j):c(i,j) =d(i););for(supply(i):sum(demand(

23、j):c(j,i) =e(i); );END,LINGO函数,model: sets: a/file(1_2.txt) /: capacity; b/file(1_2.txt) /: demand; links(a,b): c, x; endsets min=sum(links: c*x); !需求约束;for(b(J): sum(a(I): x(I,J)=demand(J); !产量约束; for(a(I): sum(b(J): x(I,J)=30; end 2warn(text,logical_condition) 如果逻辑条件logical_condition为真,则产生一个内容为text的信息框。 model: x=1; warn(x是正数,x #gt# 0); end,LINGO函数,函数内容结束,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 高等教育 > 教育学

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报