[討論] fmincon求最佳解問題

作者: asiabanana (bananabrother)   2018-10-30 21:27:26
我的主程式可以求得我空間節點分布關係的矩陣
接著求出這個矩陣的次小特徵值
然後這個主程式的變量為一個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.
麻煩懂這個工具的高手拯救一下了!
作者: sunev (Veritas)   2018-10-30 22:40:00
沒有constaint 幹嘛不用fminunc ?x0給太爛,導致x0變一點點目標無變化,做不下去
作者: asiabanana (bananabrother)   2018-10-31 00:36:00
其實是有限制式的 想先試試看沒有限制是跑不跑得出來我明天會試試看另一個函式!
作者: profyang (prof)   2018-10-31 17:41:00
你的X的每個分量值差很多嗎?之前試過把它normalize到一個比較接近的範圍就解決了 給你參考而已 我也不確定
作者: asiabanana (bananabrother)   2018-10-31 23:02:00
我現在的問題是他每步迭代的值太小 所以跳不出變化除非我的初值設得十分接近 不然完全跑不動現在再想有沒有方法可以調整他的stepsize
作者: sunev (Veritas)   2018-11-01 14:04:00
你有自己算過stepsize要多大才合理嗎?我懷疑你的函數根本是類似step function
作者: asiabanana (bananabrother)   2018-11-01 15:02:00
我自己大概算過 我的stepsize大約是0.5~1但是command window裡每次迭代都是0.0001 變化太小如果可以讓我迭代次數達我自己設置的值應該就解決了
作者: sunev (Veritas)   2018-11-02 08:49:00
如果你確定你的問題不是離散形的話,改x的scale大概是一個辦法,不然就是生出一個gradient
作者: profyang (prof)   2018-11-02 22:18:00
我上面的意思就是改x的scale 例如把x全部除以一個合理的數 在稍微變動一下你的函數 出來結果一樣就好要不然就像上面說的自己寫gradient 用數值的grad也可以但一樣就是你去近似微分的dx的scale要合理
作者: sherees (ShaunTheSheep)   2018-11-19 11:33:00
有點久的文了 不知道原PO有沒有被回答到推測可能是起始落在 saddle point 求不出導數所以卡住可以先試試normalization(這部分你可能需要研究一下自定義函數在各個維度的scaling)另外就是起始值給noise

Links booklink

Contact Us: admin [ a t ] ucptt.com