matlab非线性规划fmincon函数中目标函数参数传递问题,怎么解?

fmincon函数的标准形式维[x,fval]=fmincon('fun',Bt0,[],[],[],[],lb,ub,@constr),然后fun是目标函数,Bt0为初... fmincon函数的标准形式维[x,fval]=fmincon('fun',Bt0,[],[],[],[],lb,ub,@constr),然后fun是目标函数,Bt0为初值点,优化函数相当于讲Bt0带入fun,逐渐逼近求局部最优解。现在小弟遇到的情况是这样的,需要将fun中(fun是一个比较复杂的式子,需要用到循环,不能直接写出来,只能是写成M文件形式)的一个原来固定的参数设成是变量,并以这个变量为横坐标,以变量所对应的局部最优解为纵坐标画图,求问,怎样将变量(写在外层循环)实现传递?跪谢! 展开
 我来答
小婷陪你看世界
高粉答主

2018-04-01 · 关注小婷,让小婷陪你一起看美丽世界
小婷陪你看世界
采纳数:28409 获赞数:381130

向TA提问 私信TA
展开全部

使用匿名函数句柄就可以了 fmincon 需要的函数fun只有一个输入参数 fun(x) 而你的函数需要多一个能改变的变量。

1、在到达迭代次数阈值或目标函数估值次数阈值时,求解器没有最小化目标到要求的精度,此时求解器停止。接下来,可以尝试以下方法:

(1)设置‘Display’为‘iter’,查看每步的迭代信息,这些信息包括:目标函数(Fval or f(x) or Resnorm)是否是下降的;检查约束越界(Max constraint)是否是递减趋向于0;查看一阶优化是否是递减趋向于0;查看置信域半径(Trust-region radius)是否下降趋向于一个小的值。若其中至少一种情况为是,就表示结果是不断改善的。如果结果是不断改善的,可以采取下边的措施:设置MaxIter、MaxFunEvals比默认值大的值,默认值可以在优化工具箱或求解器的函数参考页的优化表中查看;从最后计算出的点开始重新求解。如果结果没有改善,尝试以下其他的方法。

(2)放松精度

如果TolX或TolFun太小,当求解器达到一个最小值时可能也不会识别到,这就会导致无限次徒劳的迭代。DiffMaxChange和DiffMinChange选项能影响求解器的改善,它们控制求导估计中有限差分的步长。

2、无可行点

在TolCon约束精度内,求解器不能找到一个满足所有约束条件的点,此时,可以尝试以下方法:

(1)检查线性约束

通过求解一个线性规划问题来找到一个满足界约束和线性约束的点。

i)定义一个目标函数是常值0的线性规划问题、

f = zeros(size(x0));   % assumes x0 is the initial point

ii)求解这个线性规划问题看是否有一个可行点。

xnew = linprog(f,A,b,Aeq,beq,lb,ub);

iii)如果有可行点xnew,用xnew作为初始点去求解原始问题。

iv)如果没有可行点,那说明原始模型建的不好,检查界约束和线性约束。

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式