lingo解决线性规划问题程序经典.doc
文本预览下载声明
Lingo12软件培训教案
Lingo主要用于求解线性规划,整数规划,非线性规划,V10以上版本可编程。
例1 一个简单的线性规划问题
!exam_1.lg4 源程序
max = 2*x+3*y;
[st_1] x+y350;
[st_2] x100;
2*x+y600; !决策变量黙认为非负; 相当于=; 大小写不区分
当规划问题的规模很大时,需要定义数组(或称为矩阵),以及下标集(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
运输问题
计算6 个发点8 个收点的最小费用运输问题。产销单位运价如下表。
B1 B2 B3 B4 B5 B6 B7 B8 产量 A1 6 2 6 7 4 2 5 9 60 A2 4 9 5 3 8 5 8 2 55 A3 5 2 1 9 7 4 3 3 51 A4 7 6 7 3 9 2 7 1 43 A5 2 3 9 5 7 2 6 5 41 A6 5 5 2 2 8 1 4 3 52 销量 35 37 22 32 41 32 43 38
解: 设决策变量 = 第i个发点到第j个售点的运货量,i=1,2,…m; j=1,2,…n; 记为 =第i个发点到第j个售点的运输单价,i =1,2,…m; j=1,2,…n
记 =第i个发点的产量, i=1,2,…m; 记 =第j个售点的需求量, j=1,2,…n. 其中,m = 6; n = 8.
设目标函数为总成本,约束条件为(1)产量约束;(2)需求约束。
于是形成如下规划问题:
把上述程序翻译成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; ! 目标
显示全部