发布网友 发布时间:2022-05-23 18:25
共1个回答
热心网友 时间:2023-11-06 02:26
你用的是fmincon函数吧? FMINCON函数虽然是可以解决非线性约束的问题的,但是它要求目标函数和约束函数都必须是连续的,梯度也是连续的,而且该函数是根据你给的初始值来进行梯度步长收敛的,只能收索到局部最优解. 如果你给的初始值是个不可行解就很难收敛到最优解,最终出现的情况就是函数根本就不管你的上下限而给出的一个值. 解决办法:利用while,利用随机搜索的方法,找到一个可行的初始解.当然这样就有一个问题.即使搜索到解,也是局限于随机搜索到的初值的解.因此当你搜索不到好的解时,建议放弃使用这个函数. 利用FGOALATTAIN函数这个函数相对较好,但也存在和FMINCON类似的问题采用遗传算法这里就有必要提一下,利用他人写的工具箱始终不灵活.MATLAB自带的和设菲尔德大学的遗传算法工具箱,有时并不能满足自己的需要,相关问题我已发过帖子.这里就不说了. 试验证明,利用设菲尔德大学的工具箱再自行改进下,可以很好的处理问题. 希望可以解决你的问题.