通常,一个优化模型由以下三部分所组成:
(1)目标函数.一般表示出成求某个数学表达式的最大值或最小值。
(2)决策变量.目标函数值取决于哪些变量。
(3)约束条件.对变量附加一些条件限制(通常用等式或不等式表示)
LINGO默认所有决策变量都非负,因而因变量非负条件可以不必输入。
LINGO模型以语句"MODEL:"开头,以"END"结束,对于比较简单的模型,这两个语句可以省略。
MODEL: !定义集合; SETS: WH/W1..W6/:AI;!基本集合:集合名称、成员、属性; VD/V1..V8/:DJ; LINKS(WH,VD):C,X;!衍生集合:集合名、初始集合、属性; ENDSETS !数据初始化; DATA: AI=60,55,51,43,41,52; DJ=35,37,22,32,41,32,43,38; C=6,2,6,7,4,2,5,9 4,9,5,3,8,5,8,2 5,2,1,9,7,4,3,3 7,6,7,3,9,2,7,1 2,3,9,5,7,2,6,5 5,5,2,2,8,1,4,3; ENDDATA !目标函数; MIN=@SUM(LINKS(I,J):C(I,J)*X(I,J)); !约束条件; @FOR(WH(I):@SUM(VD(J):X(I,J))<=AI(I)); @FOR(VD(J):@SUM(WH(I):X(I,J))=DJ(J)); END
LINGO逻辑运算符:
#EQ# 相等
#NE# 不相等
#GT# 大于
#GE# 大于或等于
#LT# 小于
#LE# 小于或等于
#AND# #OR# #NOT#
关系运算符:
=
<=
>=
算术优于逻辑、逻辑优于关系
数学函数如 @ABS()、@SIN()等
概率函数等
@函数名(集合名|条件:表达式)
model: sets: DAYS/MON..SUN/:R,X; endsets data: R=20 12 18 16 19 14 12;!每天所需的最少志愿数; enddata min = z; n=@size(DAYS); z=@sum(DAYS:X); @FOR(DAYS:@GIN(X));!限定变量取整; @FOR(DAYS(I):Z-X(@WRAP(I+1,n))-X(@WRAP(I+2,n))>=R(I)); end
1.8用LINGO实现非线性曲线拟合
没有约束条件的规划问题适合LINGO求解
model: sets: BAC/R1..R23/:T,Y; endsets data: T=0.25,0.5,0.75,1,1.5,2,2.5,3,3.5,4,4.5,5,6,7,8,9,10,11,12,13,14,15,16; Y=30,68,75,82,82,77,68,68,58,51,50,41,38,35,28,25,18,15,12,10,7,7,4; enddata min=@SUM(BAC:(A1*(@EXP(-A2*T)-@EXP(-A3*T))-Y)^2); end