欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    运筹学指派问题的匈牙利法实验报告(共15页).docx

    • 资源ID:13757905       资源大小:199.69KB        全文页数:15页
    • 资源格式: DOCX        下载积分:20金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要20金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    运筹学指派问题的匈牙利法实验报告(共15页).docx

    精选优质文档-倾情为你奉上运 筹 学课程设计报告专业: 班级: 学号: 姓名: 2012年6月20日目录一、 题目。二、 算法思想。三、 算法步骤。四、 算法源程序。五、 算例和结果。六、 结论与总结。一、 题目:匈牙利法求解指派问题。二、 算法思想。匈牙利解法的指派问题最优解的以下性质:设指派问题的系数矩阵为C=,若将C的一行(或列)各元素分别减去一个常数k(如该行或列的最小元素),则得到一个新的矩阵C=。那么,以C位系数矩阵的指派问题和以C位系数矩阵的原指派问题有相同最优解。由于系数矩阵的这种变化不影响约束方程组,只是使目标函数值减少了常数k,所以,最优解并不改变。必须指出,虽然不比要求指派问题系数矩阵中无负元素,但在匈牙利法求解指派问题时,为了从以变换后的系数矩阵中判别能否得到最优指派方案,要求此时的系数矩阵中无负元素。因为只有这样,才能从总费用为零这一特征判定此时的指派方案为最优指派方案。三、 算法步骤。(1)变换系数矩阵,使各行和各列皆出现零元素。各行及各列分别减去本行及本列最小元素,这样可保证每行及每列中都有零元素,同时,也避免了出现负元素。(2)做能覆盖所有零元素的最少数目的直线集合。因此,若直线数等于n,则以可得出最优解。否则,转第(3)步。对于系数矩阵非负的指派问题来说,总费用为零的指派方案一定是最优指派方案。在第(1)步的基础上,若能找到n个不同行、不同列的零元素,则对应的指派方案总费用为零,从而是最优的。当同一行(或列)上有几个零元素时,如选择其一,则其与的零元素就不能再被选择,从而成为多余的。因此,重要的是零元素能恰当地分布在不同行和不同列上,而并在与它们的多少。但第(1)步并不能保证这一要求。若覆盖所有零元素的最少数目的直线集合中的直线数目是n,则表明能做到这一点。此时,可以从零元素的最少的行或列开始圈“0”,每圈一个“0”,同时把位于同行合同列的其他零元素划去(标记为),如此逐步进行,最终可得n个位于不同行、不同列的零元素,他们就对应了最优解;若覆盖所有零元素的最少数目的直线集合中的元素个数少于n,则表明无法实现这一点。需要对零元素的分布做适当调整,这就是第(3)步。(3) 变换系数矩阵,是未被直线覆盖的元素中出现零元素。回到第(2)步。在未被直线覆盖的元素中总有一个最小元素。对未被直线覆盖的元素所在的行(或列)中各元素都减去这一最小元素,这样,在未被直线覆盖的元素中势必会出现零元素,但同时却又是以被直线覆盖的元素中出现负元素。为了消除负元素,只要对它们所在的列(或行)中个元素都加上这一最小元素(可以看作减去这一最小元素的相反数)即可。四、 算法源程序。#include<iostream.h>#include<stdlib.h>#define m 5int input(int Mmm)int i,j;for(i=0;i<m;i+)cout<<"请输入系数矩阵第"<<i+1<<"行元素:"<<endl;for(j=0;j<m;j+) cin>>Mij;cout<<"系数矩阵为:"<<endl;for(i=0;i<m;i+)for(j=0;j<m;j+)cout<<Mij<<"t"cout<<endl;return Mmm;int convert(int Mmm)int xm,ym;int i,j;for(i=0;i<m;i+)xi=Mi0;for(j=1;j<m;j+) if(Mij<xi)xi=Mij;for(i=0;i<m;i+)for(j=0;j<m;j+)Mij-=xi;for(j=0;j<m;j+)yj=M0j;for(i=0;i<m;i+) if(Mij<yj)yj=Mij;for(i=0;i<m;i+)for(j=0;j<m;j+)Mij-=yj;cout<<"对系数矩阵各行各列进行变换得:"<<endl;for(i=0;i<m;i+)for(j=0;j<m;j+)cout<<Mij<<"t"cout<<endl;return Mmm;int exchange(int Mmm)int i,j,n;cout<<"进行行变换输入0,进行列变换输入其他任意键:"<<endl;cin>>n;if(n=0) cout<<"分别输入要变换的行及该行未覆盖元素中最小元素:"<<endl;elsecout<<"分别输入要变换的列及该列的最小元素:"<<endl;int a,b;cin>>a>>b;for(j=0;j<m;j+)if(n=0)Ma-1j-=b;elseMja-1-=b;cout<<"变换后的矩阵:"<<endl;for(i=0;i<m;i+)for(j=0;j<m;j+)cout<<Mij<<"t"cout<<endl;return Mmm;void main()int Mmm;cout<<"<<<<<<<<<<<<<<<<<<<匈牙利法解指派问题>>>>>>>>>>>>>>>>>>>> "<<endl;while(true) cout<<""<<endl;cout<<">>>>>>>>>>>>>>>> 菜单 <<<<<<<<<<<<<<<<"<<endl<<endl;cout<<" 1.系数矩阵输入 "<<endl;cout<<" 2.初始变换 "<<endl;cout<<" 3.行列变换 "<<endl;cout<<" 4.退出 "<<endl;cout<<"*"<<endl<<endl;int n;cout<<"请选择功能键"cin>>n;switch(n)case 1:input(M);break;case 2:convert(M);break;case 3: exchange(M);break;case 4:cout<<"谢谢使用!"<<endl;exit(0);break;default:cout<<"输入有误!请重新输入!"<<endl;五、 算例和结果。例412 今有甲、乙、丙、丁4个人去完成5项任务。每人完成各项任务所需的时间如表411所示。由于任务数多于人数,故规定其中有一人可兼完成两项任务,其余三人各完成一项任务。是确定总花费时间为最小的指派方案。(课本P113)表411 任务人ABCDE甲2529314137乙3938262033丙3427284032丁2442362345假设第5个人是戊,他完成各项任务的时间取甲、乙、丙、丁中的最小者,构造表412。表412 任务人ABCDE甲2529314137乙3938262033丙3427284032丁2442362345戊2427262032由表412可得到系数矩阵C1、将系数矩阵C输入程序。2、对系数矩阵各行各列减去最小元素,即程序中的初始变换。3、进行行变换 4、进行列变换 6、再次进行行变换 7、再次进行列变换 此时,已经不能用少于五根直线覆盖零元素,故此时为最优指派方案。最优指派方案是:甲做B,乙做C,丙做E,丁做A,戊做D,由于戊(虚拟的人)完成D的时间与乙相同,实际上最优指派方案是:乙完成C和D,甲、丙、丁分别完成B,E,A,总计时间为131。六、 结论和总结。匈牙利法解指派问题,其步骤简单易懂,操作起来也不难,可是由于计算量实在太大很容易出错,故利用程序来完成对系数矩阵的化简变换是再好不过的。只要确定输入,以及找出的覆盖集合无误,则计算结果就不会出错。由于时间仓促,我编的程序还有许多不足之处,比如说:在输入系数矩阵之前,需要事先定义二维数组的行及列。针对这个问题我尝试了好几次,也没有解决。查了一些资料,好像可以通过动态分配二维数组的空间大小来实现二维数组行和列的输入。本来我想实现程序对系数矩阵零元素的直线覆盖功能的,可操作起来实在太难,故改为手动操作。通过这次课程设计,我不仅对运筹学的知识进行了巩固,也发觉到了编程对数学的强大辅助功能。利用它可以解决好多数学问题,大大节省了时间及精力。学好数学和计算机是今后就业的重要筹码。专心-专注-专业

    注意事项

    本文(运筹学指派问题的匈牙利法实验报告(共15页).docx)为本站会员(飞****2)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开