本篇文章,主要是熟悉lingo软件操作,利用lingo软件对线性规划和非线性规划问题的求解。
求解非线性规划问题(用lingo)
解:代码如下所示;
max=2*x1+3*x1^2+3*x2+x2^2+x3;
x1+2*x1+x2+2*x2^2+x3<=10;
x1+x1^2+x2+x2^2-x3<=150;
2*x1+x1^2+2*x2+x3<=40;
x1+x3=2;
x1+2*x2>=1;
x1>=0;
最终符合条件的值为:x1=0,x2=1.765564,x3=2。其中最大值为:10.41391
图 lingo解出的符合条件的最优解
某工厂利用两种原料甲、乙生产A、B、C三种产品,每月可供应的原材料数量(单位:t)、每万件产品所需各种原料的数量及每万件产品的价格如下表所示:
原料 | 每万件产品所需原料/t | 每月原料供应量/t | ||
A | B | C | ||
甲 | 4 | 3 | 1 | 180 |
乙 | 2 | 6 | 3 | 200 |
价格/万元 | 12 | 5 | 4 |
试制定每月最优生产计划,使得总收益最大。
解:根据题意,列出方程为:设a,b,c三种材料分别为:x1,x2,x3.
max=12*x1+5*x2+4*x3;
4*x1+3*x2+x3<=180;
2*x1+6*x2+3*x3<=200;
当每月使用a材料34t,c材料44t时,所取的利益最大为:584万元。
有四个工人,要指派他们分别完成4项工作,每人做各项工作所消耗的时间如下表:
问指派哪个人去完成哪项工作,可使总的消耗时间为最小?
解:代码如下:其中a是每个工人做每件工作所消耗的时间,x代表甲、乙、丙、丁四人。
model:
sets:
person/1..4/;
time/1..4/;
links(person,time):a,x;
endsets
data:
a=15,18,21,24,19,23,22,18,26,17,16,19,19,24,23,17;
enddata
min=@sum(links:a*x);
@for(person(i):@sum(time(j):x(i,j))<=1);
@for(time(i):@sum(person(j):x(j,i))=1);
@for(links:@bin(x));
解得:甲做b工作,乙做a工作,丙做c工作,丁做d工作。总共耗时70小时。
下面是用lingo软件,解得的符合条件的最优解。
Global optimal solution found.
Objective value: 70.00000
Objective bound: 70.00000
Infeasibilities: 0.000000
Extended solver steps: 0
Total solver iterations: 0
Model Class: PILP
Total variables: 16
Nonlinear variables: 0
Integer variables: 16
Total constraints: 9
Nonlinear constraints: 0
Total nonzeros: 48
Nonlinear nonzeros: 0
Variable Value Reduced Cost
A( 1, 1) 15.00000 0.000000
A( 1, 2) 18.00000 0.000000
A( 1, 3) 21.00000 0.000000
A( 1, 4) 24.00000 0.000000
A( 2, 1) 19.00000 0.000000
A( 2, 2) 23.00000 0.000000
A( 2, 3) 22.00000 0.000000
A( 2, 4) 18.00000 0.000000
A( 3, 1) 26.00000 0.000000
A( 3, 2) 17.00000 0.000000
A( 3, 3) 16.00000 0.000000
A( 3, 4) 19.00000 0.000000
A( 4, 1) 19.00000 0.000000
A( 4, 2) 24.00000 0.000000
A( 4, 3) 23.00000 0.000000
A( 4, 4) 17.00000 0.000000
X( 1, 1) 0.000000 15.00000
X( 1, 2) 1.000000 18.00000
X( 1, 3) 0.000000 21.00000
X( 1, 4) 0.000000 24.00000
X( 2, 1) 1.000000 19.00000
X( 2, 2) 0.000000 23.00000
X( 2, 3) 0.000000 22.00000
X( 2, 4) 0.000000 18.00000
X( 3, 1) 0.000000 26.00000
X( 3, 2) 0.000000 17.00000
X( 3, 3) 1.000000 16.00000
X( 3, 4) 0.000000 19.00000
X( 4, 1) 0.000000 19.00000
X( 4, 2) 0.000000 24.00000
X( 4, 3) 0.000000 23.00000
X( 4, 4) 1.000000 17.00000
Row Slack or Surplus Dual Price
1 70.00000 -1.000000
2 0.000000 0.000000
3 0.000000 0.000000
4 0.000000 0.000000
5 0.000000 0.000000
6 0.000000 0.000000
7 0.000000 0.000000
8 0.000000 0.000000
9 0.000000 0.000000