LINGO求解优化问题.doc

上传人:博****1 文档编号:543682544 上传时间:2023-12-15 格式:DOC 页数:91 大小:1.39MB
返回 下载 相关 举报
LINGO求解优化问题.doc_第1页
第1页 / 共91页
LINGO求解优化问题.doc_第2页
第2页 / 共91页
LINGO求解优化问题.doc_第3页
第3页 / 共91页
LINGO求解优化问题.doc_第4页
第4页 / 共91页
LINGO求解优化问题.doc_第5页
第5页 / 共91页
点击查看更多>>
资源描述

《LINGO求解优化问题.doc》由会员分享,可在线阅读,更多相关《LINGO求解优化问题.doc(91页珍藏版)》请在金锄头文库上搜索。

1、首 页一、Lingo简介1. 目标函数一个函数解析式,你希望求它的最大或最小值 max=函数解析式; 或 min=函数解析式;例max=3*b+2*c2; min=b(1/3)-c*k;Lingo的语句以 ; 号结束。2. 运算加(+),减(-),乘(*),除(/),乘方(xa)3. 变量用字母或字母数字的组合表示 例a,b,cc1,x1。Lingo的变量缺省值为非负数。4. 限制条件一组等式或不等式。Lingo的,=,=36;3*x1+5*x2=45;Lingo的注释语句用!开头用;结束。5. 变量类型变量类型说 明bin( 变量名) ;限制该变量为0或1。bnd( a,变量名, b);限制

2、该变量介于a,b之间。free(变量名);允许该变量为负数。gin( 变量名);限制该变量为整数。二、Lingo高级sets语句连续六个月的产量,可以用x1,x2,x3,x4,x5,x6表示, 但十二个月的产量用同样的方法表示就显繁琐。Lingo可以通过sets语句设置数组功能使问题变得简单。例 定义数组x, 有x(1),x(2),x(3),x(4)x(12)个成员,用以表示十二个月的产量。sets:r/1.12/:x; !r是组的类型名,x数组名;endsets;sets语句以sets开头,endsets结束。示例程序2sets:mat/1.4/: x; !mat是组的类型名,x数组名;en

3、dsetsmin=50*x(1)+20*x(2)+30*x(3)+80*x(4);400*x(1)+200*x(2)+150*x(3)+500*x(4)=500;3*x(1)+2*x(2)=6;2*x(1)+2*x(2)+4*x(3)+4*x(4)=10;2*x(1)+4*x(2)+x(3)+5*x(4)=8;data语句有时,我们要用到常数数组,比如在400*x(1)+200*x(2)+150*x(3)+500*x(4)=500中,x(1), x(2), x(3), x(4)的系数分别为400, 200, 150, 500,此时,可用data语句。例 定义数组a, 其中a(1)=400,a(

4、2)=200,a(3)=150,a(4)=500。sets:l/1.4/: a,x;endsetsdata: a=400 200 150 500;enddatadata语句是以data开头,enddata结尾。示例程序3sets:l/1.4/: x, a;endsetsdata:a=7 2 3 9; !a(1)=7, a(2)=2, a(3)=3, a(4)=9;enddatamax=x(1)*a(3)+x(2)*a(1)+x(3)*a(4)+x(4)*a(2);x(1)+x(4)-x(2)-x(3)a(1);x(4)+2*x(2)a(4);x(1)+x(3)a(1);Lingo含有一些针对数

5、组的命令,方便了数组的使用。for循环语句:for(数组类型名(i): 循环的语句);示例程序4(gin语句)sets:r/1.5/: a, b;endsetsdata:a= 3.3 4.6 2.7 7.1 10.3;enddatamax=a(1)*b(1)-a(2)*b(2)+a(3)*b(3)-a(4)*b(4);for(r(i): b(i) a(i);!等价于b(1)a(1);b(2)a(2);b(3)a(3);b(4)a(4);for(r(i): gin(b(i); !b为整数数组;!等价于gin(b(1);gin(b(2);gin(b(3);gin(b(4);sum语句sum(数组类

6、型名(i): 含数组名(i)的语句);示例程序5sets: r/1.5/: a, b;endsetsdata: a= 3.3 4.6 2.7 7.1 10.3;enddatamax=sum(r(i):b(i)+sum(r(i):b(i)/a(i) +sum(r(i):b(i)*a(i); !等价于max=b(1)+b(2)+b(3)+b(4)+b(1)/a(1)+b(2)/a(2)+b(3)/a(3)+b(4)/a(4);for(r(i): b(i) a(i);for(r(i): gin(b(i);示例程序6(bnd语句)sets:m/1.4/: x, need, g, y;endsetsda

7、ta:need=4000 2000 3000 10000;enddatamin=30000*sum(m(i): x(i)+30*sum(m(i): g(i);g(1)=600+y(1)*(x(2)+x(3)+x(4)-need(1);g(2)=g(1)+y(2)*(sum(m(i): x(i)-x(2)-need(2); ! sum(m(i):x(i)-x(2)等价于x(1)+x(3)+x(4);g(3)=g(2)+y(3)*(sum(m(i): x(i)-x(3)-need(3);g(4)=g(3)+y(4)*(sum(m(i): x(i)-x(4)-need(4);gin(y(1);for

8、(m(i): gin( x(i); bnd(10, y(i), 500) ); !x为整数数组,10y(i)500;sets语句还可以定义矩阵mn矩阵就是m行,n列的数。x=2 3 4 5 6 7 8 9 2 3 4 7 8 2 1;x 是一35的矩阵,x(1, 2)调用第一行第二列的数3。例 定义45矩阵。Sets:r/1.4/;c/1.5/;m(r,c): x; !r为行数,c为列数,m为45矩阵的类型名,x为矩阵名;endsetsdata语句用于矩阵data:x=2 5 6 7 5 6 3 1 8 7 9 10;enddatasum语句用于矩阵sum(m(i,j): x(i,j); !对

9、x的全部元素求和;sum(m(1,j): x(1,j)40; !对x的第一行求和;sum(m(i,3): x(i,3)40; !对x的第三列求和;for(r(i): sum(m(i,j):x(i,j)50); !对x的每一行求和;for(c(j):sum(m(i,j):x(i,j)50); !对x的每一列求和;for循环语句可用于矩阵for(m(i,j): gin(x(i,j);表示所有的x(i,j)为整数。示例程序7sets: r/1.3/: s; c/1.4/: pr, pd; m(r,c): x; !定义一34矩阵;endsetsdata:s = 750 250 400;pr = 2 3

10、 4 5;x = 15 10 6 2 1 6 10 14 5 8 13 9;enddatamax=sum(c(i): pr(i) *pd(i);for( r(i): sum(c(j): x(i,j)*pd(j)/16) =s(i);! for( r(i): sum(m(i,j):x(i,j)*pd(j)/16) =s(i)等价于:x(1,1)*pd(1)/16+x(1,2)*pd(2)/16+x(1,3)*pd(3)/16+x(1,4)*pd(4)/16s(1);x(2,1)*pd(1)/16+x(2,2)*pd(2)/16+x(2,3)*pd(3)/16+x(2,4)*pd(4)/16s(2

11、);x(3,1)*pd(1)/16+x(3,2)*pd(2)/16+x(3,3)*pd(3)/16+x(3,4)*pd(4)/16s(3);x(4,1)*pd(1)/16+x(4,2)*pd(2)/16+x(4,3)*pd(3)/16+x(4,4)*pd(4)/16s(4);示例程序8(bin语句)sets: l/1.4/; m(l,l): a,x;endsetsdata:a=54 54 51 53 51 57 52 52 50 53 54 56 56 54 55 53;enddatamin=sum( m(i,j): a(i,j)*x(i,j) );for(l(i): sum(l(j): x(

12、i,j)=1;sum(l(j): x(j,i)=1);! sum(l(j):x(i,j)=1,每一行的和为1;sum(l(j):x(j,i)=1,每一列的和为1;for( m(i,j): bin(x(i,j) ); !x元素取值为0或1;sets:l/1.4/;m(l,l):a,x;endsetsdata:a=54 54 51 53 51 57 52 52 50 53 54 56 56 54 55 53;enddatamin=sum(m(i,j):a(i,j)*x(i,j);for(l(i):sum(l(j):x(i,j)=1;sum(l(j):x(j,i)=1);! sum(l(j):x(i

13、,j)=1,每一行的和为1;sum(l(j):x(j,i)=1,每一列的和为1;for(m(i,j):bin(x(i,j);三、优化问题Lingo 是较好的最优化建模工具,Lingo模型由两部分组成:(一) 目标(objective): 最优化目标。(二) 限制条件(constraint)。1. 我的食谱由四种食品组成: 果仁巧克力(50 美分/块); 巧克力冰淇淋(20美分/杯); 可乐(30美分/瓶); 奶酪(80美分块)。我每天的营养最低需求: 500 卡路里,6 盎司巧克力,10 盎司糖,8 盎司脂肪。四种食品的营养成分如下表:卡路里巧克力(盎司)糖(盎司)脂肪(盎司)价格果仁巧克力(块)40032250巧克力冰淇淋(杯)20022420可乐(瓶)15004130奶酪(块)50004580最低需求5006108试列出一份最节俭的食谱讲评问:选择哪些变量?答:果仁巧克力x1块,巧克力冰淇淋x2杯,可乐x3瓶,奶酪x4块。问:该问题的目标是什么?答:食谱中饮食的成本最低:min 50x1+20x2+30x3+80x4问:限制条件?答:满足每天的最低需求。卡路里:400x1+200x2+150x3+500x4500巧克力:3x1+2x26糖:2x1+2x2+4x3+4x410脂

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号