花了一天的時間瞭解了一下Lingo,寫出了Max-Weighted-Matching的Lingo程序。發現Lingo很簡單,很強大,編程很困難的程序用Lingo很短的程序就可以解決。
Lingo學習課本參考網頁:http://www.docin.com/p-309760699.html?docfrom=rrela
還有一個PPT學習Lingo,這兩個基本一樣:http://www.docin.com/p-95076764.html
Lingo學習例題參考博客:https://blog.csdn.net/breeze_blows/article/details/75332726
把例題學會之後基本就寫出了Max-Weighted-Matching的Lingo程序:
model:
data:
n=5;
enddata
sets:
A/1..n/;!可以沒有元素,僅僅是爲了派生;
B/1..n/;
edges(A,B):weight,match;!派生集合;
endsets
max=@sum(edges(i,j):weight(i,j)*match(i,j));
@for(edges(i,j):@bin(match(i,j)));!規定match(i,j)取值只能爲0,1;
@for(A(i):@sum(B(j):match(i,j))=1;);!每行只能有一個1;
@for(B(i):@sum(A(j):match(j,i))=1;);!每列只能有一個1;
data:
weight=3 4 6 4 9
6 4 5 3 8
7 5 3 4 2
6 3 2 2 5
8 4 5 4 7;
enddata
end
以n=5爲例,輸出結果是29。