我正在研究一个关于时间表的模型,我必须尽量减少浪费的总时间。从周一到周六的每一天,我都有一个 var 数组,例如 [0, 1, 0, 0, 1, 1],这意味着工人在第二个、第五个和第六个时间段(通常是一小时)工作。我需要计算数组中第一个 1 和最后一个 1 之间有多少个 0(上例中为 2)。
如果我使用以下代码:
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 ))"];
我收到错误:MiniZinc:类型错误:没有找到具有此签名的函数或谓词:`arg_max(array[int] of var int)'
如果我添加行 include“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))"];
然后我收到另一个错误: MiniZinc:类型错误:不支持可变范围或索引的数组切片
有没有办法修复错误并计算浪费的时间?