防脱发60 2022-09-06 22:13 采纳率: 50%
浏览 48
已结题

matlab算法解非凸优化问题

用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;

  • 写回答

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)原问题的运行结果

    img


    (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)中的代码可以得到很理想的结果

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录

报告相同问题?

问题事件

  • 系统已结题 9月16日
  • 已采纳回答 9月8日
  • 创建了问题 9月6日

悬赏问题

  • ¥15 winform的chart曲线生成时有凸起
  • ¥15 msix packaging tool打包问题
  • ¥15 finalshell节点的搭建代码和那个端口代码教程
  • ¥15 用hfss做微带贴片阵列天线的时候分析设置有问题
  • ¥15 Centos / PETSc / PETGEM
  • ¥15 centos7.9 IPv6端口telnet和端口监控问题
  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 海浪数据 南海地区海况数据,波浪数据
  • ¥20 软件测试决策法疑问求解答