/** <summary>Adds a pair (interval, demand) to the constraint. </summary> */ public CumulativeConstraint AddDemand <D>(IntervalVar interval, D demand) { CumulativeConstraintProto cumul = Proto.Cumulative; cumul.Intervals.Add(interval.GetIndex()); LinearExpr demandExpr = cp_model_.GetLinearExpr(demand); cumul.Demands.Add(cp_model_.GetLinearExpressionProto(demandExpr)); return(this); }
/** * <summary> * Adds <c>Cumulative(capacity)</c>. * </summary> * * <remarks> * This constraint enforces that: * <code> * forall t: * ∑( demands[i] if (start(intervals[t]) ≤ t < end(intervals[t])) and * (t is present) ) ≤ capacity * </code> * </remarks> * * <param name="capacity"> the maximum capacity of the cumulative constraint. It must be a positive affine * expression </param> * <returns> an instance of the CumulativeConstraint class. this class allows adding (interval, * demand) pairs incrementally </returns> */ public CumulativeConstraint AddCumulative <C>(C capacity) { CumulativeConstraintProto cumul = new CumulativeConstraintProto(); LinearExpr capacityExpr = GetLinearExpr(capacity); cumul.Capacity = GetLinearExpressionProto(capacityExpr); CumulativeConstraint ct = new CumulativeConstraint(this, model_); ct.Proto.Cumulative = cumul; return(ct); }
/** <summary>Adds all pairs (interval, demand) to the constraint. </summary> */ public CumulativeConstraint AddDemands <D>(IEnumerable <IntervalVar> intervals, IEnumerable <D> demands) { CumulativeConstraintProto cumul = Proto.Cumulative; foreach (var p in intervals.Zip(demands, (i, d) => new { Interval = i, Demand = d })) { cumul.Intervals.Add(p.Interval.GetIndex()); LinearExpr demandExpr = cp_model_.GetLinearExpr(p.Demand); cumul.Demands.Add(cp_model_.GetLinearExpressionProto(demandExpr)); } return(this); }
public Constraint AddCumulative<D, C>(IEnumerable<IntervalVar> intervals, IEnumerable<D> demands, C capacity) { Constraint ct = new Constraint(model_); CumulativeConstraintProto cumul = new CumulativeConstraintProto(); foreach (IntervalVar var in intervals) { cumul.Intervals.Add(var.GetIndex()); } foreach (D demand in demands) { cumul.Demands.Add(GetOrCreateIndex(demand)); } cumul.Capacity = GetOrCreateIndex(capacity); ct.Proto.Cumulative = cumul; return ct; }
public Constraint AddCumulative <D, C>(IEnumerable <IntervalVar> intervals, IEnumerable <D> demands, C capacity) { Constraint ct = new Constraint(model_); CumulativeConstraintProto cumul = new CumulativeConstraintProto(); foreach (IntervalVar var in intervals) { cumul.Intervals.Add(var.GetIndex()); } foreach (D demand in demands) { LinearExpr demandExpr = GetLinearExpr(demand); cumul.Demands.Add(GetLinearExpressionProto(demandExpr)); } LinearExpr capacityExpr = GetLinearExpr(capacity); cumul.Capacity = GetLinearExpressionProto(capacityExpr); ct.Proto.Cumulative = cumul; return(ct); }