Можно ли в MiniZinc применить более одного «решения»?

Я попытался применить следующую структуру в одном файле mzn:

define Variables;

%% first set of constraints
constraint ...;
constraint ...;
solve satisfy;

%% second set of constraints
constraint ...;
constraint ...;
solve satisfy;

где второй набор ограничений — это ограничения, применяемые к результатам первого solve, выполнение операций по отдельности уменьшит пространство поиска, а значит, уменьшит время вычислений, что является причиной, по которой я придумал эту структуру в первую очередь.

Есть ли способ реализовать такую ​​структуру зависимости? Поскольку MiniZinc не позволяет использовать два solve.


person GabrielChu    schedule 05.05.2017    source источник


Ответы (1)


Как вы упомянули, для 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