optaplanner不动产计划实体

时间:2015-02-10 08:28:14

标签: java optaplanner

我正在与Optaplanner合作解决类似于患者入院计划示例的问题。

我面临两个问题。

首先,当其中一个计划实体(类似于示例的bedDesignation)由某人(不是optaplanner)定位时,此计划实体的得分与其他实体一样。 手动放置的计划实体成为不可移动的计划实体,但仍然像可移动计划实体一样进行评分。因此,它打破了一些严格的约束。

其次,当其中一个计划实体(类似于bedDesignation)由某人(不是optaplanner)定位时,该计划实体在本地搜索阶段移动。 本地搜索阶段配置如下(与示例相同的配置):

  <localSearch>
    <unionMoveSelector>
      <moveListFactory>
        <moveListFactoryClass>org.optaplanner.examples.pas.solver.move.factory.BedDesignationPillarPartSwapMoveFactory</moveListFactoryClass>
      </moveListFactory>
    </unionMoveSelector>
    <acceptor>
      <entityTabuSize>7</entityTabuSize>
    </acceptor>
    <forager>
      <acceptedCountLimit>1000</acceptedCountLimit>
    </forager>
  </localSearch>

BedDesignationPillarPartSwapMoveFactory类与示例相同。 我在文档中读到,对于不可移动的计划实体,我们必须确保自定义moveListFactory不会移动不可移动的实体。但是怎么样?在config xml文件中还是在类本身中?

感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

调整BedDesignationPillarPartSwapMoveFactory以跳过不可移动的实体(BedDesignations)(例如,如果它们是isLocked() == true)。

或者更好的是:根本不使用BedDesignationPillarPartSwapMoveFactory,只需使用通用移动选择器:changeMove,swapMove,pillarChangeMove和pillarSwapMove。支柱移动现在选择6.2中的子支柱,但我还没有测试过,如果这个例子给出了更好的结果(我相信它会) - 这可能会使定制移动工厂过时。