赞
踩
LINGO是Linear Interactive and General Optimizer的缩写,即“交互式的线性和通用优化求解器”,由美国LINDO系统公司(Lindo System Inc.)推出的,可以用于求解非线性规划,也可以用于一些线性和非线性方程组的求解等。
下面介绍一下我从网上总结学习到的一些lingo知识:
内置函数:
下面通过几个例题来实际介绍一下这些内置函数
第一题:
在lingo软件中,默认变量的值是大于等于零的,所以第四个约束条件可以省略不写,代码如下:
- MODEL:
- MAX =4*X1+3*X2;
- 2*X1+X2<=10;
- X1+X2<=8;
- X2<=7;
- END
运行结果如下:
即X1=2,X2=6的时候,取得目标函数的最大值。
第二题:要求X1,X2均为整数:
在整数的要求下,可以使用@gin(x)这个函数,它要求变量X必须是整数。
- MODEL:
- MAX=40*X1+90*X2;
- 9*X1+7*X2<=56;
- 7*X1+20*X2<=70;
- @gin(X1);@gin(X2);
- END
运行截图:
第三题:0-1规划问题:要求变量只能是0或1。
Lingo软件提供了@bin(x)这个函数,它规定了变量只能是0或者1这两个量。
- MODEL:
- MAX=X1*X1+0.4*X2+0.8*X3+1.5*X4;
- 3*X1+2*X2+6*X3+10*X4<=10;
- @BIN(X1);@BIN(X2);@BIN(X3);@BIN(X4);
- END
第四题:非线性规划问题:
在lingo软件中,提供了绝对值函数@abs,可以直接使用来表示目标函数。
代码如下:
- MODEL:
- MIN=@ABS(X1)+2*@ABS(X2)+3*@ABS(X3)+4*@ABS(X4);
- X1-X2-X3+X4=0;
- X1-X2+X3-3*X4=1;
- X1-X2-2*X3+3*X4=-0.5;
- END
运行截图如下:
LINGO一个重要特质就是集合(SETS):分为原始集和派生集:
具体的格式为:
原始集名/1.2.3...n/:属性1,属性2,属性3;
派生集名(原始集名1,原始集名2):属性1,属性2;
其中集合操作函数有:@SUM,@FOR,@PROD等等。
利用lingo解决指派问题:已经知道下列工人完成指定的工作时间如下表:
- MODEL:
- SETS:
- VAR/1..4/; !定义一个原始集;
- LINK(VAR,VAR):C,X; !定义一个4*4的派生集,即为指派数组;
- ENDSETS
- DATA:
- C=15 18 21 24
- 19 23 22 18
- 26 17 16 19
- 19 21 23 17;
- ENDDATA
- MIN=@SUM(LINK:C*X);
- @FOR(VAR(I):@SUM(VAR(J):X(I,J))=1); !每一个工作都有人解决;
- @FOR(VAR(J):@SUM(VAR(I):X(I,J))=1); !每一个人都有工作做;
- @FOR(LINK:@BIN(X));
- END
运行截图如下所示:
即:甲——B,乙——A,丁——C,丙——D.
用LINGO解决0-1背包问题:
给定N个物品,每个物品有一个重量W和一个价值V.你有一个能装M重量的背包.问怎么装使得所装价值最大.每个物品只有一个,规定重量不能超过8,价值和重量如下:
v[]={2,1,4,3,5};
w[]={1,4,2,3,5};
代码如下:
- MODEL:
- SETS:
- JIHE/1..5/:VALUE,WEIGHT,CHOOSE;
- ENDSETS
- DATA:
- VALUE=2,1,4,3,5;
- WEIGHT=1,4,2,3,5;
- ENDDATA
- MAX=@SUM(JIHE:VALUE*CHOOSE);
- @SUM(JIHE:WEIGHT*CHOOSE)<=11;
- @FOR(JIHE:@BIN(CHOOSE));
- END
运行截图如下:
表示选择1,3,4,5的时候,总价值最大。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。