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
后续会发布复杂的约束问题的