优化与LINGO1
- 格式:ppt
- 大小:522.00 KB
- 文档页数:40


Lingo求解0-1整数规划问题(LINGO18.0x64)
案例:有99个数,从中取17个数使它们的和为89.884。
⽤于解决该问题的Lingo代码如下:
1 model:
2 sets:
3 row/1..99/:c,x;
4 endsets
5 data:
6 c=6,6,6,4.56,5.76,2.94,2.1738,0.5723,6,6,3.3,6,3.72,3.6,1.8,2.145,4.785,6,6,6,3,2.85,3.2565,4.776,3.063,3,6,6,6,5.4,5.4,6,3.54,30,30,10,6.3,10,2.34,2.514,6.555,7.8,10,30,5.04,10,6.3,6.075,9.32988,7.2,9,2.7,5.415,10,3.75,1.5,8.1
7 enddata
8 min=@abs(89.884-@sum(row:c*x));
9 @sum(row:x)=17;
10 @for(row:@bin(x));
其中
row/1..99/:c,x; ⽤于定义长度为99的⾏向量c,x
min=@abs(89.884-@sum(row:c*x)); 表⽰选出的数的和为89.884,且该条件作为⽬标函数
@sum(row:x)=17; 表⽰向量x的和为17
@for(row:@bin(x)); ⽤于设定向量x中的元素取值⾮0即1,⽤于0-1整数规划 计算结果部分展⽰如下:
[学习笔记]⼀个实例理解Lingo的灵敏性分析
⼀个实例理解Lingo的灵敏性分析
线性规划问题的三个重要概念:
最优解就是反应取得最优值的决策变量所对应的向量。
最优基就是最优单纯形表的基本变量所对应的系数矩阵如果其⾏列式是⾮奇异的,则该系数矩阵为最优基。
最优值就是最优的⽬标函数值。
Lingo的灵敏性分析是研究当⽬标函数的系数和约束右端项在什么范围(此时假定其它系数不变)时,最优基保持不变。灵敏性分析给出的只是最优基保持不
变的充分条件,⽽不⼀定是必要条件。下⾯是⼀道典型的例题。 ⼀奶制品加⼯⼚⽤⽜奶⽣产A1,A2两种奶制品,1桶⽜奶可以在甲车间⽤12⼩时加⼯成3公⽄A1,或者在⼄车间⽤8⼩时加⼯成4公⽄A2。根据市场需求,⽣产
的A1,A2全部能售出,且每公⽄A1获利24元,每公⽄A2获利16元。现在加⼯⼚每天能得到50桶⽜奶的供应,每天正式⼯⼈总的劳动时间480⼩时,并且甲车间
每天⾄多能加⼯100公⽄A1,⼄车间的加⼯能⼒没有限制。试为该⼚制订⼀个⽣产计划,使每天获利最⼤,并进⼀步讨论以下3个附加问题:1) 若⽤35元可以买到1桶⽜奶,应否作这项投资?若投资,每天最多购买多少桶⽜奶?
2) 若可以聘⽤临时⼯⼈以增加劳动时间,付给临时⼯⼈的⼯资最多是每⼩时⼏元?
3) 由于市场需求变化,每公⽄A1的获利增加到30元,应否改变⽣产计划?
模型代码:max=72*x1+64*x2;
x1+x2<=50;
12*x1+8*x2<=480;
3*x1<=100;
运⾏求解结果:Objective value: 3360.000
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
2 0.000000 48.00000
3 0.000000 2.000000
* *
第1讲 Lingo软件入门
司守奎
烟台市,海军航空工程学院数学教研室
Email:sishoukui@
1 Lingo软件的基本语法
1.1 集合
集合部分的语法为
sets:
集合名称1/成员列表1/:属性1_1,属性1_2,…,属性1_n1;
集合名称2/成员列表2/:属性2_1,属性2_2,…,属性2_n2;
派生集合名称(集合名称1,集合名称2):属性3_1,…,属性3_n3;
endsets
例26
sets:
product/A B/;
machine/M N/;
week/1..2/;
allowed(product,machine,week):x;
endsets
1.2 数据
数据部分的语法为
data:
属性1=数据列表;
属性2=数据列表;
enddata
1.3 计算
计算段部分不能含有变量,必须是已知数据的运算。
calc:
b=0;
a=a+1;
endcalc
1.4 模型的目标函数和约束条件
这里就不具体给出了,下面通过具体例子给出。
1.5 子模型
在 LINGO 9.0 及更早的版本中,在每个LINGO 模型窗口中只允许有一个优化模型,可以称为主模型(MAIN MODEL)。在LINGO 10.0 中,每个LINGO 模型窗口中除了主模型外,用户还可以定义子模型(SUBMODEL)。子模型可以在主模型的计算段中被调用,* *
这就进一步增强了LINGO 的编程能力。
子模型必须包含在主模型之内,即必须位于以“MODEL:”开头、以“END”结束的模块内。同一个主模型中,允许定义多个子模型,所以每个子模型本身必须命名,其基本语法是:
SUBMODEL mymodel:
可执行语句(约束+目标函数);
ENDSUBMODEL
其中 mymodel 是该子模型的名字,可执行语句一般是一些约束语句,也可能包含目标函数,但不可以有自身单独的集合段、数据段、初始段和计算段。也就是说,同一个主模型内的变量都是全局变量,这些变量对主模型和所有子模型同样有效。
.
. 例题1. 在lingo中输入下列线性规划模型,并求解
Ajijixjidz),(),(),( min
s.t. 1),1(Vjjx,
,},10,,2,1{,0),(x,),(,1,1),(VVAVViiijixjjixVi为非负实数所有
的数值如下表:d
d=0 8 5 9 12 14 12 16 17 22
8 0 9 15 16 8 11 18 14 22
5 9 0 7 9 11 7 12 12 17
9 15 7 0 3 17 10 7 15 15
12 16 9 3 0 8 10 6 15 15
14 8 11 17 8 0 9 14 8 16
12 11 7 10 10 9 0 8 6 11
16 18 12 7 6 14 8 0 11 11
17 14 12 15 15 8 6 11 0 10
22 22 17 15 15 16 11 11 10 0;
分析:这个模型输入的难点,在于变量的数量太多,足足有100个。约束条件也比较多,有没有什么方便的输入方法?下面介绍lingo中集合的建立
新建lingo文件
输入下面内容
model:
sets:
V/1..10/;!创建集合V;
A(V,V):d,x;!创建集合A是V乘V.而d,x是与A同结构的,即d,x分别是10*10矩阵;
endsets
min=sum(A(i,j):d(i,j)*x(i,j));!创建目标函数;
sum(V(j):x(1,j))>=1; !第一个约束条件;