Я реализую простую модель в Minizinc для планирования задач с различным приоритетом и продолжительностью в серии временных интервалов, но не все задачи могут быть запланированы, поэтому некоторые из них будут упущены, а я пытаясь максимизировать сумму приоритетов запланированных задач.Стратегия поиска с необязательными переменными
У меня есть рабочая версия, где задачи определены в массиве варов, а задачи без запланированного задания имеют время 0. Ограничения содержат несколько аргументов where, чтобы принимать во внимание только запланированные задачи (когда [i]> 0). Стратегия поиска по умолчанию очень медленная, поэтому я изменил ее на другую, которая работала намного лучше, используя Gecode в качестве решателя.
Теперь я реализую другую версию, используя необязательные переменные, чтобы избавиться от предложений where, чтобы проверить, есть ли какие-либо улучшения. Однако, по-видимому, я не могу определить стратегию поиска int_search() при использовании opt var.
Есть ли способ сделать это?
Рабочая модель выглядит следующим образом (в решениях пункта со стратегией поиска Я хочу попробовать закомментировано):
int: numtasks=100;
int: numslots=100;
set of int: TASK=1..numtasks;
set of int: SLOT=1..numslots;
array[TASK] of var opt 1..numslots: when;
array[TASK] of int: duration = [(i mod 3)+1 | i in TASK];
array[TASK] of int: prio = [(i mod 10)+1 | i in TASK];
include "globals.mzn";
constraint disjunctive(when, duration);
var int: obj = sum(i in TASK where not absent(when[i]))(prio[i]);
%solve ::int_search(when, input_order, indomain_random, complete) maximize obj;
solve maximize obj;
output [show(obj)," ",show(when)];
Thank you. Исай, как работает «происходит». Что касается стратегии поиска, я попробовал несколько комбинаций, но, похоже, лучше всего быстро получить решение и улучшить его. Другая стратегия поиска, которая отлично работает (которую я удалил для простоты), состоит в том, чтобы обеспечить сортировку массива 'when' путем уменьшения приоритета и использования input_order, так как ожидается, что приоритетные задачи запланированы чаще, чем low-prio. У меня также возникают проблемы, если я увеличиваю количество задач и слотов (1000, 1000), он сбой или использует всю мою оперативную память. Думаю, я попрошу об этом в другом вопросе. – siritinga