分支限界法作业结果解析.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
分支限界法作业结果解析

分支限界法作业 1. 旅行商问题 设有n个城市,城市之间道路的长度均大于或等于0,还可能是∞(对应城市之间无交通线路)。一个旅行商从某个城市出发,要经过每个城市一次且仅一次,最后回到出发的城市,问他如何走才能使他走的路线最短? 要求:使用矩阵归约确定限界函数的方法,或者其他方法实现。 分析: 旅行商问题对应的解的元组为n元组,其中假设第一个城市为1,则n元组中未确定的为剩下n-1个城市,元组为(1,x2,…,xn),每个xi的取值为{2,…,n};约束条件为已经经过的城市不能再走,最后回到出发城市。目标函数是巡回旅行路线长度。 利用矩阵归约的方法确定限界函数: 限界函数:对任意路线上的结点d,设p是其前驱结点,则 f(d) = g(d) + h(d), 其中,g(d) = f(p) + C’p[p][d], h(d) = rd。C’p[p][d]是在p点规约后得到的矩阵中p点到d点的长度值,rd为d点可以归约掉的值。 算法1: (叶子结点进堆) Input:图G; Output:从源点1出发再回到1顶点的最短巡回旅行路线。 1. 设定目标函数的限界down=r1,up=∞ 2. 计算初始结点1的f(1)=r1,将初始结点插入最小堆H; 3. while (H ≠Φ) 4. { 5. 从H中做DELETEMIN的操作,用p带回相应结点; 6. If p是叶子结点 then 7. 输出当前最优值,并从叶子结点沿parent指针输出解,退出; 8. Else 9. { 产生p的所有满足约束条件的后继结点d(建树,建立指向parent的指针) 并计算f(d); if f(d)up then { 将d结点插入最小堆H中; if d是叶子结点 then { up=f(p); 删除活结点表(最小堆H)中函数值大于up值的结点; } } } 18. } 算法2: (叶子结点不进堆) Input:图G; Output:从源点1出发再回到1顶点的最短巡回旅行路线。 1. 设定目标函数的限界down=r1,up=∞ 2. 计算初始结点1的f(1)=r1,将初始结点插入最小堆H; 3. while (H ≠Φ) 4. { 5. 从H中做DELETEMIN的操作,用p带回相应结点; 6. 产生p的所有满足约束条件的后继结点d(建树,建立指向parent的指针) 并计算f(d); 7. while 对每个结点d 8. { if f(d)up then 9. { if d是叶子结点 then 10. { up=f(p); 11. 删除活结点表(最小堆H)中函数值大于up值的结点; 12. if (H=Φ) then 13. 从叶子结点沿parent指针输出解,退出; 14. } 15. else 将d结点插入最小堆H中; 16. } 17. } 18. } 2. 批处理作业问题 设J1, J2, J3, J4是四项待处理的作业,它们的工序一样,即先在m1上处理,然后在m2上处理,最后在m3上处理, 分析: 将问题推广到一般的n个作业,该问题对应的解的元组为n元组(x1,x2,…,xn),每个xi的取值为{1,…,n};约束条件为xi≠xj。 目标函数是sum3=max{sum2[n],sum3[n-1]}+tn3, 其中sum2[n]=max{sum1[n],sum2[n-1]}+tn2, Sum1[n]=sum1[n-1]+tn1。 限界函数:设M是已经安排好的作业集合,M({1, 2, ..., n}, |M|=k。现在要处理作业k+1,有: 其中sum1[k+1]=sum1[k]+ tk+1,1 sum2[k+1]=max{sum1[k+1], sum2[k]} + tk+1,2 目标函数的下限界down= Input:n个作业,及其在3台机器上的处理时间tij; Output:n个作业的最佳处理顺序及其处理时间。 1. 设定目标函数的限界down=,up=∞ 2. 计算初始结点1的sum1=0,sum2=0,db(1)=0,将初始结点插入最小堆H; 3. while (H ≠Φ) 4. { 5. 从H中做DELE

文档评论(0)

liwenhua00 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档