gpt4 book ai didi

matlab - 如何自动为 fmincon 找到合适的初始值?

转载 作者:太空宇宙 更新时间:2023-11-03 20:06:59 25 4
gpt4 key购买 nike

我正在尝试最小化具有非线性约束的目标函数。我的问题是方便地为参数找到一个合适的初始值集。因为初始值也必须满足非线性约束,然而,在我的目标函数中,我有超过 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), 

类似的东西......

我不确定我是否清楚地解释了我的问题...

最佳答案

我不确定首先使用基于梯度的方法是否适合您的情况。您应该使用一些启发式方法,如蒙特卡洛、模式搜索或进化算法。或者我认为最好的解决方案是将基于梯度的局部方法与蒙特卡洛相结合:

首先,您尝试设计变量的随机值:a、b、theta、u1、u2,然后检查答案是否在您的约束范围内。如果是 您从此起点运行局部梯度法并将结果保存为最小值。比你用设计变量的随机值再试一次,如果答案在约束内,你再试一次。你运行梯度方法并检查新点是好是坏。依此类推,直到某个时间没有更好的局部最小值。

关于matlab - 如何自动为 fmincon 找到合适的初始值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20625043/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com