LINGO软件入门一、二阶线性规划问题
LINGO代码:
max=98 * x 1277 * x2-x1 ^2- 0.3 * x1 * x2-2 * x2 ^ 2; x1 x2100; x1=2*x2; @gin(x1 ); @gin(x ); LINGO始终根据" MAX="或" MIN="查找所需的函数。 句子的顺序并不重要。 将变量限定为整数值的语句为“@GIN(2(x1 )”和“@GIN(2) x2 )”,不能写为“@GIN(2)2)”。 否则,LINGO会将该模型视为没有整数变量。 LINGO中的函数必须以“@”开头,其中整数变量函数@tsddw,@GIN,上下边界决定函数@FREE,@SUB,@SLB与LINDO中的指令类似。 并且0/1变量函数是@tsddw函数。 二、集合的基本用法和LINGO模型的基本要素示例: SAILCO公司需要决定下四个季度的帆船产量。 接下来四个季度帆船需求量分别为40条、60条、75条、25条,这些需求必须按时满足。 季度正常生产能力为40艘帆船,每艘船的生产费用为400美元。 加班生产的情况下,每船的生产费用为450美元。 季度末,每艘船的库存费用为20美元。 设生产提前期为0,初始库存为10艘船。 怎样安排生产才能把总费用降到最低?
如果将需求量、正常生产产量、加班生产产量、库存量分别用DEM、RP、OP、INV表示,则DEM、RP、OP、INV应该是季度对应的值,也就是说他们应该是由四个要素组成的数组
model : sets : quarters/1、2、3、4/: DEM、RP、OP、INV; end sets min=@ sum (quarters :400 * RP 450 * op20 * inv ); @for(quarters(I ) :RP(I ) I ) 40 ); @for(quarters(I )|I#GT#1: INV(I ) I )=inv ) I-1 ) RP ) I ) op ) I )-DEM(I ) I ); ); INV(1)=A RP(1)1) op )1)-DEM(1) 1; DATA:DEM=40、0、75和25; A=? ENDDATAEND其中s和ENDSETS用于定义集合。 这里,DATA以上、ENDSETS以下用于定义制约和目标函数。
这里,@SUM (集合(下标) :关于集合属性的公式)、
在该例子中,目标函数也可以等价地写
@sum(quarters(I ) : 400*RP(i ) I ) 450*OP(i ) I ) 20*INV(i ) I ) )。
当I#GT#1表示I1时,GT=Greater Than。
为了设定数据,DATA会来。 例如,在不知道初始库存的情况下,将初始库存设为a,在数据段中输入" A=? 用”就好了吧。 如果在这个时候执行的话,会被要求输入a。 执行结果截图:
三、基本集合和衍生集合实例:建筑工地位置(用平面坐标a、b表示,距离单位:公里)及水泥日用量d (吨)如下表所示。 2个临时料场位于p (5,1 )、q )、7 ),日储量分别有20吨。 从A、b两料场分别向各工地运送多少吨水泥,使总吨公里数最小? 两个新料场应该建在哪里,节约的吨公里数是多少
模型简称模型名称LP线性规划ILP整数线性规划BILP二阶线性整数规划NLP非线性规划INLP非线性整数规划QP二阶规划IQP二阶整数规划带PIP参数的整数规划ZOP零一规划MODEL:TITLE Location Problem; SETS: demand/1.6/:a、b、d; supply/1.2/:x、y、e; link(demand,supply ) :c; endsetsdata:a=1.2、8.75、0.5、5.75、3、7.25; b=1.25、0.75、4.75、5、6.5、7.75; d=3、5、4、7、6、11; e=20,20; ENDDATAINIT:x,y=5,1,2,7; 初始点值为x=(5,2 ),y=) ) 1,7 ); endinit[obj]min=@sum(link(I,j ) :c(I,j ) *(x(j ) a ) ) ((y ) j )-b ) ) ) ^ )1 @for(demand(I ); @for(supply(I ) :[supply_con]@sum ) demand ) j ) :c(j ) j,I ) )=e ) I; ); @for(supply:@free ) x; @free(y; ); 结束
这里解开的是新材料场的位置。 如果想继续使用原料场,请将初始化中的数据放入DATA中。