lingo集合的三种最常用经典用法

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

lingo集合的三种最常用经典用法

热度11已有392 次阅读2010-8-10 12:24 |个人分类:lingo小经验|

!集合的使用初步,eg供求问题;

MODEL:

SETS:

QUARTERS/1,2,3,4/:DEM,RP,OP,INV;

ENDSETS

MIN=@SUM(QUARTERS:400*RP+450*OP+20*INV);

@FOR(QUARTERS(I):RP(I)<40);

@FOR(QUARTERS(I)|I#GT#1:

INV(I)=INV(I-1)+RP(I)+OP(I)-DEM(I););

INV(1)=10+RP(1)+OP(1)-DEM(1);

DATA:

DEM=40,60,75,25;

ENDDATA

END

!稀疏集合的使用方法, 经典最短路问题,;

model:

sets:

cities/S,A1,A2,A3,B1,B2,C1,C2,T/:L; !cities到城市s的距离,索引使用时自动把S,A1..编成了1,2..;

roads(cities,cities)/

S,A1 S,A2 S,A3

A1,B1 A1,B2 A2,B1 A2,B2, A3,B1 A3,B2

B1,C1 B1,C2 B2,C1 B2,C2

C1,T C2,T/:D;

endsets

data:

D= 6 3 3

6 5 8 6

7 4

6 7 8 9

5 6; !数据段集合的赋值,必须对应集合所有属性,形成一一照应,否则就不要再数据段赋值,在求解段付部分集合的值

也是可以的。;

enddata

L(1)=0; !这里的索引不能用L(S)=0,只能用L(1)=0,或者用L(index(s))=0 ;

@for(cities(i)|i#gt#1:

L(i)=@min(roads(j,i):L(j)+D(j,i));

);

end

!稀疏集合的一种好的方法,元素过滤法,体会对索引的操作,以及相应的复制方式,最有配对eg;

model:

sets:

students/s1..s8/;

pairs(students,students)|&2#gt#&1:

benefit,match;

endsets

data:

benefit=

9 3 4 2 1 5 6

1 7 3 5

2 1

4 4 2 9 2

1 5 5 2

8 7 6

2 3

4;

enddata

max=@sum( pairs(i,j):benefit(i,j)*match(i,j) );

@for(students(i):

@sum(pairs(j,k)|(j#eq#i)#or#(k#eq#i):match(j,k))=1);

@for(pairs(i,j):@bin(match(i,j)));

end

相关文档
最新文档