[問題] 關於非線性問題的最佳化

看板MATLAB作者 (林小緯)時間9年前 (2016/01/11 11:08), 9年前編輯推噓4(402)
留言6則, 4人參與, 最新討論串1/1
如題 如果有一個非線性問題 變量為x 有八個 而且有邊界的設定: x(1)+x(5)<=1800 x(2)+x(6)<=1200 x(3)+x(7)<=500 x(4)+x(8)<=1100 目標函數是 F = C1*[x(1)+x(4)]+C2*[x(2)+x(6)]+C3*[x(3)+x(7)]+C4*[x(4)+x(8)] C1~C4都是常數 先前只有單變數的上下限限制 所以小弟使用lsqnonlin 求解效果還不錯 不過如果想要改成雙變數的上限下的話 lsqnonlin似乎做不到? 嘗試使用fmincon求解 結果跑出錯誤 如下 Error using fmincon (line 708) User supplied objective function must return a scalar value. 翻了一下說明書 fmincon好像只能用在General smooth的問題? 問題很長 希望各位大大解惑 謝謝m(_ _)m -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 36.239.222.100 ※ 文章網址: https://www.ptt.cc/bbs/MATLAB/M.1452481686.A.66D.html

01/11 13:28, , 1F
怎麼看起來好像應該是線性規劃的問題?
01/11 13:28, 1F

01/11 14:25, , 2F
線性規劃請用 linprog
01/11 14:25, 2F
會說是非線性問題的原因是因為 雖然F看起來是線性的  但是因為我還有用懲罰函數的關係 所以整個F應該寫為 F = C1*[x(1)+x(4)]+C2*[x(2)+x(6)]+C3*[x(3)+x(7)]+C4*[x(4)+x(8)] + 懲罰值 不過剛剛去一些論壇看了一下 lsqnonlin似乎沒辦法像是fmincon這樣 讓兩個變數的和在一個限制下求解 ※ 編輯: w12389034e (140.116.77.71), 01/11/2016 15:16:15

01/11 19:15, , 3F
What is the penalty fun?
01/11 19:15, 3F

01/11 19:36, , 4F
你怎麼證明這就是最佳的?你有比較嗎?
01/11 19:36, 4F

01/12 10:19, , 5F
所以penalty是非線性的嗎?
01/12 10:19, 5F
會使用懲罰函數法是因為我想要優選的問題含有一些限制條件 然而疊代的過程中有可能會違反限制 因此給予違反限制的情形懲罰 方法是將違反限制大小的平方與目標函數結合 違反越多 則懲罰量會平方增加 因此優選法會朝盡量不違反限制的方向優選 這個是比較簡單的懲罰函數法(外點法) 也因為懲罰函數的存在所以不會是線性的(因為次方不為一次) 另外yugi大大題的最佳是指問題的全域最佳解嗎@@? 如果是的話 lsqnonlin提供的演算法有兩種:TRR法和LM法 這兩種方法都不能保證找到全域最佳解 我嘗試用不同的起始值計算得到的答案也不相同 如果嘗試次數夠多 理論上應該可以找到近似最佳解 但是要證明是否是全域最佳好像有點困難QQ ※ 編輯: w12389034e (36.239.204.154), 01/12/2016 11:53:15

01/12 15:14, , 6F
你還是沒講你的penalty是什麼形式 問題應該出在那邊
01/12 15:14, 6F
文章代碼(AID): #1ManoMPj (MATLAB)
文章代碼(AID): #1ManoMPj (MATLAB)