vrp icon indicating copy to clipboard operation
vrp copied to clipboard

Can't set termination in solver builder

Open skyien opened this issue 4 years ago • 5 comments

In vrp-core/src/solver/builder.rs:

 pub fn with_termination(mut self, termination: Arc<dyn Termination + Send + Sync>) -> Self {
        self.config.telemetry.log("configured to use custom termination parameters");
        self.config.termination = termination;
        self
    }

but below in:

pub fn build(self) -> Result<Solver, String>

termination configuration overrides by this line:

config.termination = Arc::new(CompositeTermination::new(criterias));

skyien avatar Jan 21 '21 14:01 skyien

Yeah, it looks like I have to redesign a bit this method to make the library more usable from code. At the moment, I'm focusing mostly on usage from CLI interface, so there might be some inconsistency for different scenarios.

reinterpretcat avatar Jan 21 '21 21:01 reinterpretcat

@reinterpretcat, как Вы думаете имеет ли смысл идея, если реализовать критерий завершения по условию, что, например, в N последних генерациях не изменяются косты и количество неназначенных задач? Просто я смотрю, что в основном лучшее решение находится буквально 100-й генерации, а дальше никаких изменений.

skyien avatar Jan 22 '21 08:01 skyien

Вообще, конечно, подобное условие уже есть - cost variation на основе коэффициэнта вариации. Но по умолчанию оно будет работать немного неожиданно, т.к. оно включается для последней фазы поиска, когда алгоритм находится в режиме активного исследования локального оптимума (exploitation), который занимает последние 10 процентов времени исполнения. Мне кажется, что если разрешить его использование в режиме параллельного поиска новых локальных оптимумов (exploration), cost variation может остановить алгоритм слишком рано в некоторых случаях.

Самое простое решение сейчас - это использовать cost variation с search-mode=deep, который включает алгоритм поиска на основе механизма элитизма в режиме exploitation, вместо алгоритма диверсификации по умолчанию (rosomaxa). Недостаток - снизится возможность алгоритма находить другие локальные оптимумы.

См. документацию здесь: https://reinterpretcat.github.io/vrp/getting-started/solver.html#search-mode https://reinterpretcat.github.io/vrp/getting-started/solver.html#cost-variation

reinterpretcat avatar Jan 22 '21 08:01 reinterpretcat

Илья, благодарю за ответ! Видимо я невнимательно изучил документацию. Попробую этот вариант. И заодно хотелось бы Вас поблагодарить за Ваш проект!

skyien avatar Jan 22 '21 09:01 skyien

Спасибо за отзыв!

Этот момент недостаточно описан еще в документации, так как проект еще по-прежнему в своеобразном экспериментальном состоянии. Необходимо будет время, чтобы упорядочить и описать реализованные идеи.

reinterpretcat avatar Jan 22 '21 09:01 reinterpretcat