在使用Fmincon求解最优化问题时,经常由于初始点设置,或者是非线性约束构建问题,出现“Nonlinear constraint function is undefined at initial point. Fmincon cannot continue.”错误
在这个时候,可以通过检查nonlinear约束函数的输出数据来判断在什么位置出现问题;
例如:
costFun = @(FB)feasible_fun(FB,shapes);
nonlCon = @(FB)feasible_nonlcon(FB,shapes,aerfa,omega);
[A,B,Aeq,Beq] = feasible_lcon(FB,shapes,aerfa,omega);
[lbd,ubd] = feasible_bound(FB,shapes);
以上这四个式子分别构建了fmincon中所需要的目标函数,非线性约束,线性约束以及上下界约束
当报错时,我们可以用:
nonlCon = feasible_nonlcon(FB,shapes,aerfa,omega)
来查看非线性约束的输出结果(公式末尾不加分号就会直接在命令窗口输出该函数的返回结果),例如我报错后的输出结果就是:
可以看到我的输出结果中存在inf和NaN,NaN在非线性中是非法的存在,由此我们可以找到非线性
约束的函数中查看是哪个约束出现的问题;
C6 = 1/f(i,j)-1/yita1-Be(6);
我这里很显然是初始值赋值有问题,f的初始值应该大于零。
修改完后,代码跑通。当然,可能不仅仅因为这个问题导致出错,以上是一种matlab的debug方法,大家可以借鉴。