From 7cd445566c61bf976ea985e6c6f146b7259fd7d6 Mon Sep 17 00:00:00 2001 From: "lperron@google.com" Date: Fri, 22 Nov 2013 10:48:49 +0000 Subject: [PATCH] fix for issue33 --- src/constraint_solver/resource.cc | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/src/constraint_solver/resource.cc b/src/constraint_solver/resource.cc index ce14391aea..4c16034df8 100644 --- a/src/constraint_solver/resource.cc +++ b/src/constraint_solver/resource.cc @@ -722,15 +722,19 @@ class RankedPropagator : public Constraint { IntervalVar* const interval = RankedInterval(i); IntervalVar* const next_interval = RankedInterval(i + 1); IntVar* const slack = RankedSlack(i); + DCHECK(interval->MustBePerformed()); + DCHECK(next_interval->MustBePerformed()); const int64 transition_time = RankedTransitionTime(i, i + 1); next_interval->SetStartRange( CapAdd(interval->StartMin(), slack->Min() + transition_time), CapAdd(interval->StartMax(), slack->Max() + transition_time)); } // Propagates on ranked last from right to left. - for (int i = last_position; i > last_sentinel; --i) { + for (int i = last_position; i > last_sentinel + 1; --i) { IntervalVar* const interval = RankedInterval(i - 1); IntervalVar* const next_interval = RankedInterval(i); + DCHECK(interval->MustBePerformed()); + DCHECK(next_interval->MustBePerformed()); IntVar* const slack = RankedSlack(i - 1); const int64 transition_time = RankedTransitionTime(i - 1, i); interval->SetStartRange( @@ -788,10 +792,13 @@ class RankedPropagator : public Constraint { } } // TODO(user): cache transition on ranked intervals in a vector. + // Propagates on ranked first from right to left. for (int i = std::min(first_sentinel - 2, last_position - 1); i >= 0; --i) { IntervalVar* const interval = RankedInterval(i); IntervalVar* const next_interval = RankedInterval(i + 1); + DCHECK(interval->MustBePerformed()); + DCHECK(next_interval->MustBePerformed()); IntVar* const slack = RankedSlack(i); const int64 transition_time = RankedTransitionTime(i, i + 1); interval->SetStartRange( @@ -799,9 +806,11 @@ class RankedPropagator : public Constraint { CapSub(next_interval->StartMax(), slack->Min() + transition_time)); } // Propagates on ranked last from left to right. - for (int i = last_sentinel; i < last_position - 1; ++i) { + for (int i = last_sentinel + 1; i < last_position - 1; ++i) { IntervalVar* const interval = RankedInterval(i); IntervalVar* const next_interval = RankedInterval(i + 1); + DCHECK(interval->MustBePerformed()); + DCHECK(next_interval->MustBePerformed()); IntVar* const slack = RankedSlack(i); const int64 transition_time = RankedTransitionTime(i, i + 1); next_interval->SetStartRange(