这个lingo程序我想实现从这个矩阵中每行只取一个,且每列至少取一个。目标函数是求取出的20个数之和最小。
model:sets:r/1..20/;c/1..13/;link(r,c):D,k;endsetsdata:D=22231 20458 18348 21093 17634 17664 14911 14099 13008 7585 3790 0 5976 11948 17027 14540 21887 24241 22541 2693916028 14129 12766 15008 12969 12999 10900 9434 8274 12775 8337 11949 5973 0 13297 6742 14902 18513 16959 212119286 7387 6024 8266 6227 6257 4158 2692 1532 6955 11393 14541 12715 6742 6555 0 8160 11771 10217 1446919293 17394 16031 18273 16234 16264 14165 12699 11539 9510 5072 8684 2708 3265 16562 10007 18167 21778 20224 2447621095 19196 17833 20075 17756 17786 15033 14221 13130 7707 3269 6881 905 5067 17149 11809 19969 23580 22026 2627822500 20601 19238 21480 19161 19191 16438 15626 14535 9112 4674 6476 500 6472 18554 13214 21374 24985 23431 2768322889 21116 19006 21751 18292 18322 15569 14757 13666 8243 3805 3591 2385 8357 17685 15099 22545 24899 23199 2759718998 17225 15115 15169 11306 11336 8570 10236 9775 14194 18632 21780 22806 18049 4752 11307 18654 21008 19308 2196819013 18174 16064 14477 10614 10644 8015 10501 10724 15143 19581 22729 23755 18915 5701 12173 19520 20861 19161 2127611581 10940 8830 7045 3182 3212 583 3069 3490 7909 12347 15495 16521 11483 4401 4741 12088 13429 11729 138445880 3981 6091 4860 9420 9450 7351 5885 4725 10148 14586 17734 16120 10147 9748 3405 4754 8365 7638 1106310874 10304 8194 6338 2475 2505 1290 3098 4197 8616 13054 16202 17228 12190 5108 5448 12795 12722 11022 131374886 6034 4394 350 5253 5336 7989 8674 9335 14758 19196 22344 21330 15357 11807 8615 7810 6734 5034 6449;enddatamin=@sum(r(i):@sum(c(j):k(i,j)*D(i,j)));@for(link:@bin(k));@for(r(i):@sum(c(j):k(i,j))>=1);@for(c(j):@sum(r(i):k(i,j))=1);end