LINGO 程序范例

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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;

!人为增加约束;

相关文档
最新文档