Matlab 求解运筹优化问题中的规划论 线性规划 非线性规划 整数规划


1. 规划问题的分类

统筹优化类的问题中,规划论的问题是十分常见的,规划论主要分为线性规划和非线性规划,对于这两种规划的粗略定义如下:

  • 线性规划:目标函数与约束条件均为线性
  • 非线性规划:目标函数或者约束条件中有非线性函数的存在

关于线性函数的定义 传送门


2. 线性规划

解决线性规划问题在Matlab中主要使用linprog函数和intlinprog函数,这两个函数分别对应求解非整数规划问题和整数规划问题,其函数原型如下所示:

% 非整数规划
[x, fval] = linprog(f,A,b,Aeq,beq,lb,ub)

% 整数规划
[x,fval] = intlinprog(f,xint,A,b,Aeq,beq,lb,ub)

在Matlab中的函数原型如下所示 (字丑勿喷
1
相应的参数

参数Value
f目标函数的系数矩阵
A线性不等式的约束矩阵
b不等式右边的常数项
Aeq线性等式的左边系数
beq线性等式的右边系数
lb决策变量x的下边界变量
ub决策变量x的上边界变量
xint (整数规划独享)取值为整数的决策变量的下标

注意:不一定所有的规划问题都有这些元素,但是需要注意的是,如果没有,则需在等号右边加上[ ] 如:ub =[ ];


2.1 例子1

我们设有线性规划问题如下:
2

则对应的源代码有:

%f:目标函数的系数矩阵
f = [-72 -64];

%A:线性不等式的约束矩阵
A = [1,1;12,8;3,0];
%b:不等式右边的常数项
b = [50;480;100];
%Aeq:线性等式的左边系数
%beq:线性等式的右边系数
%没有的话输入空值

Aeq = [];
beq = [];

%lb:决策变量x的下边界变量
%ub:决策变量x的上边界变量
lb = [0 ,0 ];
ub =[];

%xint:取值为整数的决策变量的下标
xint = [1,2]; %这里表示x1和x2都要求取整数

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

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

非整数规划结果:
3

整数规划结果:

4

2.2 例子2

f = [8 1];

A = [ 1 2 ;
      4 1 ;
      2 1 ];
  
b = [-14; -30; 20];

Aeq = [2,-1];

beq = [3];

lb = [-5,-40];
ub = [5,10];

xint = [2];

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

最终结果

5


3. 非线性规划

对于求解非线性规划的问题,我们主要使用 fmincon来对函数进行求解,其函数原型如下:

 [x,fval] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,@nonlcon)
参数Value
x0决策变量的初始向量
A b Aeq beq lb ub同线性规划
@nonlcon表示约束函数
fun使用目标函数句柄输入

其对应的标准型如下:

5


3.1 实例

6
源代码

 %输入参数:
 %fun: 使用目标函数句柄输入
 fun = @(x)(4*x(1)^2+2*x(2)^2+4*x(1)*x(2)+2*x(2))*exp(x(1))

%x0: 决策变量的初始向量
 x0 = [0,0];
 
 % A b Aeq beq lb ub 同线性规划
 
 A = [2 1;3 5];
 b = [4 ; 10];
 Aeq = [1, -2];
 beq = -1;
 
 lb = [0,0];
 ub = [];
 
 % @nunlcon表示函数
 [x,fval] = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,@nonlcon)

% nonlcon: 非线性约束函数的句柄

  function [c,ceq] = nonlcon(x)
    %不等式的约束有两个,写成矩阵的形式
    %但是要注意两个等式都要将所有的项移到同一边才写句柄
        c =[1 - x(1)*x(2);
            x(1)*x(2)-1.5];
        ceq = x(1)^2+x(2)^2-3;
  end

计算结果
9




写在最后

各位看官,都看到这里了,麻烦动动手指头给博主来个点赞8,您的支持作者最大的创作动力哟! <(^-^)>
才疏学浅,若有纰漏,恳请斧正
本文章仅用于各位同志作为学习交流之用,不作任何商业用途,若涉及版权问题请速与作者联系,望悉知

  • 12
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值