LINGO 程序范例
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
线性规划——LINGO程序集
向浩 2011-7-20
程序一:
Model:
Max= 4.8*x11 + 4.8*x21 + 5.6*x12 + 5.6*x22 - 10*x1 - 8*x2 - 6*x3; x11+x12 < x + 500;
x21+x22 < 1000;
0.5*x11 - 0.5*x21 > 0;
0.4*x12 - 0.6*x22 > 0;
x=x1+x2+x3;
(x1 - 500) * x2=0;
(x2 - 500) * x3=0;
@bnd(0,x1, 500);
@bnd(0,x2, 500);
@bnd(0,x3,500);
End
程序二:
Model:
SETS:
Points/1..4/: b, c, y, z; ! 端点数为4,即分段数为3; ENDSETS
DATA:
b=0 500 1000 1500;
c=0 5000 9000 12000;
y=,,,0; ! 增加的虚拟变量y(4)=0;
ENDDATA
Max= 4.8*x11 + 4.8*x21 + 5.6*x12 + 5.6*x22 - @sum(Points: c*z); x11+x12 < x + 500;
x21+x22 < 1000;
0.5*x11 - 0.5*x21 > 0;
0.4*x12 - 0.6*x22 > 0;
@sum(Points: b*z)=x;
@for(Points(i)|i#eq#1: z(i) <= y(i));
@for(Points(i)|i#ne#1: z(i) <= y(i-1)+y(i));
@sum(Points: y)=1;
@sum(Points: z)=1;
@for(Points: @bin(y));
End
程序三:
MODEL:
TITLE 瓶颈设备的多级生产计划;
! 从文本文件exam0502.LDT中读取数据;
SETS:
! PART = 项目集合, Setup = 生产准备费,Hold = 单件库存成本,
A = 对瓶颈资源的消耗系数;
PART/ @FILE( 'F:\lindo\lindo书\ch05\exam0502.LDT')/ : Setup, Hold, A; ! TIME = 计划期集合,Capacity = 瓶颈设备的能力;
TIME / @FILE( 'F:\lindo\lindo书\ch05\exam0502.LDT')/ : Capacity;
! USES = 项目结构关系,Req = 项目之间的消耗系数;
USES( PART, PART) : Req;
! PXT = 项目与时间的派生集合,Demand = 外部需求,
X = 产量(批量), Y = 0/1变量,INV = 库存;
PXT( PART, TIME): Demand, X, Y, Inv;
ENDSETS
! 目标函数;
[OBJ] Min = @sum(PXT(i,t):
setup(i)*Y(i,t) + hold(i)*Inv(i,t) );
! 物流平衡方程;
@FOR( PXT(i, t) | t #NE# 1 : [Bal]
Inv(i,t-1)+X(i,t)-Inv(i,t) = Demand(i, t) +
@SUM( USES(i,j): Req(i,j)*X(j,t)) );
@FOR( PXT(i, t) | t #eq# 1 : [Ba0]
X(i,t)-Inv(i,t) = Demand(i, t) +
@SUM( USES(i,j): Req(i,j)*X(j,t)) );
! 能力约束;
@FOR( TIME(t):
[Cap] @SUM( PART(i): A(i)*X(i,t) ) < Capacity(t) );
! 其他约束;
M = 25000;
@FOR( PXT(i,t): X(i,t) <= M*Y(i,t));
@FOR( PXT: @BIN(Y) );
DATA:
Demand = @FILE( 'F:\lindo\lindo书\ch05\exam0502.LDT'); Capacity = @FILE( 'F:\lindo\lindo书\ch05\exam0502.LDT'); Setup = @FILE( 'F:\lindo\lindo书\ch05\exam0502.LDT');
Hold = @FILE( 'F:\lindo\lindo书\ch05\exam0502.LDT');
A = @FILE( 'F:\lindo\lindo书\ch05\exam0502.LDT');
Req = @FILE( 'F:\lindo\lindo书\ch05\exam0502.LDT'); ENDDATA
程序四:
model:
Title 钢管下料 - 最小化钢管根数的LINGO模型;
SETS:
NEEDS/1..4/:LENGTH,NUM;
! 定义基本集合NEEDS及其属性LENGTH,NUM;
CUTS/1..3/:X;
! 定义基本集合CUTS及其属性X;
PATTERNS(NEEDS,CUTS):R;
! 定义派生集合PATTERNS(这是一个稠密集合)及其属性R; ENDSETS
DATA:
LENGTH=4 5 6 8;
NUM=50 10 20 15;
CAPACITY=19;
ENDDATA
min=@SUM(CUTS(I): X(I) );
!目标函数;
@FOR(NEEDS(I): @SUM(CUTS(J): X(J)*R(I,J) ) >NUM(I) );
!满足需求约束;
@FOR(CUTS(J): @SUM(NEEDS(I): LENGTH(I)*R(I,J) ) @FOR(CUTS(J): @SUM(NEEDS(I): LENGTH(I)*R(I,J) ) >CAPACITY -@MIN(NEEDS(I):LENGTH(I)) ); !合理切割模式约束; @SUM(CUTS(I): X(I) ) >26; @SUM(CUTS(I): X(I) ) <31; !人为增加约束;