zoukankan      html  css  js  c++  java
  • 回溯与分支限界

    代价函数
      —当前取得的价值+后面可以取得的最大价值

      —如果这个价值比之前得到的路径的价值的最大值都小的话,那么这个分支不再需要继续延伸

    分支策略
      —分支较少的结点先展开

      —预计可以得到较多解的结点先展开

         

      —每个节点的代价函数会有多个
        —下一步解空间的计算Sk:如果直接越界了那么就不需要展开这个结点
        —代价函数:如果比较小的话这个结点也不需要展开

    对称性
      —比如n皇后问题,可以又中线纵轴分成等价的两部分的搜索空间

    搜索顺序
      —对关键词从小到大
      —对关键词从大到小
      —更换关键词,选择新的搜索方法

        —装箱问题中,可以以箱子的角度来回溯,也可以按货物的角度来回溯

          —先选择物品(从小到大或者从大到小),然后顺序选择一个箱子(对称性剪枝)
          —先选择箱子,尽量把一个箱子装满

    问题:
    具体要实施对称性的时候,应该怎么严密的考虑,并且代码如何实现——搜索范围?
    Monte Carlo方法具体内容再看一下

    分支限界

      —装载问题:两艘船,有多个集装箱,问能否有一种方案把所有集装箱都装在船上

        —界限函数:尽可能将第一艘船装满

          —当前选择装入第一艘船的集装箱和后面所有的货物都装继续装入第一艘船

          —当前选择的集装箱的总和不能超过第一艘船的容量

          —上面第一条的结果,如果比当前找到的方案的最大值小的话,不需要继续分支下去

        —这个题目剪枝的启示是:

          —假设后面全部选择,看能不能超过现在的最优解,不需要排序,以为后面的内容都被加进来了

          —条件性界限:不能超过船的容量

        —使用LCBB来选择下一个扩展结点  

          —最大优先队列分支限界法

      —多阶段图搜索问题

        —界限函数的设定

          —这里是一个最小化问题

          —不知道后面路径的确切的最小值,那么直接设置每一步为1(正整数权值最小)

          —搜索深度也选择最小的可能,比如这里只需要再往下找一层即可

        —使用LCBB:最小优先队列分支限界法

              

       —费用矩阵法

        —选择某个元素,那么这行这列删去

          —在这个元素选取的情况下,如果需要阻止反向边不存在,那么反向结点设置成无穷

          —化简费用矩阵:

            —看删去的行和列中,有没有删去别的0,它所在的行和列可能出现可以化简的情况

        —不选某个元素,这个节点变为无穷,并且化简费用矩阵

          —如果变为无穷的节点本来是0的话,可能它所在的行和列出现了可以化简的情况

  • 相关阅读:
    mysql find_int_set
    PHPSTROM8.0 注册码(7.1也可用)
    gym 101657 D
    gym101657 C
    poj 3525
    poj1279
    poj3335
    poj 1228
    poj 1873
    poj 2074
  • 原文地址:https://www.cnblogs.com/siyudemo/p/3136843.html
Copyright © 2011-2022 走看看