为事件分配时间
Assigning times to events
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) ];
我正在尝试使用上面的代码为事件分配时间。
但是,它不是随机分配时间给事件,而是 returns 一个错误“数组访问越界”
如何从时间数组中随机生成 select ?
谢谢
错误是因为您试图在 "event_time" 数组中分配索引 11(eventId 数组中的第一个元素)。
仅 1 的赋值是正确的,因为您没有对 "event_time" 数组进行任何其他约束。如果您将解决方案的数量设置为 - 比如说 - 3,您将看到其他解决方案。而且,事实上,现在的约束并没有真正意义,因为它只是确保对 "event_time" 中的元素进行了一些分配,但此约束由 "event_time" 的域处理(即所有索引都在 1..ntime 范围内)。
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) ];
我正在尝试使用上面的代码为事件分配时间。 但是,它不是随机分配时间给事件,而是 returns 一个错误“数组访问越界” 如何从时间数组中随机生成 select ? 谢谢
错误是因为您试图在 "event_time" 数组中分配索引 11(eventId 数组中的第一个元素)。
仅 1 的赋值是正确的,因为您没有对 "event_time" 数组进行任何其他约束。如果您将解决方案的数量设置为 - 比如说 - 3,您将看到其他解决方案。而且,事实上,现在的约束并没有真正意义,因为它只是确保对 "event_time" 中的元素进行了一些分配,但此约束由 "event_time" 的域处理(即所有索引都在 1..ntime 范围内)。