Понимание minzinc

#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() добавляет их все.