用MATLAB算法解决如下优化问题:
min: 1./(10-2.^x)-3./(50-2.^y)-x-y;
s.t. 1./(10-2.^x)-3./(50-2.^y)<=0.3;
x,y>=0;
matlab算法解非凸优化问题
- 写回答
- 好问题 0 提建议
- 关注问题
- 邀请回答
-
1条回答 默认 最新
斗迷飞鸟 2022-09-08 17:45关注(1)原问题的matlab解决代码
%将代码写成没有返回值的函数形式,方便在同一个文件中调用非线性约束函数 function solve_nonconvex_optimization_problem clear;clc; %使用匿名函数定义目标函数 obj_fun=@(x_vec)1./(10-2.^x_vec(1))-3./(50-2.^x_vec(2))-x_vec(1)-x_vec(2); %调用fmincon求解非线性约束优化问题 x0=1;y0=1; options = optimoptions('fmincon','Algorithm','interior-point'); result=fmincon(obj_fun,[x0,y0],[],[],[],[],[0,0],[inf,inf],@my_con,options) end %定义fmincon需要的非线性约束函数,c表示非线性不等式约束(c<=0),c_eq表示非线性等式约束(c_eq=0) function [c,c_eq]=my_con(x_vec) c=1./(10-2.^x_vec(1))-3./(50-2.^x_vec(2))-0.3; c_eq=[]; end(2)原问题的运行结果

(3)原问题可能存在的问题分析
从程序运行结果来看,题主描述中的问题对matlab来说是病态的,得到的解虽然满足约束且目标函数值很小,但是不怎么合理,我在想题主有没有可能在问题描述中误写了"3./(50-2.^y)"的符号,如果原问题中"3./(50-2.^y)"前的符号变成正号,也即
min: 1./(10-2.^x)+3./(50-2.^y)-x-y;
s.t. 1./(10-2.^x)+3./(50-2.^y)<=0.3;
x,y>=0;
则修改后的问题参考(1)中的代码可以得到很理想的结果
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录