2015-02-10 3 views
1

Я работаю с 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 не перемещает неподвижные объекты. Но как ? В файле конфигурации xml или в самом классе?

Благодарим за помощь.

ответ

1

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

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

+0

Благодарим вас за ответ. Я изменил конфигурационный файл для работы с общим движением. Объекты недвижимого планирования сейчас действительно неподвижны. Но какая конфигурация для unionMoveSelector лучше (changeMove, swapMove, pillarChangeMove или pillarSwapMove)? Однако проблема с оценкой все еще существует. Объекты недвижимого планирования оцениваются как движимые объекты. – Bibou3618

+0

Имеет ли значение, что недвижимые сущности - это счет, как подвижные сущности? Это фиксированная стоимость, которая никогда не изменяется во время планирования, поэтому она не меняет наилучшего найденного решения, если оно там не было. Кроме того, рассмотрите ограничение оценки, которое не должно конфликтовать 2 субъекта. Если 1 неподвижна, а другая нет, вы все равно хотите, чтобы она срабатывала. –

+0

Что касается того, какая конфигурация лучше, см. Главу о Benchmarker (и мое последнее видео на youtube об этом). –

Смежные вопросы