我试图最小化具有非线性约束的目标函数。我的问题是方便地为参数找到合适的初始值集。但是,因为初始值也必须满足非线性约束,所以在我的目标函数中,我有超过 1000 个数据点,从而产生 1000 个函数值。结果,我选择的初始值通常不能使我的目标函数在每个数据点都获得有意义的值,即我的目标函数在某个数据点获得 NaN,这会停止最小化过程......
我很好奇有什么好方法可以让我自动搜索合适的初始值吗?(因为我有一堆功能要最小化......)任何想法和建议都会有所帮助!
例如,我的目标函数是一个函数句柄,如:
myFUN = @(a,b,theta,u1,u2)function_handle.
这里的u1和u2需要放入data中。
我所做的是这样的:
[para,fval,exitflag1] = fmincon(@(para)myFUN(para(1),para(2),para(3),u1,u2),para_initial,[],[],[],[],lb,ub,@ucon,options1);
我的问题是我的初始值有时会在 myFUN 的 u1/u2 的某些点上得到 NaN。
现在我要做的是使用其他一些约束来获得有意义的初始值。例如,我有一个这样的积分函数:
conFUN1 = integral(integral(conFUN2,u1,0...1),u2, 0...1) = constant.
我想用这个约束来猜测一些初始值。但是,我不知道如何以未知参数 a、b 和 theta 数值获取积分值。
我用积分做的是这样的:
inner = @(a,b,th,u2)quadgk(@(u1)conFUN2(a,b,th,u1,u2),0.0001,0.9999)
DBintegral = @(a,b,th)quadgk(@(u2)arrayfun(inner(a,b,th,u2)), 0.0001,0.9999)
我想获得价值
DBintegral(1,1,3),
类似的东西...
我不确定我是否清楚地解释了我的问题......