Home > Mobile >  Set a ListMoveChange filter when using OptaPlanner Spring Boot starter
Set a ListMoveChange filter when using OptaPlanner Spring Boot starter

Time:05-10

We are using the OptaPlanner Spring Boot starter to create a vehicle routing problem solver based on the example in the OptaPlanner quickstarts:

https://github.com/kiegroup/optaplanner-quickstarts/tree/stable/use-cases/vehicle-routing

So we do not have an solveConfig.xml file. We would like to define a filter for ListChangeMoves but it's not clear how we would register this without using an XML file. We have tried using a solverConfig.xml e.g.

<localSearch>
  <unionMoveSelector>
    <listChangeMoveSelector>
      <filterClass>my.filter.Class</filterClass>
    </listChangeMoveSelector>
  </unionMoveSelector>
</localSearch>

But this is not working. Is there an example of setting up a filter for list moves?

CodePudding user response:

This is a XML solver config using a a swap move selector and a change move selector with move filtering:

  <constructionHeuristic/>
  <localSearch>
    <unionMoveSelector>
      <changeMoveSelector>
        <filterClass>org.acme.vehiclerouting.solver.ChangeMoveSelectorFilter</filterClass>
      </changeMoveSelector>
      <swapMoveSelector/>
    </unionMoveSelector>
  </localSearch>

If you don't want to use swap moves, then you don't need the union move selector and the configuration can be simplified to:

  <constructionHeuristic/>
  <localSearch>
    <changeMoveSelector>
      <filterClass>org.acme.vehiclerouting.solver.ChangeMoveSelectorFilter</filterClass>
    </changeMoveSelector>
  </localSearch>

A few comments:

  • I'm including the CH phase because it is necessary in a typical case. See OptaPlanner terminates immediately if I add constructionHeuristic config for an explanation.
  • The ChangeMoveSelector is automatically configured to produce ListChangeMoves if the planning entity has a @PlanningListVariable. There is no <listChangeMoveSelector> config element.
  • More information including how to implement the move selection filter can be found in the documentation.
  • Related