matlab线性规划问题---------基于问题求解函数optimproblem

首先先声明:该函数是在2017年版本后才有的函数,否则将会报错
然后在这里还想给大家安利一个数模学习的公众号:数模孵化园,关注之后,你不会失望的


系列文章目录
基础篇:
1.matlab线性规划问题---------基于问题求解函数optimproblem
2. matlab线性规划系列之基础解题

相比于matlab求解器linprog函数,fmincon等函数,它们更适合用于一些简单约束条件和目标函数条件的方程,如下所举的例题(但是是用optimproblem做的),但是如果当约束条件和目标函数比较复杂,运用求和符号或者连乘符号表示的话,就用optimproblem函数比较简便

这里设置目标函数为f=4x1+3x2
约束条件为
2*x1+x2<=10
x1+x2<=8
x2<=7
x的下界为0,上界为正无穷
具体详解和例子如代码

%基于问题求解
clear
clc
prob=optimproblem('ObjectiveSense','max');
%这里ObjectiveSense是目标类型为求最大值的意思
%有时候直接是prob=optimproblem就是默认求最小值

b=[10;8;7];
A=[2,1
    1,1
    0,1];
x=optimvar('x',1,2,'TYPE','integer','LowerBound',0,'UpperBound',inf);

%optimvar函数是一种类似于赋值的函数
%第一个‘x’里面是变量名,后面说的是该变量所包含的行数和列数
%‘TYPE’,后面定义的是该函数所属类型,比如说integer整数型,double双精度型号等
%‘LowerBound'与'UpperBound'表示下界与上界所跟的0,inf分别是范围
prob.Objective=f*x;
%目标函数需要得到一个标量数值,不是矩阵向量!,所以注意自己不能用.*
%这里是设置目标函数
prob.Constraints.con=A*x<=b;
%注意这里不是.*!那个得到的是一个矩阵,这个是线性代数里的矩阵相乘,得到数值,注意维度

[sol fval flag]=solve(prob);
fval
sol.x

后续会发布复杂的约束问题的

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐