【管理运筹学】背诵手册(四)| 整数规划

四、整数规划

整数规划根据变量取值的限制形式,可分为三种:

  1. 纯整数规划(IP)。
  2. 混合整数规划(MIP)。
  3. 0-1 整数规划(BIP)。

不能用凑整的方法去求整数规划问题的最优解,用四舍五入得到的解往往与最优整数解相差甚远,甚至不是可行解。

整数规划问题和对应的松弛问题一个重要的关系就是,对于 max 型问题,松弛问题的最优解值 ≥ \geq 整数规划最优解值。

分支定界法

分支定界法的基本思想是根据某种策略将原问题的可行域分解为越来越多的子域(称为分支),并检查某个子域内整数解的情况,不断调整上下界(称为定界)直到找到最优的整数解或证明整数解不存在。

分支是通过添加一对互斥的约束,砍掉 k k k k + 1 k+1 k+1 之间的非整数域,从而缩小搜索范围。定界的上界通常由各打开节点中最大的目标函数值确定,下界则由已经找到的最好的整数解来确定。

求解任何一个子问题都有以下三种可能结果:

  1. 子问题无可行解。
  2. 得到一个整数解,不继续分支。
  3. 得到非整数解。
    3.1 目标函数值大于剪枝界,继续分支;
    3.2 目标函数值小于或等于剪枝界,因剪枝而关闭。

因此分支定界法,剪枝的情况有两种,一种是子问题不可行,还有一种是子问题目标函数值小于下界。

每当下界被修改后(即找到一个整数解),都应检查所有打开的节点中那些目标函数小于下界的节点。因此在实际做题时,最好一直往一个方向分支,有可能可以直接求出一个整数解,这样另一个方向的子问题就可以直接剪掉了。

理论的做法是利用线性规划问题的灵敏度分析那里的内容,添加新的约束条件,然后重新迭代。但是这样做实在是太费时间了。考试如果出了只有两个变量的分支定界法,最好就用图解法,作答只画那个分支树就好。要是多于 3 个以上,还是先去做别的题吧。

割平面法

分支定界法可以求解混合整数规划问题,而割平面法只能求解纯整数规划问题。

割平面的关键就是那个割平面方程,要利用到一些整数的知识,举个例子,选择的非整数基变量为 x 1 x_1 x1 ,它在最优单纯形表中对应的约束方程为 x 1 − 0.25 x 3 + 0.25 x 4 = 0.75 x_1-0.25x_3+0.25x_4=0.75 x10.25x3+0.25x4=0.75 首先把约束中非整数系数都写成一个整数加上真分数的和: x 1 + ( − 1 + 0.75 ) x 3 + ( 0 + 0.25 ) x 4 = 0 + 0.75 x_1+(-1+0.75)x_3+(0+0.25)x_4=0+0.75 x1+(1+0.75)x3+(0+0.25)x4=0+0.75 需要注意的是 − 0.25 -0.25 0.25 应写成 − 1 + 0.75 -1+0.75 1+0.75 ,而不是 0 − 0.25 ) 0-0.25) 00.25) 。然后整数移到一边,分数移到另一边: x 1 − x 3 = 0.75 − ( 0.75 x 3 + 0.25 x 4 ) x_1-x_3=0.75-(0.75x_3+0.25x_4) x1x3=0.75(0.75x3+0.25x4) 想想如果里面的变量都是整数,会发生什么?如果都是整数的话,首先右边最大只能取 0.75 0.75 0.75 ,但是因为左边的也是整数,所以右边最大只能取到 0 ,于是有 0.75 − ( 0.75 x 3 + 0.25 x 4 ) ≤ 0 0.75-(0.75x_3+0.25x_4)\leq0 0.75(0.75x3+0.25x4)0 这就是我们的割平面方程。我们最好先别化成整数,直接这样作为新的约束,因为有可能原来的模型系数也是分数,这样就可以约掉。最初我们选择哪个非整数基变量先开始时也有一些讲究,尽量选择真分数较大的那一个先割。

0-1 型整数规划

这一部分主要是建模,通过引入 0-1 变量,可以很巧妙的表达一些约束条件。如至多选两个, x 1 + x 2 + x 3 ≤ 2 x_1+x_2+x_3\leq2 x1+x2+x32 ;至少选一个, x 1 + x 2 + x 3 ≥ 1 x_1+x_2+x_3\geq1 x1+x2+x31 ;选了 x 2 x_2 x2 才能选 x 3 x_3 x3 ,则有 x 2 ≥ x 3 x_2\geq x_3 x2x3 ;同时选了 x 2 , x 3 x_2,x_3 x2,x3 才能选 x 4 x_4 x4 ,则有 x 2 + x 3 ≥ 2 x 4 x_2+x_3\geq 2x_4 x2+x32x4 ;选了 x 2 x_2 x2 x 3 x_3 x3 就不能选 x 4 x_4 x4 ,反之亦然,则有 x 2 + x 4 ≤ 1 & x 3 + x 4 ≤ 1 x_2+x_4\leq1 \& x_3+x_4\leq1 x2+x41&x3+x41 ,用两个式子表示。

保证起约束作用的条件个数,如有 m m m 个互相排斥的约束: a i 1 x 1 + a i 2 x 2 + ⋯ + a i n x n ≤ b i ( i = 1 , 2 , ⋯ , m ) a_{i1}x_1+a_{i2}x_2+\cdots+a_{in}x_n\le b_i(i=1,2,\cdots,m) ai1x1+ai2x2++ainxnbi(i=1,2,,m) 若要求只能有 1 个约束起作用,则可以引入 0-1 变量 y i y_i yi 和一个充分大的数 M M M a i 1 x 1 + a i 2 x 2 + ⋯ + a i n x n ≤ b i + ( 1 − y i ) M ( i = 1 , 2 , ⋯ , m ) a_{i1}x_1+a_{i2}x_2+\cdots+a_{in}x_n\le b_i+(1-y_i)M(i=1,2,\cdots,m) ai1x1+ai2x2++ainxnbi+(1yi)M(i=1,2,,m) 则添加约束 ∑ y i = 1 \sum y_i=1 yi=1 ,即可表达只有一个约束起作用。类似地,还可以使得有 k k k 个( ∑ y i = k \sum y_i=k yi=k)和至少有 k k k 个( ∑ y i ≥ k \sum y_i\geq k yik)。

关于固定费用的问题,需要选择采用几种方式,如 x j x_j xj 表示采用第 j j j 种方式时的产量; c j c_j cj 表示采用第 j j j 种方式时每件产品的变动成本, k j k_j kj 表示采用第 j j j 种方式时的固定成本。则采用各种方式的总成本为 P j = { k j + c j x j , x j > 0 0 , x j = 0 P_j=\begin{cases} k_j+c_jx_j,& x_j>0 \\ 0,&x_j=0 \end{cases} Pj={kj+cjxj,0,xj>0xj=0 为了统一在目标函数中表达,引入 0-1 变量表示是否采用第 j j j 种方式,则模型可表达为: min ⁡ z = ∑ j = 1 3 k j y j + c j x j x j ≤ y j M \min z=\sum _{j=1}^3k_jy_j+c_jx_j \\ x_j\leq y_jM minz=j=13kjyj+cjxjxjyjM

隐枚举法

首先要化为标准型: min ⁡ z = ∑ j = 1 n c j x j s . t . { ∑ j = 1 n a i j x j ≤ b i , i = 1 , 2 , ⋯ , m x j = 0 或 1 , ∀ j \min z =\sum_{j=1}^nc_jx_j \\ s.t.\begin{cases} \sum_{j=1}^na_{ij}x_j\leq b_i,i=1,2,\cdots,m \\ x_j=0或1,\forall j \end{cases} minz=j=1ncjxjs.t.{j=1naijxjbi,i=1,2,,mxj=01,j 其中, c j ≥ 0 c_j\geq0 cj0 b i b_i bi 可以是正数、负数和零,所有约束条件必须是 ≤ \leq 形式。

隐枚举法思路和分支定界法有些相似,首先令全部变量取 0 ,检验解是否可行,若可行,已得到最优解 z ∗ = 0 z^*=0 z=0 ;若不可行,令一个变量为固定变量,取 0 或 1,将问题分为两个子域,其余变量称为自由变量。令自由变量取值 0 ,加上固定变量取值,组成此子域的解。

计算此解的目标函数值,如果比已经求出的一个可行目标函数值大,那直接停止分支,去检验另一个子域的解;若更小,再检验是否可行,若可行,已获得一个可行解,记录 z z z 值;若不可行,看看它继续往下分能否找到可行解,方法是:

将子域固定变量的值代入约束方程,不等式左端自由变量当系数为负时取 1 ,系数为正时取 0 ,这就是左端能取的最小值,如果满足约束,说明可以继续往下分支,否则停止分支。

若所有的子域都停止分支,计算停止,目标函数值最小的可行解就是最优解。

实际解题时,优先选取对目标函数影响系数大的(由于求最小,选择系数小的)作为固定变量,可能可以加快计算速度。

指派问题

指派问题求极小化时的数学模型为: min ⁡ z = ∑ i ∑ j c i j x i j s . t . { ∑ i x i j = 1 , j = 1 , 2 , ⋯ , n ∑ j x i j = 1 , i = 1 , 2 , ⋯ , n x i j = 1 或 0 \min z =\sum_i\sum_jc_{ij}x_{ij}\\ s.t.\begin{cases} \sum_i x_{ij}=1,j=1,2,\cdots,n\\ \sum_jx_{ij}=1,i=1,2,\cdots,n\\ x_{ij}=1或0 \end{cases} minz=ijcijxijs.t. ixij=1,j=1,2,,njxij=1,i=1,2,,nxij=10 当问题是求最大时,则用效率矩阵中的最大元素减去各元素,作为新的效率矩阵。

指派问题是 0-1 规划问题的特例,也是运输问题的特例( m m m 个产地, n n n 个销地且 m = n m=n m=n a i = b i = 1 a_i=b_i=1 ai=bi=1 )。当然也可以用隐枚举法或表上作业法求解,不过有更简便的方法 —— 匈牙利法。

匈牙利法第一步,变换使得各行各列出现 0 元素。变换方法为每行减去最小,每列减去最小。

第二步,试指派。从只有一个 0 的行开始,画圈,所在列其他 0 变为 Φ \varPhi Φ ;再给只有一个 0 的列加圈,所在行其他 0 变为 Φ \varPhi Φ 。若反复进行后,还有没被画圈的,且同行同列的 0 有两个及以上的,给选择性少的画圈。若带圈的 0 的个数比人少,进入下一步。

第三步,确定能画圈的最多独立 0 个数。首先给没有圈 0 的行打√,再给打√行中 Φ \varPhi Φ 所在列打√,然后给打√列中 Φ \varPhi Φ 所在行打√,重复进行。给没有打√的行划线,给打了√的列划线,这就是能覆盖所有 0 的最少直线数。如果少于人数,则需要增加。如果等于人数,则回到第二步另行指派。

当人少于任务数时,需要虚拟一个人,其做任务的费用均为 0。当任务数小于人数时,需要虚拟一个任务,所有人做该任务的费用均为 0 。如果某个人可以同时担任多项任务,应该将该人员看成相同的多个人,即效率矩阵重复某一行。如果某人一定要分配到一项,则这个人做虚拟任务的费用就为 M 。如果某人一定不能做某项,相应的费用取 M 。

如果人数少于任务数,但是任务一定要做完,也就是有人要多做,可虚拟一个人,这个人做各项任务的费用是实际所有人中最小的。这种方法,同样适用在出现,某人最多完成几项工作的要求时。

书写时,注意添加适当文字,如“使用匈牙利法求解”、“试指派”等等;写矩阵时,先写一个原矩阵,再写一个每行减去最小的,再写一个每列减去最小的,可以在这个矩阵上直接试指派并画线,如果不够再添加(有可能需要多次添加)。


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

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

相关文章

ChinaSoft 论坛巡礼 | 新兴系统软件论坛

2023年CCF中国软件大会(CCF ChinaSoft 2023)由CCF主办,CCF系统软件专委会、形式化方法专委会、软件工程专委会以及复旦大学联合承办,将于2023年12月1-3日在上海国际会议中心举行。 本次大会主题是“智能化软件创新推动数字经济与社…

算法 全排列的应用

#include <iostream> #include <string>using namespace std;// 交换字符串中两个字符的位置 void swap(char& a, char& b) {char temp a;a b;b temp; }void fun(string str) {string a str.substr(0,4); int aa;sscanf(a.c_str(), "%d",…

Harmony 应用开发之size 脚本

作者&#xff1a;麦客奥德彪 在应用开发中&#xff0c;最终呈现在用户面前的UI&#xff0c;是用户能否继续使用应用的强力依据之一&#xff0c;在之前的开发中&#xff0c;Android 屏幕碎片化严重&#xff0c;所以出现了很多尺寸适配方案。 最小宽适配、百分比适配等等。 还有一…

知虾shopee收费,多少钱一个月

在当今电商行业的竞争激烈的环境下&#xff0c;许多商家都在寻求更好的方式来推广和销售他们的产品。这就是为什么越来越多的商家选择使用知虾shopee这样的平台来展示和销售他们的商品。但是&#xff0c;对于许多商家来说&#xff0c;他们可能会对知虾shopee的收费情况感到好奇…

MySql 计算同比、环比

一、理论 国家统计局同比、环比计算公式 增长速度是反映经济社会某一领域发展变化情况的重要数据&#xff0c;而同比和环比是反映增长速度最基础、最核心的数据指标&#xff0c;也是国际上通用的指标。在统计中&#xff0c; 同比和环比通常是同比变化率和环比变化率的简称&…

关于2023年11月25日PMI认证考试有关事项的通知

PMP项目管理学习专栏https://blog.csdn.net/xmws_it/category_10954848.html?spm1001.2014.3001.54822023年8月PMP考试成绩出炉|微思通过率95%以上-CSDN博客文章浏览阅读135次。国际注册项目管理师(PMP) 证书是项目管理领域含金量最高的职业资格证书&#xff0c;获得该资质是项…

CentOS简介、ISO类型、CentOS7安装与配置以及远程连接。

目录 1.CentOS简介 2.CentOS ISO类型 3.CentOS7安装与配置 4.远程连接 1.CentOS简介 CentOS&#xff08;Community Enterprise Operating System&#xff0c;中文意思是社区企业操作系统&#xff09;是Linux发行版之一&#xff0c;它是来自于Red Hat Enterprise Linux依照…

代码随想录算法训练营第23期60天完结总结

这六十天在自己准备中期答辩、完成中期答辩中度过了 其实挺惭愧的&#xff0c;60天里&#xff0c;每天能塌下心来的时间每日递减&#xff0c;从打卡的情况上也能看出来。最后十天都是补打卡&#xff0c;每道题都是想了几分种&#xff0c;不会就开始看解析&#xff0c;然后凭着…

微软Copilot即将对大陆开放,一起来看看都有什么好用的功能

微软发布了Copilot&#xff0c;12月1日起对大陆用户开放&#xff0c;以下是Copilot的11个新功能&#xff0c;你一定不想错过&#xff1a;1. PowerPoint&#xff1a; 将Word文档转换为演示文稿。从文件中快速创建演示文稿。通过关键幻灯片总结冗长的演示文稿。使用提示添加新的…

基于MS16F3211芯片的触摸控制灯的状态变化和亮度控制总结版(11.22)

1.任务需求 基于MS16F3211芯片实现功能一个按键通过长按可以控制当前处于亮状态的灯的亮度&#xff0c;当灯从最亮达到最暗时&#xff0c;所用时为3s。现有三盏颜色分别为红绿蓝的灯&#xff0c;在处于关机状态时红灯亮&#xff0c;处于开机状态时红灯灭。点按第一次仅绿灯亮&…

postgresql新增非空默认值字段是否需要重写表

简介&#xff1a; PostgreSQL 10 版本前表新增不带默认值的DDL不需要重写表&#xff0c;只需要更新数据字典&#xff0c;因此DDL能瞬间执行&#xff0c;如下: ALTER TABLE table_name ADD COLUMN flag text; 如果新增的字段带默认值&#xff0c;则需要重写表&#xff0c;表越大…

mysql使用--数据的插入,删除和更新

1.UNION合并多个结果集 如&#xff1a;SELECT m1, n1 FROM t1 WHERE m1 < 2 UNION SELECT m2, n2 FROM t2 WHERE m2 > 2; 默认下&#xff0c;某行在参与合并两个结果集均存在时&#xff0c;最终结果集中只包含一行。 如希望最终结果集包含两行&#xff0c;用UNION ALL。 …

慕尼黑电子展Samtec Demo | 回环测试带来Samtec产品组合优异表现

【摘要/前言】 大家好&#xff01;Electronica虎家展台Demo系列回来咯。 实践出真知&#xff0c;再好的纸面数据都不如来一场实际的测试和演示。Samtec团队始终在努力为客户带来卓越的产品和优质服务。而这其中&#xff0c;Demo演示的存在至关重要。演示过程可以为大家带来了…

关于Flink的旁路缓存与异步操作

1. 旁路缓存 1. 什么是旁路缓存? 将数据库中的数据,比较经常访问的数据,保存起来,以减少和硬盘数据库的交互 比如: 我们使用mysql时 经常查询一个表 , 而这个表又一般不会变化,就可以放在内存中,查找时直接对内存进行查找,而不需要再和mysql交互 2. 旁路缓存例子使用 dim层…

Vue-报错No “exports“ main defined in xx

vue报错&#xff1a;No "exports" main defined in F:\wjh\vue#Practice\EasyQuestionnaire-web-master\EasyQuestionnaire-web-master\node_modules\babel\helper-compilation-targets\package.json 1.在文件中找到该路径的package.json文件&#xff0c; 2.按照提示…

人工智能:拥抱未来之手

人工智能对我们的生活影响有多大 人工智能给我们的生活带来了巨大的影响&#xff01;它像魔术师一样&#xff0c;帮我们解决问题、提供建议&#xff0c;甚至预测未来。从智能手机到智能家居&#xff0c;人工智能让我们的生活变得更便捷、更智能。它是我们生活中的得力助手&…

MEMS制造的基本工艺——晶圆键合工艺

晶圆键合是一种晶圆级封装技术&#xff0c;用于制造微机电系统 (MEMS)、纳米机电系统 (NEMS)、微电子学和光电子学&#xff0c;确保机械稳定和气密密封。用于 MEMS/NEMS 的晶圆直径范围为 100 毫米至 200 毫米&#xff08;4 英寸至 8 英寸&#xff09;&#xff0c;用于生产微电…

java序列化与反序列化

java中序列化与反序列化 概念 在Java中&#xff0c;序列化是指将对象转换为字节流的过程&#xff0c;而反序列化则是将字节流转换回对象的过程。序列化和反序列化通常用于在网络上传输对象或将对象持久化到磁盘上。 要对一个对象进行序列化&#xff0c;可以使用ObjectOutput…

github访问失败

1. 问题场景 今天了解到notepad可以安装许多插件&#xff0c;但是自动下载插件时总是失败&#xff0c;这些插件的下载源都是github&#xff0c;将地址复制到浏览器也打不开&#xff0c;所以查了下github的访问问题&#xff0c;目前插件已正常下载。 2. 解决方法 gitee上搜索…

facebook如何群发小组贴

Facebook是一款非常流行的社交媒体平台&#xff0c;它可以让人们与朋友、家人和同事进行交流和分享。在Facebook上&#xff0c;用户可以加入各种小组&#xff0c;与志同道合的人交流和分享。而群发小组贴是一种在小组内发布消息的方式&#xff0c;让小组的成员都能够收到消息。…