lingo解决线性规划问题的程序(经典)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Lingo12软件培训教案

Lingo 主要用于求解线性规划,整数规划,非线性规划,V10以上版本可编程。

例1 一个简单的线性规划问题

0 , 600 2 100 350 st. 3 2max >=<=+=<<=++=y x y x x y x y x z

!exam_1.lg4 源程序 max = 2*x+3*y; [st_1] x+y<350; [st_2] x<100;

2*x+y<600; !决策变量黙认为非负; <相当于<=; 大小写不区分

当规划问题的规模很大时,需要定义数组(或称为矩阵),以及下标集(set) 下面定义下标集和对应数组的三种方法,效果相同::r1 = r2 = r3, a = b = c. sets :

r1/1..3/:a; r2 : b;

r3 : c;

link2(r1,r2): x; link3(r1,r2,r3): y; endsets data :

ALPHA = 0.7; a=11 12 13 ; r2 = 1..3; b = 11 12 13; c = 11 12 13; enddata

例2 运输问题

解: 设决策变量

ij x = 第

i 个发点到第j 个售点的运货量,i =1,2,…m;

j =1,2,…n; 记为ij c =第i 个发点到第j 个售点的运输单价,i =1,2,…m; j =1,2,…n 记i s =第i 个发点的产量, i =1,2,…m; 记j d =第j 个售点的需求量, j =1,2,…n. 其中,m = 6; n = 8.

设目标函数为总成本,约束条件为(1)产量约束;(2)需求约束。 于是形成如下规划问题:

n

j m i x n

j d x

m i s x x c ij j n

i ij

i m

j ij m i n

j ij ij ,...,2,1,,...,2,1,0 ,...,2,1,

,...,2,1, st.

z min 1

111

==>=<==<==∑∑∑∑====

把上述程序翻译成LINGO 语言,编制程序如下:

!exam_2.lg4 源程序

model : !6发点8收点运输问题; sets :

rows/1..6/: s; !发点的产量限制;

cols/1..8/: d; !售点的需求限制;

links(rows,cols): c, x; !运输单价,决策运输量;

endsets

!-------------------------------------;

data:

s = 60,55,51,43,41,52;

d = 35 37 22 32 41 32 43 38;

c = 6 2 6 7 4 2 9 5

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: c*x); !目标函数=运输总成本;

@for(rows(i):

@sum(cols(j): x(i,j))<=s(i) ); ! 产量约束;

@for(cols(j):

@sum(rows(i): x(i,j))=d(j) ); !需求约束;

end

例3把上述程序进行改进,引进运行子模块和打印运算结果的语句:!exam_3.lg4 源程序

model: !6发点8收点运输问题;

sets:

rows/1..6/: s; !发点的产量限制;

cols/1..8/: d; !售点的需求限制;

links(rows,cols): c, x; !运输单价,决策运输量; endsets

!==================================;

data:

s = 60,55,51,43,41,52;

d = 35 37 22 32 41 32 43 38;

c = 6 2 6 7 4 2 9 5

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

!==================================;

submodel transfer:

min = cost; ! 目标函数极小化;

cost = @sum(links: c*x); !目标函数:运输总成本;

@for(rows(i):

@sum(cols(j): x(i,j)) < s(i) ); ! 产量约束;

@for(cols(j):

@sum(rows(i): x(i,j)) > d(j) ); !需求约束;

endsubmodel

!==================================;

calc:

@solve(transfer); !运行子模块(解线性规划);

@divert('transfer_out.txt');!向.txt文件按自定格式输出数据;

@write('最小运输成本=',cost,@newline(1),'最优运输方案x=');

@for(rows(i):

@write(@newline(1));

@writefor(cols(j): ' ',@format(x(i,j),'3.0f') ) );

@divert(); !关闭输出文件;

endcalc

end

打开transfer_out.txt文件,内容为:

最小运输成本=664

相关文档
最新文档