[英]optaplanner immovable planning entities
我正在与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不会移动不动的实体。 但是如何? 在配置xml文件中还是在类本身中?
谢谢您的帮助。
调整BedDesignationPillarPartSwapMoveFactory
以跳过不可移动的实体( BedDesignations
)(例如,如果它们是isLocked() == true
)。
或更妙的是:根本不使用BedDesignationPillarPartSwapMoveFactory,而要使用通用的移动选择器:changeMove,swapMove,stallChangeMove和columnSwapMove。 现在,支柱移动选择了6.2中的子支柱,但是我还没有测试过该示例是否可以提供更好的结果(我相信会),这可能会使自定义移动工厂过时。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.