资源描述:
《lingo软件求解优化问题(2)作业》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、Lingo计算机学院张亚玲数学规划软件某公司有6个建筑工地,位置坐标为(ai,bi)(单位:公里),水泥日用量di(单位:吨)假设:料场和工地之间有直线道路(1)现有2料场,位于A(5,1),B(2,7),记(xj,yj),j=1,2,日储量ej各有20吨。制定每天的供应计划:即从A,B两料场分别向各工地运送多少吨水泥,使总的吨公里数最小。i123456a28.750.55.7537.25b30.754.7556.57.75d1.25547611例选址问题决策目标约束解:决策变量:料场j到工地i的运量——cij——12维
2、线性规划模型?lingo——表达式?目标:吨公里约束:需求供应建筑工地位置坐标(ai,bi)、水泥日用量di:对每个建筑工地(6个)都有一个对应的值都是一个由6个元素组成的数组——是已知的料场位置坐标(xj,yj)、日储量ej对每个料场(2个)都有一个对应的值都是一个由2个元素组成的数组——目前是已知的料场到建筑工地的供应计划cij对每个料场与建筑工地之间(6×2)都有一个对应的值是一个6×2个元素组成的矩阵——是未知数LINDO无数组,每个变量输入——麻烦(1)Lingo的集合Set——下标集合——100个工地?1、L
3、ingo的集合Set及其属性(2)集合Set及其属性定义数组下标集合demand/1..6/———表示6个建筑工地a,b,d称为该集合的属性———表示坐标(ai,bi)、水泥日用量di定义数组下标集合supply/1..2/———表示6个建筑工地该集合的属性x,y,e———表示坐标(xj,yj)、日储量ej定义数组下标集合link(demand,supply)———表示6×2个料场到建筑工地的连接该集合的属性c———表示每个料场与建筑工地之间供应计划cij1到6的整数建立下标集合(3)Lingo建模语言——集合段数据段需
4、求点的位置供需量sets:demand/1..6/:a,b,d;supply/1..2/:x,y,e;link(demand,supply):c;endsetsdata:a=1.25,8.75,0.5,5.75,3,7.25;b=1.25,0.75,4.75,5,6.5,7.75;d=3,5,4,7,6,11;e=20,20;x,y=5,1,2,7;enddata赋值需求供应连接LINGO建模语言也称为矩阵生成器(MATRIXGENERATOR)。类似DEMAND和SUPPLY直接把元素列举出来的集合,称为基本集合(pr
5、imaryset),而把LINK这种基于其它集合而派生出来的二维或多维集合称为派生集合(derivedset)。由于是DEMAND和SUPPLY生成了派生集合LINK,所以DEMAND和SUPPLY称为LINK的父集合。建立下标集合例3选址问题需求点的位置供需量sets:demand/1..6/:a,b,d;supply/1..2/:x,y,e;link(demand,supply):c;endsetsdata:a=1.25,8.75,0.5,5.75,3,7.25;b=1.25,0.75,4.75,5,6.5,7.75
6、;d=3,5,4,7,6,11;e=20,20;x,y=5,1,2,7;enddata赋值需求供应连接基本集合派生集合目标:吨公里例3选址问题min=@sum(link(i,j):c(i,j)*((x(j)-a(i))^2+(y(j)-b(i))^2)^(1/2));sets:demand/1..6/:a,b,d;supply/1..2/:x,y,e;link(demand,supply):c;endsets约束:非负@for(demand(i):@sum(supply(j):c(i,j))=d(i););@for(su
7、pply(j):@sum(demand(i):c(i,j))<=e(j););约束:需求供应OK目标与约束段MODEL:TitleLocationProblem;sets:demand/1..6/:a,b,d;supply/1..2/:x,y,e;link(demand,supply):c;endsetsdata:a=1.25,8.75,0.5,5.75,3,7.25;b=1.25,0.75,4.75,5,6.5,7.75;d=3,5,4,7,6,11;e=20,20;x,y=5,1,2,7;enddatainit:
8、endinitmin=@sum(link(i,j):c(i,j)*((x(j)-a(i))^2+(y(j)-b(i))^2)^(1/2));@for(demand(i):@sum(supply(j):c(i,j))=d(i););@for(supply(j):@sum(demand(i):c(i,j))<=e(j);