投资问题(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