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