流行算法類軟件盤點(一):混合整數線性規劃(MILP)解算器lpsolve

lpsolve

軟件名稱:lpsolvehtml

解決問題:純線性問題,混合的整型和二進制問題,半連續性與特殊命令集(SOS) 模型編程

應用平臺:由ANSI C編寫,可應用於Linux和WINDOWS等不一樣平臺。網絡

使用案例:

解決下圖所示的最大流問題(這幅圖已經標註出求解結果了):編程語言

lpsolve

lpsolve IDE環境中只需輸入以下的文本,是否是很是簡單直觀:工具

lpsolve

而後按一個運行按鈕(紅框標註),出現如下的求解結果,紅框標註的是結果,藍框標註的是求解信息,包括耗費時間等等:ui

lpsolve

關於lpsolve IDE環境的詳細使用說明能夠參考其使用手冊(lpsolve下載主頁上可自由下載),看到這裏也許有人會問,上面的例子很簡單,若是對於複雜的網絡拓撲,本身手動輸入這些表達式顯然是不現實的, 那該怎麼辦,好在lpsolve能夠集成在別的開發環境中,它提供了一整套API,可供調用,具體也請參考使用手冊,上面提到的博客裏對於matlab調用lpsolve有簡單的說明,這裏補充說一下,mxlpsolve('write_lp',lp,'a.lp')這個語句能夠生成IDE環境裏可直接執行的腳本文件(C,JAVA等接口也有相似語句),這樣複雜的問題能夠用高級編程語言建模,而後生成LP腳本文件單獨在IDE中運行,是否是很方便。spa

以上這個Max Flow的例子直接用matlab自帶的linprog工具箱求解,寫出代碼是:.net

1unix

2code

3

4

5

6

7

8

9

10

11

12

13

f = [ -1 -1 -1 0 0 0 0 0 0 0 0 0 ]; 

A = []; 

b = []; 

Aeq = [1 0 0 -1 -1 0 0 0 0 0 0 0 

       0 1 0 0 0 -1 -1 -1 0 0 0 0 

       0 0 1 0 0 0 0 0 -1 0 0 0 

       0 0 0 1 0 1 0 0 0 -1 0 0 

       0 0 0 0 1 0 1 0 1 0 -1 0 

       0 0 0 0 0 0 0 1 0 0 0 -1 ]; 

beq = zeros(6,1); 

lb = zeros(12,1); 

ub = [3;2;2;5;1;1;3;1;1;4;2;4]; 

x = linprog(f,A,b,Aeq,beq,lb,ub);

求解結果以下,能夠看到雖然最大流的值是正確的,但其它邊上的流卻與lpsolve求解結果有很大差異:

lpsolve

詳細使用請參閱peonyding的ChinaUnix博客>>

相關文章
相關標籤/搜索