Estou trabalhando em um modelo de horários e tenho que minimizar o total de horas perdidas. Para todos os dias, de segunda a sábado, tenho uma matriz de var, por exemplo [0, 1, 0, 0, 1, 1], o que significa que um trabalhador está trabalhando no segundo, quinto e sexto intervalo de tempo (normalmente uma hora) . Preciso contar quantos 0 existem entre o primeiro 1 e o último 1 no array (2 no exemplo acima).
Se eu usar o seguinte código:
array[1..6] of var 0..1: arr = [0, 1, 0, 0, 1, 1];
function int: waste(array[int] of var 0..1: x) = if (sum(x)==0) then 0 else count(x[arg_max(x)+1..length(x)-arg_max(reverse(x))],0) endif;
output ["wasted hours = \(waste(arr ))"];
recebo o erro: MiniZinc: type error: no function or predicate with this signature found: `arg_max(array[int] of var int)'
Se eu adicionar a linha inclua "arg_max.mzn":
include "arg_max.mzn";
array[1..6] of var 0..1: arr = [0, 1, 0, 0, 1, 1];
function int: waste(array[int] of var 0..1: x) = if (sum(x)==0) then 0 else count(x[arg_max(x)+1..length(x)-arg_max(reverse(x))],0) endif;
output ["wasted hours = \(waste(arr))"];
então recebo outro erro: MiniZinc: type error: array slicing with variable range or index not supported
Existe uma maneira de corrigir o erro e calcular as horas perdidas?