MATLAB-线性规划

本文介绍了线性规划的基本概念,如何将其转化为MATLAB标准型,以及使用linprog函数和基于问题求解的两种方法。详细展示了MATLAB中的代码示例,包括线性不等式和等式约束的处理方式。
摘要由CSDN通过智能技术生成

关于线性规划问题,首先要建立数学模型以及线性规划模型。

有基于求解器求解和基于问题求解两种方法。

将线性规划问题转换为MATLAB标准型:(linprog函数是求取最小值,且约束条件要为小于)

基于求解器求解

线性规划的标准形式

其中f,x,b,beq,lb,ub为列向量,f称为价值向量,b为资源向量,A、Aeq为不等式约束和等式约束对应的矩阵。听起来很难,但是结合例题之后会很好理解。

例1.3的标准型中,s.t.约束,第一行为不等式,第二行为等式,第三行为取值范围,可得:

f = [-2,-3,5];

A = [-2,5,-1;1,3,1];b = [-10;12];

Aeq = [1,1,1];beq = 7;

lb = zeros(3,1); % 只有下界

linprog函数

函数调用格式:

[x,fval] = linprog(f,A,b)

[x,fval] = linprog(f,A,b,Aeq,beq)

[x,fval] = linprog(f,A,b,Aeq,beq,lb,ub)

其中x返回的是决策向量的取值,fval返回的是目标函数的最优值,f为价值向量,A、b对应的是线性不等式约束,Aeq、beq对应的是线性等式约束,lb、ub分别对应的是决策向量的下界向量和上界向量。

根据题目,我们选择第三种调用格式即可。

MATLAB程序:

clc,clear

f = [-2,-3,5];

A = [-2,5,-1;1,3,1];b = [-10;12];

Aeq = [1,1,1];beq = 7;

lb = zeros(3,1);

[x,fval] = linprog(f,A,b,Aeq,beq,lb);

x,fval = -fval % 目标函数最大化

基于问题求解

首先需要用变量和表达式构造优化问题,然后用solve函数求解。

MATLAB程序:

clc,clear

prob = optimproblem('ObjectiveSense','max');% 目标函数最大化的优化问题

% 这里ObjectSense 表示目标类型为求最大值的意思

% 如果直接写prob=optimproblem 默认求最小值

x = optimvar('x',3,'LowerBound',0);% 决策变量

% 'x' 为变量名 ,3表示有三个变量

% 'LowerBound'表示下界,即下界为0,此处省略上界'UpperBound'

prob.Objective = 2*x(1) + 3*x(2) - 5*x(3);  % 目标函数

prob.Constraints.con1 = x(1) + x(2) + x(3) == 7;% 约束条件

prob.Constraints.con2 = 2*x(1) - 5*x(2) + x(3) >= 10;

prob.Constraints.con3 = x(1) + 3*x(2) + x(3) <=12;

[sol,fval,flag,out] = solve(prob)% fval返回最优值

sol.x    % 显示决策变量的值

在MATLAB基于问题的求解方法中,不能把不同类型的约束条件写在同一个约束集合中。

当然还可以将约束范围写成向量的形式:

clc,clear
prob = optimproblem('ObjectiveSense','max');
x = optimvar('x',3,'LowerBound',0);

f = [2,3,-5];
A = [-2,5,-1;1,3,1];b = [-10;12];
Aeq = [1,1,1];beq = 7;
lb = zeros(3,1);

prob.Objective = f*x;
prob.Constraints.con1 = Aeq*x == beq;
prob.Constraints.con2 = A*x <= b;
[sol,fval,flag,out] = solve(prob)
sol.x

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值