數學模型演算法實現之Lingo求解二

2021-09-27 03:07:27 字數 1971 閱讀 6184

這種最短路徑問題也可以用圖論

model:

sets:

cities/s,a1,a2,a3,b1,b2,c1,c2,t/:l; !定義城市集合,l(i)為對應的屬性(s到城市i最短路徑)

roads(cities,cities)/

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;

!roads表示城市間道路集合,由cities匯出的乙個派生集合(請特別注意其用法),由於只有一部分城市 之間有道路相連,所以不應該把它定義成稠密集合,將其元素通過列舉給出,這就是乙個稀疏集合。d(i,j)為兩城市間直接距離

endsets

data:

d= 6 3 3

6 5 8 6 7 4

6 7 8 9

5 6;

l=0,,,,,,,,;

enddata

@for(cities(i)|i#gt#@index(s):l(i)=@min(roads(j,i):l(j)+d(j,i)););

end

來做,只要寫出帶權鄰接矩陣就ok

圖中min寫錯了應該是max;

這很明顯是0-1線性規劃問題,通過總效率目標函式+約束條件進行求解。

model:

sets:

students/s1..s8/;

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

endsets

!在派生集合pairs定義中增加了過濾條件 「&2#gt#&1」,意思是第2個父集合的元素的索引值(用「&2」表示)大於第1個父集合的元素的索引值(用「&1」表示)。pairs中的元素對應於上表中的嚴格上三角部分的二維下標(共28個元素)。benefit和match是pairs的屬性。

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 34;

enddata

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

@for(students(i):[constraints]

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

! 注意資料段對benefit的賦值方式,「lingo按照列的順序對屬性變數的元素進行賦值。在約束部分,過濾條件「j #eq# i #or# k #eq# i」是由邏輯運算子「#or#(或者)」連線的乙個復合的邏輯關係式,連線由「#eq#(等於)」表示的兩個邏輯關係。由於「#or#」的運算級別低於「#eq#」,所以這個邏輯式中沒有必要使用括號指定運算次序。

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

end

數學模型演算法實現之Lingo求解一

lingo基本用法說明 模型以model開始,end結束 集合相當於下標,quarters lingo中模型優化由四部分組成 1.集合段 定義集合變數及元素和屬性 sets endsets 2.目標與約束段 目標函式 約束條件 需要用到lingo內部函式如 sum和 for 3.資料段 對集合屬性輸...

數學模型演算法實現之Dijkstra演算法

dijkstra演算法能求乙個頂點到另一頂點最短路徑。它是由dijkstra於1959年提出的。實際它能求出初始點到其它所有頂點的最短路徑。dijkstra演算法是一種標號法 給賦權圖的每乙個頂點記乙個數,稱為頂點的標號 臨時標號,稱t標 號,或者固定標號,稱為p標號 t標號表示從始頂點到該標點的最...

數學模型演算法實現之種群競爭模型

fun.m function dx fun t,x,r1,r2,n1,n2,s1,s2 r1 1 r2 1 n1 100 n2 100 s1 0.5 s2 2 dx r1 x 1 1 x 1 n1 s1 x 2 n2 r2 x 2 1 s2 x 1 n1 x 2 n2 p3.m h 0.1 所取時間...