[問題] 關於非線性問題的最佳化
如題
如果有一個非線性問題 變量為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
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
01/11 19:15, 3F
推
01/11 19:36, , 4F
01/11 19:36, 4F
推
01/12 10:19, , 5F
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
01/12 15:14, 6F
MATLAB 近期熱門文章
PTT數位生活區 即時熱門文章