#constraint-programming #minizinc
#программирование ограничений #minizinc
Вопрос:
Я пытаюсь решить свою проблему, и я использовал код Хакана в качестве примера отсюда http://hakank.org/minizinc/scheduling_with_multiple_workers.mzn
Я не знаю, что именно означает эта часть кода, где machine[t]=m
. Кто-нибудь может объяснить мне эту часть?
forall(m in 1..num_machines) (
% check the memory of the times when a task is run on the machine
forall(tt in 1..max_time) (
machine_used_ram[m,tt] = sum([memory[t]*(machine[t]=m)*(tt in start_time[t]..end_time[t]) | t in 1..num_tasks])
Комментарии:
1. Это логическое значение сравнения. Вы можете увидеть объяснение в комментарии: суммируйте только память, когда задача была на этом компьютере.
Ответ №1:
(machine[t]=m)
является логическим выражением, преобразованным в 1
, если machine[t]
равно m
. В противном случае это так 0
.
Итак, (machine[t]=m)*(tt in start_time[t]..end_time[t])
выбираются все значения памяти для суммирования, которые принадлежат машине и времени внешних forall
циклов.
Комментарии:
1. Я хотел бы задать вам еще один вопрос. Что означает «сумма» в этой же строке? Я знаю, что это что-то «суммирует», но что?
2.
[memory[t]*(machine[t]=m)*(tt in start_time[t]..end_time[t]) | t in 1..num_tasks]
представляет собой массивnum_tasks
элементов, по одному для каждого значенияt
от1
доnum_tasks
.sum()
добавляет их все.