matlab线性规划系列之基础解题




系列文章目录

基础篇:

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




前言

这里将展示一些用我之前发过的关于问题求解函数optimproblem的一些解题方法思路,以及对应的代码,在这里声明一下,本篇文章所用的题目来自于哒哒子前辈的如下文章:数学建模【规划模型--线性规划(整数规划、0-1规划)、非线性规划-附:案例分析、奶制品的生产和销售(详细求解过程)】_厚德载物-CSDN博客



欢迎来到-苦幽幽,线性规划解千愁系列。


一、线性规划是什么?

  线性规划的内容其实分为很多我自己用思维导图零零散散的整理了一些(还没整理完,之后会慢慢补充),思维导图如下所示(在之后的文章会随着作者不断地学习纠错来更新),如果有误,欢迎读者指正 




二、上手实际问题

类型一:0-1模型的选课制度:

 

  线性规划问题就是抓住三个点即目标函数、约束条件以及决策变量。

2.1 分类问题

文字分析:

  关于这道题,首先是先将问题分类,毫无疑问,我们的选课要么选要么不选,所以不选是0,选就是1,是标准的0-1规划问题;

代码分析:

  0-1规划,也就是说,我们用optimproblem函数中的设置变量x需要设置范围,下限为0 ,上限是1,并且由于只有0、1两个值,所以我们还需要给它调整一下类型,也就是整型integer,同时因为有九门课,所以x是一个9行1列的列向量即x1、x2...x9,到这里,未知数的设定都了解了。代码如下所示。

x = optimvar('x',9,'Type','integer','LowerBound',0,'UpperBound',1);

2.2 找对应三点

文字分析:

那么接下来就找那三个点:

第一:决策变量,其实就是各个选修课程,九个不同的未知数代表气课程是否选;

第二:约束条件,约束条件是题目所给的最少两门数学课,三门统计学以及两门计算机课,在此条件下还需满足如:如果选择最优化方法的话,就需要先选择微积分和线性代数等前提条件;

第三:目标函数,目标函数就是要选修课程尽可能少。

代码分析:

1. 关于决策变量在上一个部分说过了,这里不再继续重复

2. 关于约束条件,约束条件不想看文字可看图,在下方!

  前面的最少两门数学课,三门统计学什么的很简单,就是把其中蕴含数学课的课程变量加起来不多于二,统计学的不多于三即可;后面的先选什么才能选什么,可能会要想一下,其实转换一下,就是还是以最优化方法x3为例的话,就是首先要选择微积分x1和线性代数x2,也就是说要x1>0和x2>0作为前提才行,但是你想,x的取值范围全是0-1,所以当x1和x2都选中的时候,它们的取值都为1,加起来就是2,那也就是说需要x1+x2=2的时候我才能选择是否选择x3,那如果用2*x3 - x1 -x2<=0,这样就刚好能满足了,因为刚好,我x3选择了的话就是取值为1,如果x1与x2都没有选择到的话,就都是0,那x3肯定也是0才能满足那个条件,而当x1和x2都选择的话,刚好是2,而如果选择了x3的话,前面则是2,相减也满足条件,所以是刚好的,其他的情况读者可以自行思考一下,也是大概的思路。所对应的约束条件图、思路图以及代码如下所示:

约束条件图
约束条件图片​​​

思路图

con1 = 2*x(3) - x(1) - x(2) <= 0;
con2 = x(4) - x(7) <= 0;
con3 = 2*x(5) - x(1) - x(2)<=0;
con4 = x(6) - x(7) <= 0;
con5 = x(8) - x(5) <= 0;
con6 = 2*x(9) - x(1) - x(2)<=0;
con7 = sum(x(1:5))>=2;
con8 = x(3)+x(5)+x(6)+x(8)+x(9)>=3;
con9 =  x(4)+x(6)+x(7)+x(9)>=2;
cons = [con1;con2;con3;con4;con5;con6];
cons2 = [con7;con8;con9];
pro.Constraints.con1=cons;
pro.Constraints.con2=cons2;

2.3 代码示例

clc
clear
tic
pro = optimproblem('ObjectiveSense','min');

x = optimvar('x',9,'Type','integer','LowerBound',0,'UpperBound',1);

pro.Objective = sum(x);
con1 = 2*x(3) - x(1) - x(2) <= 0;
con2 = x(4) - x(7) <= 0;
con3 = 2*x(5) - x(1) - x(2)<=0;
con4 = x(6) - x(7) <= 0;
con5 = x(8) - x(5) <= 0;
con6 = 2*x(9) - x(1) - x(2)<=0;
con7 = sum(x(1:5))>=2;
con8 = x(3)+x(5)+x(6)+x(8)+x(9)>=3;
con9 =  x(4)+x(6)+x(7)+x(9)>=2;
cons = [con1;con2;con3;con4;con5;con6];
cons2 = [con7;con8;con9];
pro.Constraints.con1=cons;
pro.Constraints.con2=cons2;
[sol fval_LL] = solve(pro); 
sol.x 
fval_LL
toc

最终所需要选择的课程为6门,分别为x1 = x2 = x3 = x5 = x6 = x7 =1。

`optimproblem` 是 MATLAB 的优化工具箱中的一个函数,用于创建优化问题的对象。可以使用该函数来定义优化问题的变量、目标函数、约束条件等。 下面是 `optimproblem` 函数的基本用法: ```matlab problem = optimproblem ``` 该代码会创建一个空的优化问题对象。 要向问题对象中添加变量,可以使用 `addVariable` 方法。例如,要添加一个名为 `x` 的变量,它是一个实数,范围在 0 和 10 之间,可以这样写: ```matlab x = optimvar('x', 'LowerBound', 0, 'UpperBound', 10); problem = optimproblem; problem.Objective = x^2; problem.Constraints.cons1 = x <= 5; problem.Constraints.cons2 = x >= 2; ``` 这里,我们使用 `optimvar` 函数定义了一个名为 `x` 的变量,并指定了其上下界。然后,我们将 `x^2` 设置为目标函数,并添加了两个约束条件 `x <= 5` 和 `x >= 2`。 定义好问题对象后,可以使用 `solve` 方法来求解优化问题。例如,要求解上面定义的问题,可以这样写: ```matlab [sol, fval] = solve(problem); ``` `solve` 方法返回一个解决方案对象 `sol` 和目标函数的最小值 `fval`。可以使用 `fetchOutputs` 方法获取变量的值。例如,要获取 `x` 的值,可以这样写: ```matlab x_val = fetchOutputs(sol, x); ``` 这里,`fetchOutputs` 方法会返回一个大小为 1x1 的结构体数组,其中包含变量 `x` 的值。 除了上述基本用法,`optimproblem` 函数还支持许多其他选项和方法,如添加整数变量、二进制变量、非线性约束、自定义目标函数等。可以参考 MATLAB 文档以获取详细信息。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

羡鱼数与模

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值