浼樺寲妯″瀷璁茶В 闄凩INGO绋嬪簭 - 鐧惧害鏂囧簱 联系客服

发布时间 : 星期一 文章浼樺寲妯″瀷璁茶В 闄凩INGO绋嬪簭 - 鐧惧害鏂囧簱更新完毕开始阅读0c3b2224a5e9856a56126002

@for(jd(i):@gin(k(i))); end

说明:(1)“#gt#”是逻辑运算符,意思是“大于”;逻辑关系式“i#gt#1”的意思就是“i>1”。LINGO中的逻辑运算符有九种,分别是 #and#(与) #eq#(等于) #ge#(大于等于) #or#(或) #ne#(不等于) #lt#(小于) #not#(非) #gt#(大于) #le#(小于等于) (2)当i?1时k0不包含在集合属性中,故在程序中必须将i?1时的约束条件单独写出,即“k(1)=10+z(1)+j(1)-x(1);”。

而对i?2,3,4的循环情况,需要增加逻辑关系式“i#gt#1”,这个限制条件与

集合之间用竖线“|”分开,称为过滤条件,即“@for(jd(i)|i#gt#1:k(i)=k(i-1)+z(i)+j(i)-x(i));”,意思就是“i>1(即i?2,3,4)时成立”。 5.4 派生集合

根据上述集合知识,集合的属性相当于以集合的元素为下标的数组。例如,“xi”表示属性x的一维数组;那么,“xij”应该表示属性x的二维数组,它的两个下标应该来自于两个集合的元素,即两个集合派生出来的二维集合,这种表示方式与矩阵的表示非常相似,因此LINGO建模语言也称为矩阵生成器。

直接把元素列举出来的集合,称为基本集合。基于基本集合而派生出来的二维或多维集合称为派生集合。

派生集合程序格式:“派生集合名称(基本集合1,基本集合2):派生集合属性”。 例如,2.3运输问题。 模型建立:

假设ki(i?1,2)表示第i个煤厂的进煤量,qj(j?1,2,3)表示第j个小区的需求量,cij表示第i个煤厂到第j个小区的运输费用,xij表示第i个煤厂到第j个小区的供煤量,总费用记作f。

23ijminf???ci?1j?1xij?3??xij?ki(i?1,2)?j?1 ?2s.t??xij?qi(j?1,2,3)?i?1?xij?0(i?1,2;j?1,2,3)??LINGO程序:

11

model: sets: mc/jia,yi/:kc; jm/a,b,c/:xq; links(mc,jm):c,x; endsets data: kc=60,100; xq=50,70,40; c=10,5,6 4,8,12; enddata

min=@sum(links(i,j):c(i,j)*x(i,j)); @for(mc(i):@sum(jm(j):x(i,j))=kc(i)); @for(jm(j):@sum(mc(i):x(i,j))=xq(j)); end

5.5 通过电子表格(Excel)文件传递数据

实际应用中,可能有大量数据是存放在Excel电子表格中,LINGO通过“@ole”函数实现与Excel文件进行数据传递,只能用在模型的集合段和数据段,其三种调用格式是:

(1)集合名/@ole(‘文件名.xls’,’单元名’/:引用指定Excel文件中的指定单元数据作为集合的元素。

(2)属性=@ole(‘文件名.xls’,’单元名’):数据输入格式,将指定Excel文件中的指定单元数据赋值给属性。

(3)@ole(‘文件名.xls’,’单元名’) =属性:数据输出格式,将属性的值赋给指定Excel文件中的指定单元。

备注:调用时,务必保证Excel文件与LINGO程序文件在同一个文件夹下。 例如,4.3混合泳接力队的选拔问题。 模型建立:

假设用tij(i?1,2,3,4,5;j?1,2,3,4)表示第i名队员的第j种泳姿的成绩,xij表示第i名队员的第j种泳姿是否被选择,则

?1,第i名队员的第j种泳姿被选择xij??

0,第i名队员的第j种泳姿未被选择?12

接力队总成绩记为f。

54ijminf???ti?1j?1xij?5??xij?1(i?1,2,3,4)?j?1?4s.t??xij?1(j?1,2,3,4,5)?i?1?0?xij?1且为整数(i?1,2,3,4;j?1,2,3,4,5)??

LINGO程序:

model: sets:

dy/@ole('游泳接力队的选拔问题.xls','duiyuan')/; yz/@ole('游泳接力队的选拔问题.xls','yongzi')/; xb(dy,yz):t,x; endsets data:

t=@ole('游泳接力队的选拔问题.xls','chengji'); enddata

min=@sum(xb(i,j):t(i,j)*x(i,j)); @for(dy(i):@sum(yz(j):x(i,j))<=1); @for(yz(j):@sum(dy(i):x(i,j))=1); @for(xb(i,j):@bin(x(i,j))); end 5.6 旅游问题

从北京乘飞机到东京、纽约、墨西哥城、伦敦、巴黎五个城市做旅游,每个城市去且仅去一次,再回到东京,如何安排旅游线路使总旅程最短。城市间航线距离如下:

伦敦 墨西哥城 纽约 巴黎 北京 东京

伦敦 - 56 35 21 51 60 墨西哥城 56 - 21 57 78 70 纽约 35 21 - 36 68 68 巴黎 21 57 36 - 51 61 北京 51 78 68 51 - 13 东京 60 70 68 61 13 - 13