12. 线性规划的单纯形法

单纯形法(Simplex Method) 是一种用于求解线性规划(LP)问题的迭代算法,它从可行解的一个顶点开始,沿着可行区域的边界移动,逐步找到最优解。该方法特别适用于具有多个变量和约束的线性规划问题。

单纯形法的核心概念

  1. 标准形式:单纯形法通常要求线性规划问题以标准形式表达,即:

    • 目标函数为最大化问题: Max Z = c 1 x 1 + c 2 x 2 + ⋯ + c n x n \text{Max} \quad Z = c_1x_1 + c_2x_2 + \dots + c_nx_n MaxZ=c1x1+c2x2++cnxn
    • 约束为线性等式,且右侧为非负数: a 11 x 1 + a 12 x 2 + ⋯ + a 1 n x n ≤ b 1 a_{11}x_1 + a_{12}x_2 + \dots + a_{1n}x_n \leq b_1 a11x1+a12x2++a1nxnb1
    • 所有变量必须是非负的: x i ≥ 0 x_i \geq 0 xi0

    若原问题是线性不等式的形式,可以通过引入松弛变量将其转换为等式。

  2. 初始解:单纯形法从一个基本可行解开始,通常是某个顶点。

  3. 迭代步骤:单纯形法沿着可行区域的边界,从一个顶点移动到另一个顶点,逐步逼近最优解。在每一步中,单纯形法根据当前顶点的信息计算出下一个更好的顶点。

  4. 停止条件:当目标函数不再能够通过沿某个方向的移动得到改善时,算法停止,并输出当前解作为最优解。

单纯形法的解读步骤

  1. 建立初始表格:将线性规划问题转换为标准形式,并使用增广矩阵构造初始单纯形表格。
  2. 选择进入变量:在目标函数系数中选择一个正值的变量作为进入基的变量,表示沿该方向可以提升目标函数值。
  3. 选择离开变量:根据约束条件,找出一个基变量,在增加进入变量时最先到达零点。该变量将被替换为进入变量。
  4. 更新表格:通过高斯消元法,更新单纯形表格,使得进入变量成为新的基变量。
  5. 迭代:重复选择进入和离开变量的步骤,直到所有目标函数系数为非正数,即找到了最优解。
    我们来看一个具体的实例,演示单纯形法的应用过程。

实例问题:

某公司生产两种产品,产品1每个单位利润为3,产品2每个单位利润为5。每周有两种资源可用:资源1最多30单位,资源2最多24单位。生产产品1需要2单位资源1和1单位资源2;生产产品2需要1单位资源1和2单位资源2。公司希望通过生产两种产品,最大化每周的总利润。

线性规划的数学描述:

目标函数

Max Z = 3 x 1 + 5 x 2 \text{Max} \quad Z = 3x_1 + 5x_2 MaxZ=3x1+5x2

约束条件

2 x 1 + x 2 ≤ 30 (资源1约束) 2x_1 + x_2 \leq 30 \quad \text{(资源1约束)} 2x1+x230(资源1约束)

x 1 + 2 x 2 ≤ 24 (资源2约束) x_1 + 2x_2 \leq 24 \quad \text{(资源2约束)} x1+2x224(资源2约束)

x 1 ≥ 0 , x 2 ≥ 0 (非负约束) x_1 \geq 0, \quad x_2 \geq 0 \quad \text{(非负约束)} x10,x20(非负约束)

转化为标准形式:

为了将约束转换为等式,我们引入松弛变量 s 1 s_1 s1 s 2 s_2 s2

2 x 1 + x 2 + s 1 = 30 2x_1 + x_2 + s_1 = 30 2x1+x2+s1=30

x 1 + 2 x 2 + s 2 = 24 x_1 + 2x_2 + s_2 = 24 x1+2x2+s2=24

其中, s 1 , s 2 ≥ 0 s_1, s_2 \geq 0 s1,s20表示松弛变量,确保等式成立。

标准形式的目标函数:

Max Z = 3 x 1 + 5 x 2 + 0 s 1 + 0 s 2 \text{Max} \quad Z = 3x_1 + 5x_2 + 0s_1 + 0s_2 MaxZ=3x1+5x2+0s1+0s2

初始单纯形表格:

在单纯形法中,我们构造初始表格,如下所示:

基变量 x 1 x_1 x1 x 2 x_2 x2 s 1 s_1 s1 s 2 s_2 s2RHS
s 1 s_1 s1211030
s 2 s_2 s2120124
Z-3-5000

第一步:选择进入变量和离开变量

在目标行(Z 行)中,我们选择系数最负的变量作为进入变量。在此例中, x 2 x_2 x2系数为 -5,最负,因此 x 2 x_2 x2 是进入变量。

接下来,我们根据 RHS 列(右端常数)计算离开变量。计算标准是将 RHS 列中的值除以进入变量列中的正系数,选择最小的商:

30 1 = 30 , 24 2 = 12 \frac{30}{1} = 30, \quad \frac{24}{2} = 12 130=30,224=12

因此, s 2 s_2 s2 离开基,进入变量为 x 2 x_2 x2

第二步:更新单纯形表格

我们通过高斯消元法更新表格,将 x 2 x_2 x2 作为新基变量。经过消元后,新的单纯形表格如下:

基变量 x 1 x_1 x1 x 2 x_2 x2 s 1 s_1 s1 s 2 s_2 s2RHS
s 1 s_1 s11.501-0.518
x 2 x_2 x20.5100.512
Z-0.5002.560

第三步:继续迭代

此时,目标行中的所有系数都为非负,表示我们已经找到最优解。

最优解:

x 1 = 18 , x 2 = 12 x_1 = 18, x_2 = 12 x1=18,x2=12, 最优目标函数值 Z=60。公司每周生产 18 单位产品1和 12 单位产品2,利润最大化为 60。

总结

单纯形法通过迭代更新可行解的方式,寻找最优解。在每一步中,算法都会选择一个有潜力增加目标函数值的变量进入基,并在满足所有约束的前提下替换现有的基变量,直至找到最优解。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/462150.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

(56)MATLAB分析码间串扰信道的传递函数与频率响应

文章目录 前言一、3个存在码间串扰的信道二、信道特性仿真三、仿真结果四、迫零均衡器与MMSE均衡器仿真总结 前言 线性均衡器的性能完全取决于通信信道的特性。本文设计了三个不同传输特性的信道,给出了其传递函数系数,然后计算并绘制了各自的频率响应。…

etcd多实例配置

多实例进行配置,分别在多个不同端口进行监听,避免开启单机部署监听端口冲突; 查看go版本: go version 若没有go环境,则进行下载,解压至/usr/local后进行环境配置,编辑vim ~./bashrc vim ~./b…

029_Common_Plots_Matlab常见二维绘图

常用的二维绘图 常用绘图包括下面的种类: 线图, plot柱图, bar梯步图,stairstep误差棒图,errorbar极坐标图,polarplot跟图,stem散点图,scatter 这些命令都可以通过help xxx来查看…

NuGet Next发布,全新版私有化NuGet管理

NuGet Next发布,全新版私有化NuGet管理 NuGet Next是一款基于BaGet的一款私有化NuGet管理平台,我们对BaGet进行了扩展,并且提供了更多的功能。 NuGet 最新版开源私有化包管理,我们基于BaGet的基础之上增加了更多的功能&#xff…

STM32 从0开始系统学习5

目录 STM32 GPIO输入的四种模式 Practice And Usage 练习与封装 Detailed And Reference 更加具体的说明 输入浮空模式 输入上拉模式 输入下拉模式 模拟功能 我们下面聊一聊输入的事情,输入指的是我们的处理器从外部端口接受外设发过来的信号。在我们没有接…

PHP反序列化原生类字符串逃逸框架反序列化利用

PHP反序列化 概念 序列化的原因:为了解决开发中数据传输和数据解析的一个情况(类似于要发送一个椅子快递,不可能整个椅子打包发送,这是非常不方便的,所以就要对椅子进行序列化处理,让椅子分成很多部分在一起打包发送…

WonderWorld: Interactive 3D Scene Generation from a Single Image 论文解读

目录 一、概述 二、相关工作 1、新视图生成 2、单视图3D场景生成 3、视频生成 4、快速的3D场景表示 三、WonderWorld 1、FLAGS表示 2、引导深度扩散模块 3、单视角层次生成 4、基于几何的初始化 surfel表示 5、阶段一——生成3D场景部分 6、阶段二——用户交互控…

网络:IP分片和组装

个人主页 : 个人主页 个人专栏 : 《数据结构》 《C语言》《C》《Linux》《网络》 《redis学习笔记》 文章目录 前言16位标识,3位标志,13位片偏移分片组装总结 前言 对于IP分片和组装的总结 当一个IP数据报的大小超过网络的MTU(最…

从0到1搭建flink程序-WordCount(图文/详细/mac)

目录 一、目标以及前置资料 1.1 目标 1.2 前置资料 二、实现 2.1 搭建流程 2.2 调试 参考 一、目标以及前置资料 1.1 目标 初步感受flink任务,从0到1快速搭建一个flink程序 1.2 前置资料 1、下载jdk:Mac 安装jdk_mac 安装jdk 1.8-CSDN博客 2、…

ctfshow——web(总结持续更新)

文章目录 1、基础知识部分2、php伪协议2.1 php://input协议2.2 data://text/plain协议 3、webshell连接工具3.1 蚁剑连接一句话木马 4、各个web中间件重要文件路径4.1 Nginx 5、sqlmap使用6、php特性6.1 md5加密漏洞 7、TOP 10漏洞7.1 SQL注入 1、基础知识部分 识别base64编码…

FineReport 倒计时特效

1、代码准备 将下面的代码生成对应文件 1.1、zzsc.js 这段代码是一个JavaScript计时器脚本,用于计算从当前时间到第二天午夜(即0点)之间的时间差,并将这个时间差显示在网页上的特定元素中。具体来说,它会实时更新页…

【Linux】编辑器vim 与 编译器gcc/g++

目录 一、编辑器vim: 1、对vim初步理解: 2、vim的模式: 3、进入与退出: 4、vim命令模式下的指令集: 移动光标: 删除: cv: 撤销: 其他: 5、vim底行模…

虚拟机 Ubuntu 扩容

文章目录 一、Vmware 重新分配 Ubuntu 空间二、Ubuntu 扩容分区 一、Vmware 重新分配 Ubuntu 空间 先打开 Vmware ,选择要重新分配空间的虚拟机 点击 编辑虚拟机设置 ,再点击 硬盘 ,再点击 扩展 选择预计扩展的空间,然后点击 扩展…

【搜索引擎】俄罗斯搜索引擎yandex

俄罗斯搜索引擎yandex 1997年,俄罗斯搜索引擎Yandex(俄语意为:语言目录)首次上线,已发展成为全球第四大搜索引擎和第二大非英语搜索引擎 https://yandex.com/

【深度学习】CrossEntropyLoss需要手动softmax吗?

【深度学习】CrossEntropyLoss需要手动softmax吗? 问题:CrossEntropyLoss需要手动softmax吗?答案:不需要官方文档代码解释 问题:CrossEntropyLoss需要手动softmax吗? 之前用 pytorch 实现自己的网络时&…

Uniapp的H5以及App不支持后端传FormData类型参数的解决方案

在uniapp中不支持FormData的传参,这就很恶心;如果强行传的话会提示,请求失败的报错信息。 因为后端必须要FormData类型的传参,所以在查阅一系列方案后,有一种解决办法可以完美解决。 代码: init() {const…

img 标签的 object-fit 属性

设置图片固定尺寸后,可以通过 object-fit 属性调整图片展示的形式 object-fit: contain; 图片的长宽比不变,相应调整大小。 object-fit: cover; 当图片的长宽比与容器的长宽比不一致时,会被裁切。 object-fit: fill; 图片不再锁定长宽…

机器人领域中的scaling law:通过复现斯坦福机器人UMI——探讨数据规模化定律(含UMI的复现关键)

前言 在24年10.26/10.27两天,我司七月在线举办的七月大模型机器人线下营时,我们带着大家一步步复现UMI「关于什么是UMI,详见此文:UMI——斯坦福刷盘机器人:从手持夹持器到动作预测Diffusion Policy(含代码解读)」&…

scala---10.30

val、var package com_1030class Person {var name:String"rose"def sum(n1:Int,n2:Int):Int{n1n2} } object Person{def main(args: Array[String]): Unit {//创建person对象var personnew Person()println(person.sum(10,20))//30println(person.name)person.nam…

Oracle与SQL Server的语法区别

1)日期和日期转换函数。 SQL: SELECT A.*, CASE WHEN NVL(PAA009,) OR PAA009 >Convert(Varchar(10), SYSDATE,120) THEN Y ELSE N END AS ActiveUser FROM POWPAA A WHERE PAA001admin or PAA002admin Oracle: SELECT A.*, CASE WHEN NVL(PAA009,) or PAA009&…