Некоторая ошибка в моем коде, которую я не могу понять

Я использовал minizinc, чтобы запрограммировать код планирования смены, указанный ниже. Однако произошла ошибка с сообщением об ошибке: MiniZinc: ошибка типа: не найдено ни функции, ни предиката с этой сигнатурой: `forall (array [int] of var int) '

Я хотел бы посеять вашу помощь, чтобы выяснить причину. Большое спасибо

include "globals.mzn";
include "regular.mzn";
int: No_Shift = 7 ;
int: Hour = 24 ;
int: Cap = 30 ;

array[1..No_Shift , 1..Hour] of int: Shift_Available = [|1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
 |0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,0,0,
 |0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,0,0,0,
 |0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
 |0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,0,0,0,
 |0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0,0,0,0,0,0,
 |0,0,0,0,0,0,0,0,0,0,0,0,0,1,1,1,1,1,1,1,1,0,0,0|];
 array[1..Hour] of int: Demand = [10,8,12,16,18,25,28,30,30,30,30,25,26,27,30,30,30,30,26,22,17,14,10,8];
 array[1..No_Shift] of var 0..30: Shift_Assigned;

 constraint forall(i in 1..No_Shift)(Shift_Assigned[i]>=0);
 constraint forall(i in 1..Hour)( 
                   sum(j in 1..No_Shift)
                          (Shift_Assigned[j]*Shift_Available[j,i])<=Cap);

 solve minimize forall(i in 1..Hour)(
                       sum(j in 1..No_Shift)
                          (Shift_Assigned[j]*Shift_Available[j,i])-Demand[i]);

person Carson    schedule 22.07.2019    source источник


Ответы (1)


Проблема в том, что вы используете forall в определении цели оптимизации. AFAIK, это не поддерживается.

Обратите внимание, что вы можете перебирать как i, так и j из sum следующим образом:

solve minimize sum(i in 1..Hour, j in 1..No_Shift)
  (Shift_Assigned[j] * Shift_Available[j,i] - Demand[i]);
person Patrick Trentin    schedule 23.07.2019
comment
Привет, Патрик, спасибо за ваш комментарий. Ошибка была исправлена ​​после использования вашей рекомендации. Однако вывод для массива Shift_Assigned был [0,0,0,0,0,0,0], кажется, код необходимо доработать. Но еще раз спасибо! - person Carson; 24.07.2019
comment
@Carson Рад, что это помогло. Вопрос не содержит подробностей о решаемой проблеме, поэтому я ничем не могу помочь. - person Patrick Trentin; 24.07.2019