Re: [問題] 非線性規劃 主副程式變數使用問題已回收
※ 引述《sindyddd ()》之銘言:
: 整個問題阿....
: 目標函數 為線性, 限制式為線性(4條)與非線性混合(2條)
: max 0.5*bet_B + 0.5* bet_d
: bet_B,bet_d ,u, z_B ,z_F ^^^^^^^^^^^^^^^^^^^^^^^
[K*1]
你要使用 fmincon 做最佳化計算時, 他會搜尋目標函數(objfun)的最小值
因此你需要修改一下你在 fmincon 中所使用的目標函數(objfun)輸出的結果
確認當一組未知變數 [x], 能得到目標函數(objfun)的最小值
同時也能得到你原本問題中目標函數的最大值
: subject to X_B * z_B + X_B(:,i) * bet_B 小於等於 X_B(:,i)
^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^ ^^^^^^^^^
[v*K] + [v*1]*[K*1] ?!? <= [v*1] ?!?!?
: Y_I * z_F 小於等於 Y_I(:,i)
^^^^^^^^^ ^^^^^^^^
[r*K] <= [r*1] ?!?!??!
: 由限制式可以看到 X_B 和 Y_I和 u 都有部分的值特別拿出來做處理
: 因此當初用迴圈的概念 每一次做完 都有一個結果跑出來
: 從整個結果來看的話
: 未知數: bet_B,bet_d 都是 K*1 的矩陣 ; u是c*K ; z_B ,z_F 是 K*K
: 已知數: X_B 是 v*K ; X_BF 是 c*K ; Y_I 是 r*K
: 每個矩陣大小都不一樣....
: 在執行檔的部分 先寫上限制式為線性的程式 最後再寫上這個:
: [result(i,:),fval(i)]=fmincon(@DMNDEA,x0,A,B,Aeq,Beq,lb,ub,@DMN_confun);
: 目標函數 和非線性限制式 就另外寫
: 可是後來w大說 fmincon只能用於單變數
: 那請問是要 令成這樣嗎? x=[ bet_B,bet_d ,u, z_B ,z_F ];
: x好像可以是x(1) x(2).... 請問他可以用成矩陣表示嗎?
from help : fmincon attempts to find a constrained minimum of a scalar
function
several variables starting at an initial estimate. This is generally referred
to as constrained nonlinear optimization or nonlinear programming.
應該是說 y = objfun(xi) i = 1 ~ n
y 需為一個純數, xi 變數可以有很多個
當你要將 xi 輸入你的 objective function 計算時
依你的問題以單一變數, 一個向量, 或是一個矩陣的方式整理所有未知數的元素
的初始猜值, 之後輸入 fmincon
計算結果應該也會依照你輸入 [xi] 的形式輸出
在目標函數(objfun)內計算時, 將輸入的 [xi] 重新組成
bet_B, bet_d, z_B, z_F 矩陣, 以及 u 向量
經過計算之後得到一個目標函數純數 (y)
回傳給 fmincon
: 接下來可能要把那些變數拼湊在一起 成一個x矩陣了 這樣對嗎?
: 所以上面這個動作 是在執行檔做嗎 目標函數和非線性限制式就都用x表示?
看完你的文章, 感覺你要進行很多個最佳化計算
請先確認一下你每一個最佳化計算中
目標函數計算的正確性
當你使用 fmincon 進行一次最佳化計算時
限制式的條件在你呼叫 fmincon 時就要給定了
當他在計算的時候, 你要更改限制條件的話
可能需要修改到 fmincon 的程式碼
: 那關於線性限制式的迴圈 如果先在迴圈前那些變數弄成x後
: 迴圈內皆用x表示 會不會有影響?
: 還是厲害的大家有甚麼建議? (感覺整個要重寫>"< 天阿...)
(X)通常加入不等式限制條件會增加計算上的時間,
修改為 : 加入不等式限制條件會減少計算上的時間,
看了你的問題之後我有三個想法
如果你的目標函數的計算結果是正確的 !!
想法1. 先不考慮拘束條件, 使用 fmincon 並改變多個 [xi] 的初始猜值,
以及求解的邊界範圍, 求得數個區域性最佳解,
之後利用拘束條件挑選結果
想法2. 更改 fmincon 在使用 SQP 方法求解最佳化問題時, 在每個 QP 子計算工作中
使用更節省計算資源的演算方法, 如
ex : options = optimset('Algorithm', 'interior-point');
其中 Algorithm 可選擇的有
'active-set' | 'interior-point' | {'trust-region-reflective'}
^^^^^^^^^^^^^^^^^^^^^^^^^
預設
當你使用 fmincon 時, 請輸入設定好的 options, 如
x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options);
其他 options 的設定, 你可以查詢 help-> optimset (Optimization Toolbox)
想法3. 更改計算 Hessian Matrix (目標函數對各個未知變數的2次偏微分矩陣) 的方法
或自行給定計算 Heissan Matrix 的方法
這個在你未知變數數目很多, 且計算一次目標函數的時間很久的時候
才有需要做這樣的設定..
沒做更改的話 fmincon 會使用數值方法, 預估計算 Hessian Matrix
help-> optimset (Optimization Toolbox) 有關 Hessian
: 謝謝大家了!!!
加油~~
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.123.123.158
推
08/17 12:05, , 1F
08/17 12:05, 1F
→
08/17 13:08, , 2F
08/17 13:08, 2F
→
08/17 13:09, , 3F
08/17 13:09, 3F
→
08/17 15:07, , 4F
08/17 15:07, 4F
→
08/17 15:09, , 5F
08/17 15:09, 5F
推
08/17 15:23, , 6F
08/17 15:23, 6F
※ 編輯: hilosi 來自: 140.123.123.158 (09/07 20:29)
討論串 (同標題文章)
完整討論串 (本文為第 3 之 5 篇):