[讨论] 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