Пример #1
0
        /** <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);
        }
Пример #2
0
        /**
         * <summary>
         * Adds <c>Cumulative(capacity)</c>.
         * </summary>
         *
         * <remarks>
         * This constraint enforces that:
         * <code>
         * forall t:
         *      ∑( demands[i] if (start(intervals[t]) ≤ t &lt; 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);
        }
Пример #3
0
        /** <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);
        }
Пример #4
0
 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;
 }
Пример #5
0
        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);
        }