Как вы упомянули, для MiniZinc требуется ровно один solve
в модели.
Существуют и другие подходы в зависимости от проблемы.
1) Напишите программу на другом языке программирования, которая запускает первые модели MiniZinc и получает результат. Затем вы можете создать (во время выполнения) другую модель MiniZinc, которая выполняется с предыдущим результатом. Это подход, который я сам, вероятно, использовал бы.
Разрабатываемые версии MiniZinc включают в себя интерфейс к Python, который может упростить эту задачу. Однако я не проверял это.
2) Очень сильно зависит от конкретной проблемы, может быть возможно объединить две версии в одной модели. Например, если проблема имеет две цели, то вы можете иметь обе подзадачи в модели и комбинировать эти две цели, добавляя веса к целям, насколько важна каждая из целей подзадачи. Это «стандартный» способ обработки нескольких целей (многоцелей), который можно найти, например, в линейное программирование. Однако в MiniZinc нет специальной поддержки для этого.
(Одной связанной функцией, которую я хотел бы иметь в MiniZinc, является поддержка модели, которая сначала решает задачу, а затем генерирует все решения, удовлетворяющие этой цели. Это невозможно в сегодняшнем MiniZinc. Однако экспериментальное расширение MiniSearch для MiniZinc, < href="http://www.minizinc.org/minisearch/" rel="nofollow noreferrer">http://www.minizinc.org/minisearch/ может сделать это возможным, по крайней мере, согласно разработчиков.. Хотя у меня никогда не получалось это работать...)
person
hakank
schedule
07.05.2017