[小学教育]数学建模-整数规划.pptVIP

  • 10
  • 0
  • 约6.3千字
  • 约 45页
  • 2018-02-28 发布于浙江
  • 举报
[小学教育]数学建模-整数规划

数学建模 指派问题的计算机解法 整数规划问题的求解可以使用Lingo等专用软件。对于一般的整数规划问题,无法直接利用Matlab的函数,必须利用Matlab编程实现分枝定界解法和割平面解法。但对于指派问题等特殊的整数规划问题有时可以直接利用Matlab的函数linprog。 例: 求解下列指派问题,已知指派矩阵为 解:编写Matlab程序如下: c=[3 8 2 10 3;8 7 2 9 7;6 4 2 7 5; 8 4 2 3 5;9 10 6 9 10]; c=c(:); %把矩阵c转化为向量 a=zeros(10,25); for i=1:5 %实现循环运算 a(i,(i-1)*5+1:5*i)=1; a(5+i,i:5:25)=1; end %此循环把指派问题转化为线性规划问题 b=ones(10,1); [x,y]=linprog(c,[],[],a,b,zeros(25,1),ones(25,1)); X=reshape(x,5,5) opt=y 求得最优指派方案为 ,最优值为21。 指派问题的匈牙利解法的一般步骤 第一步:变换指派问题的系数(也称效率)矩阵(cij)为(bij),使在(bij)的各行各列中都出现0元素,即 (1) 从(cij)的每行元素都减去该行的最小元素; (2) 再从所得新系数矩阵的每列元素中减去该列的最小元素。 第二步:进行试指派,以寻求最优解。 在(bij)中找尽可能多的独立0元素,若能找出n个独立0元素,就以这n个独立0元素对应解矩阵(xij)中的元素为1,其余为0,这就得到最优解。找独立0元素,常用的步骤为: (1)从只有一个0元素的行(列)开始,给这个0元素加圈,记作◎ 。然后划去◎ 所在列(行)的其它0元素,记作? ;这表示这列所代表的任务已指派完,不必再考虑别人了。 (2)给只有一个0元素的列(行)中的0元素加圈,记作◎;然后划去◎ 所在行的0元素,记作? . (3)反复进行(1),(2)两步,直到尽可能多的0元素都被圈出和划掉为止。 (4)若仍有没有划圈的0元素,且同行(列)的0元素至少有两个,则从剩有0元素最少的行(列)开始,比较这行各0元素所在列中0元素的数目,选择0元素少的那列的这个0元素加圈(表示选择性多的要“礼让”选择性少的)。然后划掉同行同列的其它0元素。可反复进行,直到所有0元素都已圈出和划掉为止。 (5)若◎ 元素的数目m 等于矩阵的阶数n,那么这指派问题的最优解已得到。若m n, 则转入下一步。 第三步:作最少的直线覆盖所有0元素。 (1)对没有◎的行打√号; (2)对已打√号的行中所有含?元素的列打√号; (3)再对打有√号的列中含◎ 元素的行打√号; (4)重复(2),(3)直到得不出新的打√号的行、列为止; (5)对没有打√号的行画横线,有打√号的列画纵线,这就得到覆盖所有0元素的最少直线数 l 。l 应等于m,若不相等,说明试指派过程有误,回到第二步(4),另行试指派;若 l=m n,须再变换当前的系数矩阵,以找到n个独立的0元素,为此转第四步。 第四步:变换矩阵(bij)以增加0元素。 在没有被直线覆盖的所有元素中找出最小元素,然后打√各行都减去这最小元素;打√各列都加上这最小元素(以保证系数矩阵中不出现负元素)。新系数矩阵的最优解和原问题仍相同。转回第二步。 任务 人员 A B C D 甲 2 15 13 4 乙 10 4 14 15 丙 9 14 16 13 丁 7 8 11 9 匈牙利解法的实例 -2 -4 -9 -7 第一步:变换指派问题的系数矩阵(cij)为(bij),使在(bij)的各行各列中都出现0元素,即 (1) 从(cij)的每行元素都减去该行的最小元素; (2) 再从所得新系数矩阵的每列元素中减去该列的最小元素。 -4 -2 ◎ ? ◎ ? ? ◎ ◎ 第二步:进行试指派,以寻求最优解。 在(bij)中找尽可能多的独立0元素,若能找出n个独立0元素,就以这n个独立0元素对应解矩阵(xij)中的元素为1,其余为0,这就得到最优解。找独立0元素,常用的步骤为: (1)从只有一个0元素的行(列)开始,给这个0元素加圈,记作◎ 。然后划去◎ 所在列(行)的其它0元素,记作? ;这表示这列所代表的任务已指派完,不必再考虑别人了。 (2)给只有一个0元素的列(行)中的0元素加圈,记作◎;然后

文档评论(0)

1亿VIP精品文档

相关文档