ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

人员安排问题--搜索算法的剪支方法应用

2020-09-01 21:33:24  阅读:230  来源: 互联网

标签:... -- 元素 矩阵 搜索算法 剪支 Jj 序列 代价


问题定义

       输入:

  • 人的集合P = {P1,P2,...,Pn},其中,P1<P2<...<Pn
  •  工作的集合J = {J1,J2,...,Jn},J是偏序集合,也就是说,J中某些元素之间存在序关系
  • 矩阵[Cij],Cij表示工作Jj分配给Pi的代价

       输出:

  • 每个人都被分配到某一工作,不同人分配到不同工作,且满足以下条件:如果F(Pi) ≤ F(Pj),那么Pi<Pj。其中,F:P→J,表示p被分配给工作j。
  • 矩阵[Xij],Xij = 1表示Jj分配给Pi,Σ

分析以及生成解空间

      定义1:J的拓扑序列<JK1,JK2,...JKn>。满足,如果 J≤ Jj,那么Ji排在Jj

      命题1:如果P1→Jk1,P2→Jk2,..,Pn→Jkn是一个可能 解, 当且仅当Jk1,Jk2,...,Jkn必是一个J的拓朴排序的序列。

      证明1:显然,依据问题的定义可以直接证明得到。

 

      拓扑排序树问题

      输入:偏序集合J

      输出:J的拓扑序列树,即用树表示所有的拓扑排序序列<JK1,JK2,...JKn>。满足,如果 J≤ Jj,那么Ji排在Jj

 

 

输入: 偏序集合S, 树根root.
输出: 由S的所有拓朴排序序列构成的树.
生成树根root;
选择偏序集中没有前序元素的所有元素, 作为root的子节点;
For root的每个字节点v Do
     S=S-{v};
把v作为根, 递归地处理S

 

      拓扑序列树的例子

 

 

分支界限搜索方法

        该问题变为对拓扑序列树的最大权值序列的搜索问题。

        命题2,把代价矩阵某行(列)的各元素减去同一个 数, 不影响优化解的求解,同时,所有被减去元素的和 + 某一序列对于当前权值矩阵计算的和 =  该序列对于原权值矩阵计算的和,且将所有被减去元素的和定义为解的代价下界。

        证明2,该序列仅仅在权值矩阵的每一行(列)选取一个元素,也必会选取一个元素,那么,把代价矩阵某行(列)的各元素减去同一个数,并不会影响对于该行(列)元素的选取。

        技巧1,代价矩阵的每行(列)减去同一个数(该行或列的最小数), 使得每行和每列至少有一个零, 其余各元素非负。

       

 

 

 

 

       搜索算法可以定义为:

  • 建立根节点,,其权值为解代价下界:技巧1中所有被减去元素的和;
  • 使用爬山法, 求解出当前算法的某个代价较小的可行解, 计算代价方法为:每产生一个节点,,其权值为加工后的代价矩阵对应元素加其父节点权值;
  • 当发现某个可行解时,遍历所有的解,在这一过程中,不断较低界限以及根据界限删去不可能是优化解的部分(剪支)。

 

标签:...,--,元素,矩阵,搜索算法,剪支,Jj,序列,代价
来源: https://www.cnblogs.com/zqybegin/p/13598677.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有