线性规划问题的基本内容

线性规划解决的是自变量在一定的线性约束条件下,使得线性目标函数求得最大值或者最小值的问题。

\[\min z=\sum_{j=1}^{n} f_{j} x_{j}
\]

\[\text { s.t. }\left\{\begin{array}{ll}{\sum_{j=1}^{n} a_{i j} x_{j} \leqslant b_{i}} & {(i=1,2, \cdots, m)} \\ {\sum_{j=1}^{n} a_{k j}^{\mathrm{eq}} x_{j} \leqslant b_{k}^{\mathrm{eq}}} & {(k=1,2, \cdots, h)} \\ {\mathrm{lb}_{j} \leqslant x_{j} \leqslant \mathrm{ub}_{j}} & {(j=1,2, \cdots, n)}\end{array}\right.
\]

其中

价值系数向量为

\[\mathbf{F}=\left(f_{1}, f_{2}, \cdots, f_{n}\right)^{\mathrm{T}}
\]

决策变量向量为

\[\mathbf{X}=\left(x_{1}, x_{2}, \cdots, x_{n}\right)^{\mathrm{T}}
\]

不等式约束系数矩阵为

\[\mathbf{A}=\left(\begin{array}{ccc}{a_{11}} & {\cdots} & {a_{1 n}} \\ {\vdots} & {\ddots} & {\vdots} \\ {a_{m 1}} & {\cdots} & {a_{m n}}\end{array}\right)
\]

不等式右端常数向量为

\[\mathbf{B}=\left(b_{1}, b_{2}, \cdots, b_{n}\right)^{\mathrm{T}}
\]

等式约束系数矩阵为

\[\mathbf{A}_{eq} = \left(\begin{array}{ccc}{a_{11}^{\mathrm{cq}}} & {\cdots} & {a_{1 n}^{\mathrm{cq}}} \\ {\vdots} & {\ddots} & {\vdots} \\ {a_{\mathrm{h1}}^{\mathrm{eq}}} & {\cdots} & {a_{\mathrm{hn}}^{\mathrm{eq}}}\end{array}\right)
\]

等式右端常数向量为

\[\mathbf{B}_{\mathrm{eq}}=\left(b_{1}^{\mathrm{eq}}, b_{2}^{\mathrm{eq}}, \cdots, b_{\mathrm{h}}^{\mathrm{eq}}\right)^{\mathrm{T}}
\]

决策变量下界向量为

\[\mathbf{L B}=\left(\mathrm{lb}_{1}, \mathrm{lb}_{2}, \cdots, \mathrm{lb}_{n}\right)^{\mathrm{T}}
\]

决策变量上界变量为

\[\mathbf{UB}=\left(\mathrm{ub}_{1}, \mathrm{ub}_{2}, \cdots, \mathrm{ub}_{n}\right)^{\mathrm{T}}
\]

当目标函数为最小值时,上述问题可以写成如下形式:

\[\min z=\boldsymbol{F}^{\mathrm{T}} \boldsymbol{X}
\]

\[\text { s.t. }\left\{\begin{array}{l}{\mathbf{A}\mathbf{X} \leqslant \mathbf{B}} \\ {\mathbf{A}_{\mathrm{eq}} \mathbf{X}=\mathbf{B}_{\mathrm{eq}}} \\ {\mathbf{LB} \leqslant \mathbf{X} \leqslant \mathbf{UB}}\end{array}\right.
\]

当目标函数为最大值时,上述问题可以写成如下形式:

\[\max z=\boldsymbol{-F}^{\mathrm{T}} \boldsymbol{X}
\]

\[\text { s.t. }\left\{\begin{array}{l}{\mathbf{A}\mathbf{X} \leqslant \mathbf{B}} \\ {\mathbf{A}_{\mathrm{eq}} \mathbf{X}=\mathbf{B}_{\mathrm{eq}}} \\ {\mathbf{LB} \leqslant \mathbf{X} \leqslant \mathbf{UB}}\end{array}\right.
\]

Matlab模型代码

调用形式

    [X,FVAL,EXITFLAG,OUTPUT,LAMBDA] = linprog(F,A,B,Aeq,Beq,LB,UB) % 目标函数为最小值
[X,FVAL,EXITFLAG,OUTPUT,LAMBDA] = linprog(-F,A,B,Aeq,Beq,LB,UB) % 目标函数为最大值

输入变量

  • F 为目标函数中的价值系数向量

  • A 为不等式约束系数矩阵(注意默认不等式方向为小于等于,若为大于等于,需要将其取相反数)

  • B 为不等式右端常数向量(注意默认不等式方向为小于等于,若为大于等于,需要将其取相反数)

  • Aeq 为等式约束系数矩阵

  • Beq 为等式右端常数向量

  • LB 为决策变量下界向量

  • UB为决策变量上界向量

在调用时,输入参数不存在时,可以将其输入用 [] 空矩阵表示。

输出变量

  • X 为最优解
  • FVAL 为最优目标值
  • EXITFLAG 为运行结束标志,当等于1时,表示程序收敛于解 X;当等于0时,表示程序运行次数到达最大;当小于0时,说明情况较多
  • OUTPUT 为程序迭代次数
  • LAMBDA 为解X相关的Largrange乘子和影子价格

案例演示

目标函数与约束条件

\[\min z=2 x_{1}+3 x_{2}+x_{3}
\]

\[\left\{\begin{array}{l}{x_{1}+4 x_{2}+2 x_{3} \geq 8} \\ {3 x_{1}+2 x_{2} \geq 6} \\ {x_{1}, x_{2}, x_{3} \geq 0}\end{array}\right.
\]

Matlab程序

F= [2;3;1];
A = [1,4,2;3,2,0];
B = [8;6];
LB = zeros(3,1);
[X,FVAL] = linprog(F,-A,-B,[],[],LB,[])

运行结果

Optimization terminated.

X =

    0.8066
1.7900
0.0166 FVAL = 7.0000

Matlab 线性规划问题模型代码的更多相关文章

  1. Matlab 整数线性规划问题模型代码

    整数线性规划问题的基本内容 整数线性规划解决的是自变量在一定的线性约束条件下,使得线性目标函数求得最大值或者最小值的问题.其中自变量只能取整数.特别地,当自变量只能取0或者1时,称之为 0-1 整数规 ...

  2. Matlab 非线性规划问题模型代码

    非线性规划问题的基本内容 非线性规划解决的是自变量在一定的非线性约束或线性约束组合条件下,使得非线性目标函数求得最大值或者最小值的问题. 当目标函数为最小值时,上述问题可以写成如下形式: \[ \mi ...

  3. Matlab 图论最短路问题模型代码

    最短路问题的基本内容 最短路问题研究的是,在一个点与点之间连接形成的网络图中,对应路径赋予一定的权重(可以理解为两点之间的距离),计算任意两点之间如何和走,路径最短的问题.在这里的距离可以理解成各种两 ...

  4. Matlab 模拟退火算法模型代码

    function [best_solution,best_fit,iter] = mySa(solution,a,t0,tf,Markov) % 模拟退化算法 % ===== 输入 ======% % ...

  5. [原创] Matlab 指派问题模型代码

    指派问题的基本内容 一般来说指派问题解决的是如何将任务分配到人,使得任务完成的效益最大化(成本型效益则求最小值,利润型效益则求最大值).上述问题一个 0 - 1 整数规划问题. 问题围绕着任务和人展开 ...

  6. MATLAB Coder从MATLAB生成C/C++代码步骤

    MATLAB Coder可以从MATLAB代码生成独立的.可读性强.可移植的C/C++代码. 使用MATLAB Coder产生代码的3个步骤: 准备用于产生代码的MATLAB算法: 检查MATLAB代 ...

  7. 转 举例说明使用MATLAB Coder从MATLAB生成C/C++代码步骤

    MATLAB Coder可以从MATLAB代码生成独立的.可读性强.可移植的C/C++代码. http://www.mathworks.cn/products/matlab-coder/ 使用MATL ...

  8. 多路复用I/O模型poll() 模型 代码实现

    多路复用I/O模型poll() 模型 代码实现 poll()机制和select()机制是相似的,都是对多个描述符进行轮询的方式. 不同的是poll()没有描述符数目的限制. 是通过struct pol ...

  9. Windows Socket五种I/O模型——代码全攻略(转)

    Winsock 的I/O操作: 1. 两种I/O模式 阻塞模式:执行I/O操作完成前会一直进行等待,不会将控制权交给程序.套接字 默认为阻塞模式.可以通过多线程技术进行处理. 非阻塞模式:执行I/O操 ...

随机推荐

  1. Harbor高可用

    项目需求: 实现Harbor的HTTPS高可用,由于Harbor 服务器配置不高,直接做HTTPS对上传下载镜像时,若docker客户端多时,会非常慢,为了提高harbor的效率,采用以下方式来解决. ...

  2. RAdam VS Adam

    论文解读:Radam:ON THE VARIANCE OF THE ADAPTIVE LEARNING RATE AND BEYOND 1,目的 想找到一个比较好的优化器,能够在收敛速度和收敛的效果上 ...

  3. 方法型混淆js代码

    const fs = require('fs'); const acorn = require('acorn'); const walk = require("acorn-walk" ...

  4. Linux 设置代理

    一.为系统设置代理编辑文件/etc/profile,增加如下两行 export http_proxy=http://proxy.com:8080/export https_proxy=http://p ...

  5. dubbo源码分析之基于SPI的强大扩展

    https://blog.csdn.net/luoyang_java/article/details/86609045 Dubbo采用微内核+插件体系,使得设计优雅,扩展性强.那所谓的微内核+插件体系 ...

  6. Dubbo的集群容错与负载均衡策略及自定义(一致性哈希路由的缺点及自定义)

    Dubbo的集群容错策略 正常情况下,当我们进行系统设计时候,不仅要考虑正常逻辑下代码该如何走,还要考虑异常情况下代码逻辑应该怎么走.当服务消费方调用服务提供方的服务出现错误时候,Dubbo提供了多种 ...

  7. Mysql模糊查询like提速优化

    LOCATE('substr',str,pos)方法 SELECT LOCATE('xbar',`foobar`); ###返回0 SELECT LOCATE('bar',`foobarbar`); ...

  8. 使用python脚本批量设置nginx站点的rewrite规则

    一般情况下,配置rewrite重写规则使用shell脚本即可: 把url拼凑成1,2文件中中的格式,运行 chongxie.sh 即可生成我们需要的rewrite规则 [root@web01:/opt ...

  9. phpspreadsheet

    2019-5-9 8:20:07 星期四 昨天在看PHPExcel的时候, github上作者说已经停止更新了, 推荐使用phpspreadsheet, 查看了一下官方文档, 功能还挺强大的, 可以读 ...

  10. WebGL学习笔记(十三):拾取

    目前为止,我们还没有涉及到交互相关的内容,实际上,我们是需要知道我们点击的地方下面的第一个物体的信息,这个过程称为拾取. 简单拾取实现 我们可以通过颜色来获取是否成功点击,具体方式如下: 场景中有一个 ...