【管理运筹学】第 5 章 | 整数规划 (2,割平面法及 0-1 变量的特性)

文章目录

  • 引言
  • 三、割平面法
  • 四、0-1 型整数规划
    • 4.1 0-1 变量的特性
      • 4.1.1 投资问题
      • 4.1.2 约束条件满足个数问题
  • 写在最后


引言

前文我们介绍了整数规划的一种求解方法——分支定界法,可以求解纯整数和混合整数规划问题。现在我们来学习另一种整数规划求解方法——割平面法。

接着,我们还会涉及到 0-1 整数规划的一些内容,是整数规划的一种特殊情形。


三、割平面法

割平面法是受整数规划几何解释的启发而形成的,根据前文的讨论,整数规划的最优解一定是在线性规划松弛问题的最优解附近。

在这里插入图片描述
那么,是否可以增加一些附加的约束,将松弛问题最优解附近不含整数解的可行域的多余部分分割来对最优解进行搜索呢?下面我们通过例子来感受割平面法的工作原理。

用割平面法求解下列整数规划问题。
在这里插入图片描述
解: 用单纯形法求解线性规划松弛问题,得到的最优单纯形表如下:

在这里插入图片描述

其松弛问题最优解为 ( x 1 = 3.75 , x 2 = 1.5 , z = 37.5 ) (x_1=3.75,x_2=1.5,z=37.5) (x1=3.75,x2=1.5,z=37.5) 。两个基变量均不满足整数要求。割平面通过加入割约束,来割除多余部分。加入割约束的方法为:

从非整数基变量对应的约束条件中任选一个。假定选取第二个,即 x 1 x_1 x1 在最优单纯性表中对应约束。该约束可表示为: x 1 + 0.125 x 3 + 0.375 x 4 = 3.75 x_1+0.125x_3+0.375x_4=3.75 x1+0.125x3+0.375x4=3.75 将上式所有非整数系数写成一个整数和纯正小数之和,即 x 1 + ( 0 + 0.125 ) x 3 + ( 0 + 0.375 x 4 ) = 3 + 0.75 x_1+(0+0.125)x_3+(0+0.375x_4)=3+0.75 x1+(0+0.125)x3+(0+0.375x4)=3+0.75 接着将所有整数项移到等式右边,小数项移到等式左边,可得: x 1 − 3 = 0.75 − 0.125 x 3 − 0.375 x 4 x_1-3=0.75-0.125x_3-0.375x_4 x13=0.750.125x30.375x4 上式,等式左端为整数,则右端也必须为整数。右端 x 3 , x 4 x_3,x_4 x3,x4 均为非负整数,要求等式右端为整数的话,则等式右端要小于等于 0 ,即 0.75 − 0.125 x 3 − 0.375 x 4 ≤ 0 0.75-0.125x_3-0.375x_4 \leq 0 0.750.125x30.375x40 整理即 − x 3 − 3 x 4 ≤ − 6 -x_3-3x_4 \leq -6 x33x46 。将其化为等式,添加到之前的最优单纯形表中,利用对偶单纯形法继续求解,得到最优整数解为 ( x 1 = 2 , x 2 = 3 , z = 34 ) (x_1=2,x_2=3,z=34) (x1=2,x2=3,z=34)

新加入的割约束方程不会割除任何整数解,即原问题的所有整数解都满足新增加的割约束。


四、0-1 型整数规划

0-1 型整数规划的变量 x i x_i xi 仅取值 0 或 1 。称 x i x_i xi 为 0-1 变量或二进制变量。这一条件可以用以下约束来代替: x i ≤ 1 , x i ≥ 0 , 整数 x_i \leq 1,x_i \geq0,整数 xi1,xi0,整数

4.1 0-1 变量的特性

面对实际问题中比如逻辑条件或顺序要求等特殊的约束条件,引入 0-1 变量可以非常巧妙地加以表示。下面讨论几个问题,大家就能感受到了。

4.1.1 投资问题

某投资公司可用于投资的资金总额为 b b b ,有若干个项目可供选择投资,假设其中第 j j j 个项目每年可获取利润 c j c_j cj ,所需要的资金是 a j a_j aj ,问如何建立模型来选定最佳组合的投资项目,以取得最佳利润。

这个问题是比较棘手的,但如果引入一个 0-1 变量,建模就变得较为直观和轻松了。因为每一种项目只有两种状态,因此,令 x j = 1 x_j=1 xj=1 表示投资了第 j j j 个项目, x j = 0 x_j=0 xj=0 表示不投资该项目。可列出如下规划模型:
在这里插入图片描述
0-1 变量还可以帮助我们满足现实投资问题中特殊的要求,如下列举了一些例子。

排斥需求—— 某几个项目(假设为第 1,4,5 个项目)中至多只能选一个,约束方程可以表示为 x 1 + x 4 + x 5 ≤ 1. x_1+x_4+x_5 \leq 1. x1+x4+x51.

优先级需求—— 选择了第 2 个项目时,才能考虑选择第 3 个项目,约束可表示为 x 3 ≤ x 2 . x_3 \leq x_2. x3x2. 同时选择了第 1,2 个项目时,才能考虑选择第 3 个项目,则约束方程可表示为 2 x 3 ≤ x 1 + x 2 . 2x_3 \leq x_1+x_2. 2x3x1+x2.

不可缺需求—— 第 3,4 个项目至少要有一个选择投资,则约束方程可表示为 x 3 + x 4 ≥ 1. x_3+x_4 \geq 1. x3+x41.

4.1.2 约束条件满足个数问题

用下式表示 p p p 个约束条件方程: ∑ j = 1 n a i j x j ≤ b i , i = 1 , 2 , … , p \sum_{j=1}^na_{ij}x_j \leq b_i,i=1,2,\dots,p j=1naijxjbi,i=1,2,,p y i y_i yi 为 0-1 变量,如果让第 i i i 个约束条件起作用,则 y i y_i yi 取 1 ,否则取 0 ,即有下式: ∑ j = 1 n a i j x j ≤ b i + ( 1 − y i ) M , i = 1 , 2 , … , p \sum_{j=1}^na_{ij}x_j \leq b_i+(1-y_i)M,i=1,2,\dots,p j=1naijxjbi+(1yi)M,i=1,2,,p 其中, M M M 是很大的整数。此时如何 y i y_i yi 为 0 ,则不等式右端为 b i + M b_i+M bi+M ,显然对任意 x x x 均满足,因此不具有约束力。

若要求必须满足 k k k 个约束条件,可添加条件 ∑ y i = k \sum y_i=k yi=k 。要求至少满足 k k k 个约束条件,可添加条件 ∑ y i ≥ k . \sum y_i \geq k. yik.


写在最后

后文将介绍 0-1 整数规划的解法,是比较重要的内容。

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

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

相关文章

Java 中使用 ES 高级客户端库 RestHighLevelClient 清理百万级规模历史数据

🎉工作中遇到这样一个需求场景:由于ES数据库中历史数据过多,占用太多的磁盘空间,需要定期地进行清理,在一定程度上可以释放磁盘空间,减轻磁盘空间压力。 🎈在经过调研之后发现,某服务…

[Ubuntu 20.04 PC] 安装C-Kermit:一个开源串口通信软件

在计算机科学领域,串口通信一直是非常重要的一环。而C-Kermit作为一款强大而灵活的开源串口通信软件,广泛应用于UNIX、Linux和Windows等操作系统中。本文将介绍C-Kermit的基本原理、特点以及如何使用它进行串口通信。 一、C-Kermit的基本原理 C-Kermit是由C语言实现的,旨在…

MyBatid动态语句且模糊查询

目录 什么是MyBtais动态语句??? MyBatis常用的动态标签和表达式 if标签 Choose标签 where标签 MyBatis模糊查询 #与$的区别 ​编辑 MyBatis映射 resultType resultMap 什么是MyBtais动态语句???…

TensorFlow 介绍

TensorFlow 是一个开源的机器学习框架,由 Google 开发。它支持多种机器学习和深度学习算法,包括神经网络、卷积神经网络、循环神经网络等。TensorFlow 利用数据流图的形式来表达计算,将输入数据和计算操作表示为节点,建立 TensorF…

2023-08-23力扣每日一题

链接: 1782. 统计点对的数目 题意: 给n个点和m条无向边(可重复),q个查询 定义edge[a]为一个点是a的边数量,定义ret[a,b]是edge[a]edge[b]-(a与b的边) q个查询q个答案&#xff0…

视频转音频mp3怎么弄?

视频转音频mp3怎么弄?在很多人看来,音频就是视频中的一部分,其实这时是一定道理的,视频是一种包含图像和有声音的多媒体文件,没有声音的视频是不完美的。时代发展到现在,短视频已经融入了我们生活的方方面面…

【日常积累】Linux中vi/vim的使用

概述 vim是由vi发展演变过来的文本编辑器,因其具有语法高亮显示、多视窗编辑、代码折叠、支持插件等功能,由于其功能相比vi来说更加强大,所以在实际工作中的使用更加广泛。 vim工作模式 Vim具有多种工作模式,常用的工作模式有&…

微服务架构2.0--云原生时代

云原生 云原生(Cloud Native)是一种关注于在云环境中构建、部署和管理应用程序的方法和理念。云原生应用能够最大程度地利用云计算基础设施的优势,如弹性、自动化、可伸缩性和高可用性。这个概念涵盖了许多方面,包括架构、开发、…

Prometheus+Grafana+AlertManager监控Linux主机状态

文章目录 PrometheusGrafanaAlertManager监控平台搭建开始监控Grafana连接Prometheus数据源导入Grafana模板监控Linux主机状态 同系列文章 PrometheusGrafanaAlertManager监控平台搭建 Docker搭建并配置Prometheus Docker拉取并配置Grafana Docker安装并配置Node-Exporter …

Python系统学习1-9-类三之特征

一、封装 数据角度:将一些基本数据类型复合成一个自定义类型。 优势:将数据与对数据的操作相关联。 代码可读性更高(类是对象的模板)。 行为角度:向类外提供必要的功能,隐藏实现的细节。 优势&#xff…

【VRTK4.0运动专题】手柄控制物体移动和旋转

文章目录 原理预设体将两轴转化为位置向量或角度后,调用运动脚本的方法,对指定的物体进行移动或旋转 步骤1、将轴转化为位置向量或角度: 建轴转化预设体,关联两轴,2、准备带有要用方法的运动脚本: 建功能物…

在线图片怎么转换成PDF?在线图片转换成PDF步骤介绍

文件格式要转化不知道怎么办?想要网上下载文件格式转换软件,但是却不知道下载哪个好?今天小编小编就给大家分享一下靠谱的小圆象PDF转换器工具,想知道这款软件好不好用?在线图片怎么转换成PDF?那就进来看看吧。 在线图片怎么转换成PDF 小圆象PDF转换…

requests模板成功下载,但是不能在pycharm中运行

在做实验的过程中,需要用到requests,但是在pycharm中成功下载,仍然无法使用,找了很久,解决方法如下: 进入win中的命令提示符 下载requests模块 pip install requests输入python显示你的python的基本信息&…

什么是软件压力测试?软件压力测试工具和流程有哪些?

软件压力测试 一、含义:软件压力测试是一种测试应用程序性能的方法,通过模拟大量用户并发访问,测试应用程序在压力情况下的表现和响应能力。软件压力测试的目的是发现系统潜在的问题,如内存泄漏、线程锁、资源泄漏等,…

pygame游戏背景的移动

文章目录 前文运行环境效果原理代码实现垂直移动(背景往上移动)垂直移动(背景往下移动)水平移动(左)水平移动(右) 结尾 前文 本文价绍用pygame实现背景的移动。游戏背景移动,如跑跑卡丁车、飞翔的小鸟等游戏,游戏背景移动带来的效果,相当于游…

基于灵动微MM32F3270微控制器的监护仪

监护仪是各类医用电子仪器中应用极为普遍的一种。监护仪不仅可以提高护理工作的效率,更重要的是,它为更全面、更准确的掌握患者病情,提高医疗服务质量提供了更可靠的保障。 基于灵动微MM32F3270微控制器的监护仪: -信号采集&…

【Java 动态数据统计图】动态数据统计思路Demo(动态,排序,containsKey)三(115)

上代码&#xff1a; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map;public class day10 {public static void main(String[] args) {List<Map<String,O…

神经网络基础-神经网络补充概念-61-单层卷积网络

概念 单层卷积网络是一种简单的神经网络结构&#xff0c;它仅包含一个卷积层&#xff0c;通常紧跟着一个激活函数以及可能的池化层和全连接层。这种结构可以用来提取输入数据的特征&#xff0c;适用于一些简单的任务。 代码实现 import tensorflow as tf# 创建一个卷积层 co…

Fabric.js 元素选中状态的事件与样式

本文简介 带尬猴&#xff01; 你是否在使用 Fabric.js 时希望能在选中元素后自定义元素样式或选框&#xff08;控制角和辅助线&#xff09;的样式&#xff1f; 如果是的话&#xff0c;可以放心往下读。 本文将手把脚和你一起过一遍 Fabric.js 在对象元素选中后常用的样式设置…

PyQt5 多线程和异步刷新UI

文章目录 一、基础程序二、Thread方式一方式二三、信号机制四、UI刷新五、moveToThread异步刷新UI一、基础程序 以下简介一个基本的PyQt程序。 需要导入的类主要来自三个包from PyQt5.QtWidgets import 常用的控件PyQt5.QtCore 核心功能类,如QT,QThread,pyqtSignalPyQt5.QtG…