1.4组合优化.doc

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
1.4组合优化

1. 4 组合优化 组合优化问题在实践中有着广泛的应用,同时也是计算机科学中的重要研究课题。本章对于八皇后问题、SAT问题、装箱问题、背包问题及TSP问题等五个经典的组合优化问题,给出其定义、串行算法描述、并行算法描述以及并行算法的MPI源程序。 1.1 八皇后问题 1.1.1 八皇后问题及其串行算法 所谓八皇后问题(Eight Queens Problem),是在8*8格的棋盘上,放置8个皇后。要求每行每列放一个皇后,而且每一条对角线和每一条反对角线上最多只能有一个皇后,即对同时放置在棋盘的任意两个皇后和,不允许或者的情况出现。 八皇后问题的串行解法为如下的递归算法: 算法16.1 八皇后问题的串行递归算法 /* 从chessboard的第row行开始放置皇后 */ procedure PlaceQueens(chessboard, row) Begin if row 8 then OutputResult(chessboard) /* 结束递归并输出结果 */ else for col = 1 to 8 do /* 判断是否有列、对角线或反对角线冲突 */ (1)no_collision = true (2)i = 1 (3)while no_collision and i row do (3.1)if collides(i, chessboard[i], row, col) then no_collision = false end if (3.2)i = i + 1 end while (4)if no_collision then (4.1)chessboard[row] = col /* 在当前位置放置一个皇后 */ (4.2)go(step + 1, place) /* 递归地从下一行开始放置皇后 */ end if end for end if End /* PlaceQueens */ 1.1.2 八皇后问题的并行算法 该算法是将八皇后所有可能的解置于相应的棋盘上,主进程负责生成初始化的棋盘,并将该棋盘发送到某个空闲的从进程,由该从进程求出该棋盘上满足初始化条件的所有的解。这里,我们假定主进程只初始化棋盘的前两列,即在棋盘的前两列分别放上2个皇后,这样就可以产生8 * 8 = 64个棋盘。 算法16.2八皇后问题的并行算法 (1)主进程算法 procedure EightQueensMaster Begin (1)active_slaves = n (2)while active_slaves 0 do (2.1)从某个从进程i接收信号signal (2.2)if signal = Accomplished then从从进程i接收并记录解end if (2.3)if has_more_boards then (ⅰ)向从进程i发送NewTask信号 (ⅱ)向从进程i发送一个新棋盘 else (ⅰ)向从进程i发送Terminate信号 (ⅱ)active_slaves = active_slaves - 1 end if end while End /* EightQueensMaster */ (2)从进程算法 procedure EightQueenSlave Begin (1)向主进程发送Ready信号 (2)finished = false (3)while not finished do (3.1)从主进程接收信号signal (3.2)if signal = NewTask then (ⅰ)从主进程接收新棋盘 (ⅱ)if 新棋盘合法 then 在新棋盘的基础上找出所有合法的解,并将解发送给主进程 end if else /* signal = Terminate */ finished = true end if end while End /* EightQueenSlave */ MPI源程序请参见章末附录。 1.2 SAT问题 1.2.1 SAT问题及其串行算法 1.SAT问题描述 所谓可满足性问题(Satisfiability Problem)即SAT问题,其定义为:对于一个命题逻辑公式,是否存在对其变元的一个真值赋值公式使之成立。这个问题在许多领域都有着非常重要的意义,而且对其快速求解算法的研究成为计算机科学的核心课题之一。例如在机器定理证明领域,某命题是否是一个相容的公理集合的推论,这个问题归结为该命题的反命题与该公理集合一起是否是不可满足的

文档评论(0)

youbika + 关注
实名认证
内容提供者

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

1亿VIP精品文档

相关文档