LINGO
- LINGO的使用比较简单,
- 它总是以model:开始,以end结束
- 字母不区分大小写
- 语句结束用分号
- LINGO默认变量为非负
- 约束条件可以命名可以不命名(软件会自动帮你命名)
将文件保存、命名后,选择solver|Solve 执行
最优解和影子价格
下面给一段代码
model:
max=72*x1+64*x2;
[milk] x1+x2<50;
[time] 12*x1+8*x2<480;
[cpct] 3*x1<100;
end
得到如下报告
Global optimal solution found.
Objective value: 3360.000
Infeasibilities: 0.000000
Total solver iterations: 2
Elapsed runtime seconds: 0.22
Model Class: LP
Total variables: 2
Nonlinear variables: 0
Integer variables: 0
Total constraints: 4
Nonlinear constraints: 0
Total nonzeros: 7
Nonlinear nonzeros: 0
Variable Value Reduced Cost
X1 20.00000 0.000000
X2 30.00000 0.000000
Row Slack or Surplus Dual Price
1 3360.000 1.000000
MILK 0.000000 48.00000
TIME 0.000000 2.000000
CPCT 40.00000 0.000000
其中slack or surplus 是资源剩余 为0代表全部使用 也就是有效约束(紧约束)
dual price 是迭代后算出的影子价格,代表约束的资源增加一个单位后 总价值的提升
敏感性分析
找到lingo的solver里的option选项 在general solver里如图更改
再点击solve后 找到solver|range 就能得到如此输出
Ranges in which the basis is unchanged:
Objective Coefficient Ranges:
Current Allowable Allowable
Variable Coefficient Increase Decrease
X1 72.00000 24.00000 8.000000
X2 64.00000 8.000000 16.00000
Righthand Side Ranges:
Current Allowable Allowable
Row RHS Increase Decrease
MILK 50.00000 10.00000 6.666667
TIME 480.0000 53.33333 80.00000
CPCT 100.0000 INFINITY 40.00000
得到能更改的上下限
全局最优解
注意,为了效率,默认的最优解是局部最优解,找到设置里的global solver,设置全局最优解。
分段函数,阈值和整数规划
分段函数可以用
(x2-500)x3=0这样的来约束
阈值可以引入0,1变量y,80y<=x<=Maxy,y取值是0,1
整数规划,用@gin规定