[討論] fmincon求最佳解問題

看板MATLAB作者 (bananabrother)時間6年前 (2018/10/30 21:27), 編輯推噓7(7018)
留言25則, 4人參與, 6年前最新討論串1/1
我的主程式可以求得我空間節點分布關係的矩陣 接著求出這個矩陣的次小特徵值 然後這個主程式的變量為一個X的座標向量 現在想要用fmincon的工具求出我X的擺放位置 來使我的次小特徵值可以達到最大 我的主程式如下 clc clear all A=[]; b=[]; x0=[0;0;0] X = fmincon(@myfun,x0,A,b) 然後這是myfun的內容 f=myfun(X) . . . . 輸入X會得出一個L矩陣 [V,Eig]=eig(L); f=-Eig(2,2); %這個為我想要讓他得到最大值的解 因要求最大解所以有加負號 end 雖然可以成功執行 但是找出來的X值都會是我設定的x0 Command Window內沒有看到他去做迭代的過程 直接顯示 Optimization completed because at the initial point, the objective function is non-decreasing in feasible directions to within the default value of the optimality tolerance, and constraints are satisfied to within the default value of the constraint tolerance. 麻煩懂這個工具的高手拯救一下了! -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 140.116.92.20 ※ 文章網址: https://www.ptt.cc/bbs/MATLAB/M.1540906049.A.802.html

10/30 22:40, 6年前 , 1F
沒有constaint 幹嘛不用fminunc ?
10/30 22:40, 1F

10/30 22:45, 6年前 , 2F
x0給太爛,導致x0變一點點目標無變化,做不下去
10/30 22:45, 2F

10/31 00:36, 6年前 , 3F
其實是有限制式的 想先試試看沒有限制是跑不跑得出來
10/31 00:36, 3F

10/31 00:36, 6年前 , 4F
我明天會試試看另一個函式!
10/31 00:36, 4F

10/31 17:41, 6年前 , 5F
你的X的每個分量值差很多嗎?之前試過把它normalize到一
10/31 17:41, 5F

10/31 17:42, 6年前 , 6F
個比較接近的範圍就解決了 給你參考而已 我也不確定
10/31 17:42, 6F

10/31 23:02, 6年前 , 7F
我現在的問題是他每步迭代的值太小 所以跳不出變化
10/31 23:02, 7F

10/31 23:02, 6年前 , 8F
除非我的初值設得十分接近 不然完全跑不動
10/31 23:02, 8F

10/31 23:03, 6年前 , 9F
現在再想有沒有方法可以調整他的stepsize
10/31 23:03, 9F

11/01 14:04, 6年前 , 10F
你有自己算過stepsize要多大才合理嗎?我懷疑你的函數根本
11/01 14:04, 10F

11/01 14:05, 6年前 , 11F
是類似step function
11/01 14:05, 11F

11/01 15:02, 6年前 , 12F
我自己大概算過 我的stepsize大約是0.5~1
11/01 15:02, 12F

11/01 15:03, 6年前 , 13F
但是command window裡每次迭代都是0.0001 變化太小
11/01 15:03, 13F

11/01 15:49, 6年前 , 14F
如果可以讓我迭代次數達我自己設置的值應該就解決了
11/01 15:49, 14F

11/02 08:49, 6年前 , 15F
如果你確定你的問題不是離散形的話,改x的scale大概是一個
11/02 08:49, 15F

11/02 08:50, 6年前 , 16F
辦法,不然就是生出一個gradient
11/02 08:50, 16F

11/02 22:18, 6年前 , 17F
我上面的意思就是改x的scale 例如把x全部除以一個合理的
11/02 22:18, 17F

11/02 22:19, 6年前 , 18F
數 在稍微變動一下你的函數 出來結果一樣就好
11/02 22:19, 18F

11/02 22:19, 6年前 , 19F
要不然就像上面說的自己寫gradient 用數值的grad也可以
11/02 22:19, 19F

11/02 22:20, 6年前 , 20F
但一樣就是你去近似微分的dx的scale要合理
11/02 22:20, 20F

11/19 11:33, 6年前 , 21F
有點久的文了 不知道原PO有沒有被回答到
11/19 11:33, 21F

11/19 11:34, 6年前 , 22F
推測可能是起始落在 saddle point 求不出導數所以卡住
11/19 11:34, 22F

11/19 11:36, 6年前 , 23F
可以先試試normalization(這部分你可能需要研究一下自
11/19 11:36, 23F

11/19 11:36, 6年前 , 24F
定義函數在各個維度的scaling)
11/19 11:36, 24F

11/19 11:37, 6年前 , 25F
另外就是起始值給noise
11/19 11:37, 25F
文章代碼(AID): #1Rs5n1W2 (MATLAB)
文章代碼(AID): #1Rs5n1W2 (MATLAB)