Lingo 實現--二分圖最大權值匹配

花了一天的時間瞭解了一下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。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章