OptaPlanner:pillarSwapMoveSelector 多个 variableNameInclude 元素

OptaPlanner: pillarSwapMoveSelector multiple variableNameInclude elements

我正在尝试在我的配置 XML 中指定一个 pillarSwapMoveSelector,它可以交换实体 class 的所有变量,这些变量不是链接变量(因为它们不兼容)随着柱子移动)。

根据 OptaPlanner 8.8.0.Final documentation,以下应该是有效的:

<pillarSwapMoveSelector>
    <pillarSelector>
        <entitySelector>
                <entityClass>a.fully.qualified.ClassName</entityClass>
        </entitySelector>
    </pillarSelector>
    <variableNameInclude>planningVariable1</variableNameInclude>
    <variableNameInclude>planningVariable2</variableNameInclude>
    <variableNameInclude>planningVariable3</variableNameInclude>
</pillarSwapMoveSelector>

好像不是。这是故意无效的吗?或者这只是文档的问题?

无论如何,如果它是一个错误,作为解决方法,您必须使用包装器来指定 variableNameIncludes:

的集合
<pillarSwapMoveSelector>
    <pillarSelector>
        <entitySelector>
            <entityClass>a.fully.qualified.ClassName</entityClass>
        </entitySelector>
    </pillarSelector>
    <variableNameIncludes>
        <variableNameInclude>planningVariable1</variableNameInclude>
        <variableNameInclude>planningVariable2</variableNameInclude>
        <variableNameInclude>planningVariable3</variableNameInclude>
    </variableNameIncludes>
</pillarSwapMoveSelector>

感谢您的报告;如您所料,这是文档中的一个问题。这是 OptaPlanner 8 中引入的更改之一。文档将很快更新以反映这一点。

我还要提一下 OptaPlanner 8 中引入的另一件事,即求解器和基准配置的 XML 模式定义。如果按如下方式声明 solver 元素:

<solver xmlns="https://www.optaplanner.org/xsd/solver" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="https://www.optaplanner.org/xsd/solver https://www.optaplanner.org/xsd/solver/solver.xsd">

您可以在任何支持 XSD 的 IDE 中使用代码完成和验证。