数学建模 匈牙利算法求解整数规划基本原理与编程实现

Posted DQ_CODING

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数学建模 匈牙利算法求解整数规划基本原理与编程实现相关的知识,希望对你有一定的参考价值。

投资问题(0-1规划)

匈牙利算法求解0-1规划问题

解答:
项目之间是互斥关系,所以使用x1+x2+x3=1;
项目5是以项目1为先验条件,所以x5<=x1,意味着x1=1时,x5=1或0 ,但x1=0时,x5=0

案例- 互斥约束问题

1)当两个约束条件是互斥时,新建立一个约束条件y(0-1)
2)如果M取无穷大的数,此时就能让其中一项约束失去作用
3)这道题是说存在一个约束 4x1+5x2<=200和另一个约束3x1+5x2<=180,这两个约束互斥,所以引入一个新的约束M

互斥约束的推广
p-q=yi相加:在p个约束条件中选择q个

案例-固定费用问题


解答:
可变成本就是成本,利润=售价-可变成本


最终:
这里还存在一个问题:如果不租用每个产品对应的生产线,则不能够生产相应的产品
所以要引入M1(无穷大的数),检验x1,x2,x3是否有生产

案例-指派问题


解答:
1)因为每一个人可以选择四项工作中的一个,共有四个人,则一共有4*4=16项
所以,要使用二维数组的样式xij来表示第i个人是否做第j项工作

指派问题标准形式


数学模型

非标准形式的指派问题

增加新的约束或新的约束条件
1)
最大化指派问题:不是成本和时间最小化指派问题,而是利润最大化
使用最大元素-所有的值=新的指派系数
2)
人数和工作数不等,代价为0,xii的值为0
3)
一个人可做多件工作,几个相同的人,不做任何限制
4)
某工作一定不能由某人做,若x13=0,则设x13<=0

指派问题的匈牙利解法的一般步骤

1)系数矩阵:每个人做每项工作所需要付出的代价
2)aij->bij
变为所有的行和所有的列只有一个1,其余元素全为0,意味着整个矩阵的秩=4
第一步:

第二步:
1)独立0元素:行和列都不相等的0元素
2)
只有一个0元素的行,划掉所在列
只有一个0元素的列,划掉所在行

1)
如果还有0元素没有画圈,就找到最少的0元素的行或列
2)
画圈数目=矩阵的阶,指派问题的最优解已找到


第三步:

直线数l=画圈的数目m

第四步:
行减去min,列加上min,之后再回到第二步,去重复过程

匈牙利解法的实例1

解答:
第一步

第二步:
记住反复做

最后:
输出的矩阵:圈为1,其余为0
最优解=1所对应的原始矩阵元素相加

匈牙利解法的实例2

解答:
第一步和第二步:

第三步:

第四步:
加减最小得到新的指派矩阵,再重复第二步

重复第二步:
最优解=2+4+1+8=15

指派问题的matlab程序

1)向量方便后期计算
2)for循环,使所有的行取值为1,所有的列取值为1

以上是关于数学建模 匈牙利算法求解整数规划基本原理与编程实现的主要内容,如果未能解决你的问题,请参考以下文章

备战数学建模19-数学规划问题

数学建模 分支限界算法求解整数规划原理以及编程实现

数学建模:整数规划—指派模型与匈牙利算法

Python之建模规划篇--整数规划

路径规划基于蚁群算法实现机器人机器人路径规划

路径规划基于蚁群算法实现机器人机器人路径规划