问题描述
请原谅一个新手问题。使用Java / Groovy,我设法将持续时间不同(requestedSlots)的观察值(obs)安排到每小时的时段中,每24小时有10个“夜间”时段。观察不得安排在夜间范围内进行。那很好。我也有一个数组,它以每天0 ... 100的百分比保存月亮的照度(不是真的每小时需要)。我如何表达仅在光照[from]小于obs [from] .maxIllumination时才必须安排观察?非常感谢。
public static final int NUM_NIGHTS = 180
public static final int SLOTS_PER_NIGHT = 10
public static final int SLOTS_PER_DAY = 24
public static final int TOTAL_SLOTS = NUM_NIGHTS * SLOTS_PER_DAY
...
boolean schedule(List<OB> obs) {
// create constraint model
CpModel model = new CpModel()
List<Slot> slots = []
List<IntervalVar> obIntervals = (0 ..< obs.size()).collect { int i ->
Intvar from = model.newIntvar(0,TOTAL_SLOTS - 1,"OB $i from")
Intvar to = model.newIntvar(0,"OB $i to")
// constraint: intervals and their duration
model.newIntervalVar(from,obs[i].requestedSlots,to,"OB $i slot duration")
}
// constraint: exclude daytime slots 10 ... 23
List<IntervalVar> daytimeIntervals = (0 ..< NUM_NIGHTS).collect { int night ->
model.newFixedInterval(night * SLOTS_PER_DAY + SLOTS_PER_NIGHT,SLOTS_PER_DAY - SLOTS_PER_NIGHT,"Day $night reserved daytime")
}
// constraint: no slot overlap
model.addNoOverlap((obIntervals + daytimeIntervals) as IntervalVar[])
// solve
cpsolverStatus status = new cpsolver().solve(model)
status == cpsolverStatus.OPTIMAL || status == cpsolverStatus.FEASIBLE
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)