我尝试了实验收集器并遇到了一些问题。我需要找到序列之间的中断,它确实找到了序列 - 看起来,所以我希望它也能识别中断,但我没有。我希望能够调用 .getNextBreak(),然后调用 .getNext Sequence(),因为返回了几个序列,但没有中断,所以我不能来回跳转并以这种方式解决问题。 Maybee 它与连接有关,只连接使用过的时间颗粒。
在 0-9 的 timegrainfact 列表中,我分配了 3 个会议,它确实找到了看起来的序列,但我没有得到任何我正在寻找的休息时间。我希望只有两个序列重叠,即(0-1 和 4-7)并从(2-3 和 8-9)中断。
ConstraintCollectors.consecutive:
Meetingassign ID: 6 Sequence [7, 5, 6], breakList=[]
Meetingassign ID: 5 Sequence [5, 6, 4], breakList=[]
Meetingassign ID: 4 Sequence [0,1], breakList=[]
ConstraintCollectors.breaks:
<empty>
protected Constraint unusedTimeGrains(ConstraintFactory constraintFactory) {
return constraintFactory.forEach(TimeGrain.class)
.join(MeetingAssignment.class,
Joiners.overlapping((TimeGrain timegrain)-> timegrain.getGrainIndex(),
(TimeGrain timegrain)-> timegrain.getGrainIndex()+1,
(MeetingAssignment assignment) ->assignment.getStartingTimeGrain().getGrainIndex(),
(MeetingAssignment assignment) ->assignment.getStartingTimeGrain().getGrainIndex() + assignment.getDurationInGrains()
)
)
.groupBy((timegrain, assingment) ->
timegrain,
(timegrain, assingment) -> assingment,
ConstraintCollectors.consecutive((timegrain, assingment) ->
timegrain,
TimeGrain::getGrainIndex
)
)
.flattenLast(ConsecutiveInfo::getConsecutiveSequences)
.penalizeConfigurable( (timegrain, assingment,shiftSequence) -> shiftSequence.getLength()) // not-e here is rewarded not penalized, as its overlaps not gaps that is found
.asConstraint(MeetingConstraintConfiguration.UNUSED_TIME_GRAIN);
}