optaplanner объекты недвижимого планирования

1

Я работаю с 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 или в самом классе?

Спасибо за помощь.

Теги:
optaplanner

1 ответ

1

Отрегулируйте BedDesignationPillarPartSwapMoveFactory чтобы пропустить объекты (BedDesignations), которые не могут перемещаться (например, если они isLocked() == true).

Или еще лучше: не используйте BedDesignationPillarPartSwapMoveFactory, просто перейдите с универсальными переключателями перемещения: changeMove, swapMove, pillarChangeMove и pillarSwapMove. Столбец теперь выбирает субпанели в 6.2, но я еще не тестировал, если это дает лучшие результаты на этом примере (я полагаю, это будет), что может привести к тому, что пользовательский перенос фабрики станет устаревшим.

  • 0
    Спасибо за ваш ответ. Я изменил файл конфигурации для работы с общим движением. Неподвижные объекты планирования теперь действительно неподвижны. Но какая конфигурация для unionMoveSelector лучше (changeMove, swapMove, pillarChangeMove или pillarSwapMove)? Тем не менее, проблема счета все еще там. Неподвижные объекты планирования оцениваются как подвижные объекты.
  • 0
    Имеет ли значение, что недвижимые объекты оцениваются как подвижные объекты? Это фиксированная стоимость, которая никогда не меняется во время планирования, поэтому она не меняет лучшее найденное решение, если его там не было. Кроме того, учтите ограничение оценки, согласно которому ни один объект не должен конфликтовать. Если 1 неподвижен, а другой - нет, вы все равно захотите, чтобы он сработал.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню