0
   include "globals.mzn";
   %Data
   time_ID = [11,12,13,14,15];
   eventId = [0011, 0012, 0013, 0021, 0022, 0031, 0041, 0051, 0061, 0071];
   int:ntime = 5;
   int:nevent = 10;
   set of int: events =1..nevent;
   set of int: time = 1..ntime;
   array[1..nevent] of int:eventId;
   array[1..nevent] of var time:event_time;
   array[1..ntime] of int:time_ID;
   solve satisfy;
   constraint
   forall(event in eventId)(
   exists(t in time_ID)(
   event_time[event] = t ));
   output[ show(event_time) ];

我正在尝试使用上面的代码为事件分配时间。但不是为事件随机分配时间,而是返回错误“数组访问越界”如何让它从时间数组中随机选择?谢谢

4

1 回答 1

0

错误是因为您尝试在“event_time”数组中分配索引 11(eventId 数组中的第一个元素)。

只有 1 的分配是正确的,因为您没有对“event_time”数组进行任何其他约束。如果您将解决方案的数量设置为 - 比如说 - 3,您将看到其他解决方案。而且,事实上,现在的约束并没有真正的意义,因为它只是确保对“event_time”中的元素进行了一些分配,但是这个约束是由“event_time”的域处理的(即所有索引都是在 1..ntime 范围内)。

于 2015-12-10T11:58:52.117 回答