資源描述:
《lingo軟件求解優(yōu)化問題(2)作業(yè)》由會員上傳分享,免費在線閱讀,更多相關內容在教育資源-天天文庫。
1、Lingo計算機學院張亞玲數學規(guī)劃軟件某公司有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、線性規(guī)劃模型?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);