2014年11月4日 星期二

lp_solve in matlab

弄好久, 也不知道這樣做對不對....  囧~~~

(這邊只針對windows做記錄, linux的matlab我之前好像裝不起來 orz.....)

官方說明:
http://lpsolve.sourceforge.net/5.5/MATLAB.htm

其他說明 & 相關心得
http://www.cnblogs.com/kane1990/p/3428129.html
http://www.cnblogs.com/kane1990/RecentComments.html

-------------------------------

先去sourceforge下載相關檔案
http://sourceforge.net/projects/lpsolve/files/lpsolve/5.5.2.0/
 * lp_solve_5.5.2.0_MATLAB_exe_win32
 * lp_solve_5.5.2.0_dev_win32
下載列表也有64位元的, 稍微瞄一下應該都找的到

 * lp_solve_5.5.2.0_dev_win32.zip解壓縮, 進去資料夾, 把 lpsolve55.dll 複製到 C:\WINDOWS\system32
    - 我還在用XP. XD

 * lp_solve_5.5.2.0_MATLAB_exe_win32.zip解壓縮, 裡面還有一個bin/win32的資料夾, 把裡面的mxlpsolve.dllmxlpsolve.mexw32複製到跟mxlpsolve.m同一層資料夾

我的做法是, 在C:\Program Files\MATLAB\$your_version$\toolbox裡面多開一個 lp_solve 資料夾, 然後把這些檔案複製到這裡. 資料夾裡的檔案有:
ex.m
example1.m example4.m lp_maker.m mxlpsolve.dll
example2.m example5.m lp_solve.m mxlpsolve.m
example3.m example6.m lpdemo.m mxlpsolve.mexw32



 * 接著打開matlab, 設定環境變數. File -> Set Path, 然後把剛剛的 C:\Program Files\MATLAB\$your_version$\toolbox\lp_solve 放進去

 * 在matlab終端機直接打 lp_maker 和 lp_solve 都可以看到正常訊息
 * 可是我打 mxlpsolve 一直都跑出警告訊息, 囧~~~~ 後來看了一下mxlpsolve.m的檔案, 裡面都只有display的程式碼, 我也不知道我看到這些警告訊息是不是正常 orz

後來查到別人的心得: http://www.cnblogs.com/kane1990/p/3428129.html

就照他的程式碼跑了一下, 然後發現似乎可以求解!?

f = [4 2 1];
A = [2 1 0; 1 0 2; 1 1 1];
b = [1; 2; 1];
l = [ 0 0 0];
u = [ 1 1 2];
lp=mxlpsolve('make_lp', 1, 3);
mxlpsolve('set_verbose', lp, 3);
mxlpsolve('set_obj_fn', lp, f);
mxlpsolve('add_constraint', lp, A(1, :), 1, b(1));
mxlpsolve('add_constraint', lp, A(2, :), 1, b(2));
mxlpsolve('add_constraint', lp, A(3, :), 0, b(3));
mxlpsolve('set_lowbo', lp, l);
mxlpsolve('set_upbo', lp, u);
mxlpsolve('write_lp', lp, 'a.lp');
mxlpsolve('get_mat', lp, 1, 2)
mxlpsolve('solve', lp)
mxlpsolve('get_objective', lp)
mxlpsolve('get_variables', lp)
mxlpsolve('get_constraints', lp)

就姑且相信這樣的安裝流程是對的吧 XDDDD

------------------------------------------------------------------

補充:
後來在win7(64bit)的電腦上用同樣的步驟去複製檔案, 結果執行  mxlpsolve 完全沒有錯誤訊息 XD......