花了一天的时间了解了一下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。