线性规划(LP)问题的Matlab求解

Matlab求解线性问题LP(Liner programming)标准型

在这里插入图片描述
上述模型为用Matlab求解线性问题的标准型
1、模型由一个极小化的目标函数f,以及需要满足的约束条件构成。约束条件分为等式约束、不等式约束和边界约束。
2、假设决策变量x为n维的,且线性规划问题有m1个不等式约束,m2个等式约束。那么:c、x、lb和ub均为n维列向量,b为m1维列向量,beq为m2维列向量,A为m1×n维矩阵,Aeq为m2×n维矩阵。
ps:(关于c和x,因为矩阵相乘必须是前一个矩阵的列数等于后一个矩阵的行数,而向量都是用列向量来定义的。因而c和x必须是同维的列向量,向量C经过转置后变成n维的行向量,此时便可与n维列向量的x相乘了。)
(lb、ub与x一样也是n维的列向量,向量x大于等于向量xb,小于等于向量ub的意思是,拿向量x中的每个元素与向量lb和ub中的各个元素来做对比的)比如:
图1
输出的结果为逻辑值。
(至于A、Aeq。如果有m1个不等式约束,那么A一定是一个m1行×n列的矩阵,因为矩阵相乘要求前一个矩阵的列等于后一个矩阵的行。比如说共有m1=4个不等式约束分别为ma、mb、mc和md,那么A的行数一定是m1=4,如下图)

 %ma、mb、mc、md为四个不等式约束,x为13列的向量
 ma=[1 2 3]; mb=[2 3 4]; mc=[3 4 5];md=[4 5 6]; x=[2;2;2]; 
 %分别将4个不等式约束与x相乘
 ba=ma*x  %表示1x1+2x2+3x3即第一个约束
 bb=mb*x  %表示2x1+3x2+4x3即第二个约束
 bc=mc*x  %表示3x1+4x2+5x3即第三个约束
 bd=md*x  %表示4x1+5x2+6x3即第四个约束
 %A为这四个约束集合一起组成的矩阵
 A=[ma;mb;mc;md]
 AX=m1*x

运行结果如下:
在这里插入图片描述
b为m1维列向量,A为m1×n维矩阵
Aeq与beq也是同理。

Matlab求解线性规划问题所要做的变换

在用Matlab求解线性问题标准型

1、MATLAB标准型是对目标函数 求极小,如果遇到是对目标函数求极大的问题,在使用MATLAB求解时,需要在函数前面加一个负号转化为对目标函数求极小的问题;

2、MATLAB标准型中的 不等式约束形式为“≤”,如果在线性规划问题中出现“≥”形式的不等式约束,则我们需要在两边乘以(-1)使其转化为MATLAB中的“≤”形式;

3、如果在线性规划问题中出现了“<”或者“>”的约束形式,则我们需要通过添加松弛变量使得不等式约束变为等式约束;
如果原有线性规划问题的约束条件为不等式,则可增加一个或减去一个非负变量,使约束条件变为等式,增加或减去的这个非负变量称为松弛变量。

4、之后,我们只需要将所有的约束(包括不等式约束和等式约束)转化为矩阵形式的即可。

Matlab求解线性规划

直接先来看一个简单的例子:
在这里插入图片描述
1、原问题为对目标函数求极大,故添加负号使变为:min f=-4x1+2x2-x3
2、原问题中存在“≥”的约束条件,故添加负号使其变为8x1-2x2+2x3≤-8
3、将约束整理为矩阵形式:
在这里插入图片描述
(将矩阵作以运算可以看出是:2x1-x2+x3≤12;8x1-2x2+2x3≤-8;-2x1+x3=3;x1+x2=3。也就是上面的等式约束和不等式约束)

用Matlab表达为:

f=[-4; 2; -1]; %将目标函数转化为求极小
A=[2 -1 1; 8 -2 2]; b=[12; -8]; %不等式约束系数矩阵
Aeq=[-2 0 1; 1 1 0];beq=[3; 7]; %等式约束系数矩阵
lb=[0; 0; 0];ub=[Inf; Inf; Inf] %对设计变量的边界约束,上界和下界
x=linprog(f,A,b,Aeq,beq,lb,ub)

运行结果如下:
在这里插入图片描述

LP函数调用格式

MATLAB优化工具箱中求解线性规划问题的命令为linprog,其函数调用方法
有多种形式如下所示:

x = linprog(f,A,b)  %目标函数和不等式约束
x = linprog(f,A,b,Aeq,beq)  %目标函数、不等式约束和等式约束
x = linprog(f,A,b,Aeq,beq,lb,ub)  %目标函数、不等式约束、等式约束和边界约束
x = linprog(f,A,b,Aeq,beq,lb,ub,x0)  %目标函数、不等式约束、等式约束、边界约束和算法求解的初始点也就是迭代的初始点
x = linprog(c,A,b,Aeq,beq,lb,ub,x0,options)  %目标函数、不等式约束、等式约束、边界约束和算法求解的初始点也就是迭代的初始点、options是求解时用户提供的控制参量
x = linprog(problem)
[x,fval] = linprog(...)  %改变输出参数为两个,一个是x一个是f value,代表目标函数在x点处的目标函数值.
[x,fval,exitflag] = linprog(...)  %输出参数有三个
[x,fval,exitflag,output] = linprog(...)  %输出参数有四个
[x,fval,exitflag,output,lambda] = linprog(...)  %输出参数有五个
LP的输入参数

MATLAB工具箱中的linprog函数在求解线性规划问题时,提供的参数为:模
型参数、初始解参数和算法控制参数。

模型参数:x、f、A、b、Aeq、beq、ub、lb。决策变量、目标函数、不等式约束、等式约束和边界约束

x0为线性规划问题的初始解,该设置仅在中型规模算法中有效,而在默认的大型规模算法和单纯形算法中,MATLAB将忽略一切初始解。

options为包含算法控制参数的结构变量,我们可以通过optimset命令对这些具体的控制参数进行设置,例如下述格式options = optimset(‘param1’,value1,‘param2’,value2,…)
该命令格式创建一组控制参数结构变量options,将参数的具体值赋给单引号之间的参数,任何未被指定的参数将被赋值为[],参数值为[]的具体的含义是将该组控制参数传递给优化函数时将使用MATLAB提供的默认值
在线性规划问题中可以用到的设置参数如下表所示:
在这里插入图片描述

LP输入参数命令示例

1、x = linprog(f,A,b)
在这里插入图片描述
2、x = linprog(c,A,b,Aeq,beq)
在这里插入图片描述
即该函数调用格式解决的是既含有线性等式约束,又含有线性不等式约束的线性规划问
题,如果在线性规划问题中无线性不等式约束,则可以设A=[]以及b=[]

3、x = linprog(c,A,b,Aeq,beq,lb,ub)
在这里插入图片描述
即在线性规划问题的求解过程中进一步考虑了对设计变量的约束,其中lb和ub均是和设
计变量维数相同的列向量,如果对设计变量没有上界约束,可以设置ub(i) = Inf,如果
没有下界约束则可以设置lb(i) = -Inf,和(2)类似,如果问题中没有等式约束,则可以设
Aeq=[]以及beq=[]

4、x = linprog(c,A,b,Aeq,beq,lb,ub,x0)
在前面调用方法的基础上设置线性规划问题求解的初始解为x0,该参数仅在使用有效集
算法时生效,否则当使用默认的内点算法时,将忽略任何初始点,即参数无效。

5、 x = linprog(c,A,b,Aeq,beq,lb,ub,x0,options)
用options指定的优化参数进行最小化。可以使用optimset来设置这些参数

LP的输出参数

linprog函数返回的输出参数有x、fval、exitflag、lambda和output。

1、输出参数x为线性规划问题的最优解
2、输出参数fval为线性规划问题在最优解x处的函数值
3、输出参数exitflag返回的是优化函数计算终止时的状态指示,说明算法终止的原因,其取值和其代表的具体原因如表所示:

在这里插入图片描述
4、输出参数output是一个返回优化过程中相关信息的结构变量,其属性如表所示:
在这里插入图片描述
5、输出参数lambda是返回线性规划问题最优解x处的拉格朗日乘子的一个结构变量,其总维数等于约束条件的个数,其非零分量对应于起作用的约束条件,其属性如表所示:
在这里插入图片描述

LP的输出参数的调用

1、[x,fval] = linprog(…)
在优化计算结束之时返回线性规划问题在解x处的目标函数值fval

2、 [x,fval,exitflag] = linprog(…)
在优化计算结束之时返回exitflag值,描述函数计算的退出条件。

3、 [x,fval,exitflag,output] = linprog(…)
在优化计算结束之时返回返回结构变量output

4、 [x,fval,exitflag,output,lambda] = linprog(…)
在优化计算结束之时返回线性规划问题最优解x处的拉格朗日乘子lambda

用Matlab求解线性规划的例子

如:
在这里插入图片描述

f=[-1;-1]; %目标函数,为转化为极小,故取目标函数中设计变量的相反数
A=[1 -2;1 2]; %线性不等式约束
b=[4;8];
lb=[0;0]; %设计变量的边界约束,由于无上界,故设置ub=[Inf;Inf];
ub=[Inf;Inf];
[x,fval]=linprog(f,A,b,[],[],lb,ub)

**加粗样式**
在这里插入图片描述

f=[-4;-3]; %目标函数,为转化为极小,故取目标函数中设计变量的相反数
A=[3 4;3 3;4 2]; %线性不等式约束
b=[12;10;8];
lb=[0;0]; %设计变量的边界约束,由于无上界,故设置ub=[Inf;Inf]
ub=[Inf;Inf];
[x,fval,exitflag]=linprog(f,A,b,[],[],lb,ub) %输出最优解x,在最优解x处的目标函数值f value,函数运行终止的状态指示变量

在这里插入图片描述
在这里插入图片描述

f=[-1;-3;1]; %目标函数,为转化为极小,故取目标函数中设计变量的相反数
Aeq=[1 1 2;-1 2 1]; %线性等式约束
beq=[4;4];
lb=[0;0;0]; %设计变量的边界约束,由于无上界,故设置ub=[Inf;Inf;Inf]
ub=[Inf;Inf;Inf];
[x,fval,exitflag,output]=linprog(f,[],[],Aeq,beq,lb,ub)%输出最优解x,在最优解x处的目标函数值f value,函数运行终止的状态指示变量,输出信息

在这里插入图片描述
exitflag=1表示问题首先到了解x处
output里的参数 可以对照上面的表

在这里插入图片描述

f=[-3;1;1]; %目标函数,为转化为极小,故取目标函数中设计变量的相反数
A=[1 -2 1;4 -1 -2]; %线性不等式约束
b=[11;-3];
Aeq=[-2 0 1]; %线性等式约束
beq=[1];
lb=[0;0;0]; %设计变量的边界约束,由于无上界,故设置ub=[Inf;Inf;Inf]
ub=[Inf;Inf;Inf];
[x,fval,exitflag,output,lambda]=linprog(f,A,b,Aeq,beq,lb,ub) %输出最优解x,在最优解x处的目标函数值f value,函数运行终止的状态指示变量,输出信息,线性规划问题最优解x处的拉格朗日乘子的一个结构变量

在这里插入图片描述

注:整数问题或是0-1规划问题和线性规划问题都可用matlab自带的 “intprog” 工具箱来解决,是通用的。

  • 24
    点赞
  • 149
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
### 回答1: 约束的MPC(模型预测控制)算法是一种常用的控制策略,它可以通过预测和优化来实现系统的稳定性和性能要求。该算法在Matlab仿真中的实现过程如下: 1. 系统建模:首先,根据实际系统的动力学特性,将其建模为一个离散时间的状态空间模型。这个模型通常由连续时间的状态空间模型通过离散化得到。 2. 状态空间模型预测:使用系统建模得到的离散状态空间模型,通过控制时域离散方程的迭代来预测系统的状态。这个预测过程可以通过求解一个递推方程实现。 3. 控制目标设定:根据具体的应用需求,设定控制目标,例如输出变量的参考轨迹或者在一定时间窗口内最小化输出误差等。 4. 控制器设计和优化:基于预测模型和设定的控制目标,设计一个优化问题来确定控制器的控制律。这个优化问题通常包括一个性能指标和一系列的约束条件。 5. 优化求解:通过使用Matlab中的优化工具箱,可以对上述的优化问题进行求解。优化求解过程中,需要将系统状态进行预测,并使用约束条件保证控制器的输出在可操作范围内。 6. 实时控制:在控制系统中,通过实时测量得到的反馈数据,将其作为控制器的输入,并对输出进行实时修正。这样可以实现对系统状态的实时控制。 通过以上步骤,我们可以在Matlab中实现约束的MPC算法的仿真。这样可以验证算法对系统的控制性能和约束条件的满足情况。同时,可以根据仿真结果对算法的参数进行调整和优化,以获得更好的控制效果。 ### 回答2: 约束的模型预测控制(Model Predictive Control,简称MPC)是一种常用的控制方法,通过对系统模型进行预测,通过优化求解得出最优控制输入,从而实现对系统的控制。约束的MPC算法是在基本的MPC算法基础上加入了输入和状态变量的约束条件。 在Matlab中进行约束的MPC算法的仿真可以遵循以下步骤: 1. 定义模型:将系统的状态空间模型进行离散化,并将其表达为一个差分方程或状态转移矩阵的形式。这里可以使用Matlab中的一些控制系统函数来进行模型的定义和离散化。 2. 设置控制目标:确定系统的期望状态和期望控制输入,即系统应该达到的目标状态和目标输入。 3. 设计预测控制器:使用定义好的模型和控制目标,采用最小化成本函数的方法,设计出预测控制器。可以使用Matlab中的优化函数或者控制系统工具箱中的函数进行优化求解。 4. 约束条件设置:根据实际问题的约束条件,定义输入变量和状态变量的约束范围。例如,可以定义输入变量的上下界,以及状态变量的约束范围。 5. 仿真实验:将所设计好的约束的MPC控制器应用于系统模型,并进行仿真实验。可以设置一些实验中的干扰或者随机扰动条件,测试控制器的鲁棒性和性能。 通过以上步骤,在Matlab中可以进行约束的MPC算法的仿真实验。可以根据实际需求,在仿真过程中加入更多的约束条件和性能指标,根据仿真结果对控制器进行改进和调整,使其能够在实际系统中得到有效应用。 ### 回答3: 约束的模型预测控制(Model predictive control,MPC)算法是一种常用的先进控制方法,它可以通过优化问题求解来实现对系统的控制。在实际应用中,系统往往会受到各种约束条件的限制,如输入输出限制、状态变量边界等。约束的MPC算法在设计中考虑了这些约束条件,以保证控制器的性能和系统的稳定。 在Matlab中实现约束的MPC算法,首先需要考虑控制系统的动力学模型。可以利用系统的离散状态空间模型或者连续时间模型进行描述,并转化为离散时间下的差分方程形式。接下来,需要定义控制器的优化问题。该问题一般包括目标函数和约束条件。 目标函数衡量了系统当前状态与期望状态之间的差距,并通过调整控制输入来最小化目标函数的值。约束条件则包括输入输出约束、状态约束等。在Matlab中,可以利用优化工具箱的相关函数来定义和求解优化问题,如quadprog函数。 在求解优化问题的过程中,需要将系统的动力学模型和约束条件输入到优化求解器中,并通过调整控制输入来逐步逼近期望状态。由于约束条件的存在,求解器会根据这些约束条件对优化问题进行求解,并输出最优的控制输入序列。根据这些控制输入序列,可以实现对系统的控制。 最后,需要编写一个控制循环来实时调用MPC算法,并将控制输入应用于控制系统中。这样,在每个采样周期内,都可以进行优化问题求解并生成最优的控制输入。 总结起来,约束的MPC算法的Matlab仿真主要包括系统模型的建立、定义优化问题求解优化问题和编写控制循环等步骤。通过这些步骤,可以实现对受约束系统的精确控制。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

华毓

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

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

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

打赏作者

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

抵扣说明:

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

余额充值