LINGO软件的初步使用及解读

LINGO软件的初步使用及解读

rygdsddssd God

早上八点上到中午十一点半,休息了5分钟,我要死了。——2023/3/26疲惫不堪的我

例子:牛奶生产

problem1
答案代码对照着一看就知道了
answer1

1
2
3
4
5
6
max=72*x1+64*x2;
x1+x2<50;
12*x1+8*x2<480+5;
3*x1<100;
@GIN(x1);
@gin(x2);

介绍

内容解读

内容解读

found

表示全局最优解找到

value

表示最优目标值

iterations

表示用单纯行法进行了两次迭代

Variable

表示变量,运行结果中有两个变量为x1,x2

Value

给出最优解中个变量的值

Cost

与最优单纯形表中的检验数相差一个符号的数。
为了使某个变量在解中的数值增加一个单位,目标函数必须付出的代价(增加或减少Reduced Cost的值)

Surplus

表示接近等于的程度
在约束条件中是<=,叫做松弛变量
在约束条件中是>=,叫做过剩变量
在约束条件中是=,值为0,该约束为一个紧约束(或有效约束)
如果一个约束条件错误,作为一个不可行约束,Slack or Surplus为负数
Slack or Surplus表示的是:约束离相等还差多少

Price

“DUAL PRICE”
(对偶价格)
表示当对应约束有微小变动时,目标函数的变化率。输出结果中对应于每一个约束有一个对偶价格。
若其数值为p,表示对应约束中不等式右端项若增加1个单位,目示函数将增加p个单位(max型问题)。

其实也就是求导

显然,如果在最优解处约束正好取等号(也就是“紧约束”,也称为有效约束或起作用约束),对偶价格值才可能不是0。对于非紧约束,DUAL PRICE的值为0,表示对应约束中不等式右端项的微小扰动不影响目标函数。有时,通过分析DUAL PRICE,也可对产生不可行问题的原因有所了解。

例如在本例中,c约束条件的Dual Price为1,表示2x1+x2<=600增加一个单位到2x1+x2<=601使目标值增加到-1(目标函数的Dual Price为-1),则Objective value就变为799

选址问题

problem2

lingo求解非线性规划问题3:选址问题

answer2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
model:

!创建矩阵;
sets:
liaochang/1..2/:x1,y1;
gongdi/1..6/:a,b,d;
zuobiao(gongdi,liaochang):x;
endsets

!输入数据;
data:
a=1.25,8.75,0.5,5.75,3,7.25;
b=1.25,0.75,4.75,5,6.5,7.25;
d=3,5,4,7,6,11;
enddata

!列出目标函数及表达式;
min = @sum(zuobiao(i,j):x(i,j)*@sqrt((a(i)-x1(j))^2+(b(i)-y1(j))^2));
@for(gongdi(i):@sum(liaochang(j):x(i,j))=d(i));
@for(liaochang(j):@sum(gongdi(i):x(i,j))<=20);

end

轰炸任务

problem3
对于这一道题,我先附上我一开始的解法:
answer3
这个做法是有问题的,虽然不是逻辑上的问题。
这是因为在这里目标函数”max”是一个非线性的

1
max=1-(0.9^x1*0.8^x2*0.85^x3*0.75^x4*0.92^x5*0.84^x6*0.88^x7*0.8^x8);

而LINGO是用来求解线性规划问题的工具(也可以求解非线性规划,但不能保证得到全局最优解)
所以,

  • 要将目标函数改为线性问题
    • 使用log
  • 限制条件要将所有未知数放在式子左边

修改后代码如下

1
2
3
4
5
6
7
min=x1*@log(0.9)+x2*@log(0.8)+x3*@log(0.85)+x4*@log(0.75)+x5*@log(0.92)+x6*@log(0.84)+x7*@log(0.88)+x8*@log(0.8);

(x1*450+x2*480+x3*540+x4*600)/2+(x5*450+x6*480+x7*540+x8*600)/3+((x1+x5)*450+(x2+x6)*480+(x3+x7)*540+(x4+x8)*600)/4+(x1+x2+x3+x4+x5+x6+x7+x8)*200<48000;
x1+x2+x3+x4<48;
x5+x6+x7+x8<32;
@gin(x1);@gin(x2);@gin(x3);@gin(x4);
@gin(x5);@gin(x6);@gin(x7);@gin(x8);

运行结果:
answer3_c

  • 标题: LINGO软件的初步使用及解读
  • 作者: rygdsddssd
  • 创建于 : 2023-03-26 09:40:50
  • 更新于 : 2023-04-01 16:44:53
  • 链接: http://rygdsddssd.github.io/2023/03/26/LINGO软件的初步使用及解读/
  • 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
 评论
此页目录
LINGO软件的初步使用及解读