Ejemplo n.º 1
0
        public Constraint AddReservoirConstraintWithActive <I>(
            IEnumerable <IntVar> times,
            IEnumerable <I> demands,
            IEnumerable <IntVar> actives,
            long min_level, long max_level)
        {
            Constraint ct = new Constraint(model_);
            ReservoirConstraintProto res = new ReservoirConstraintProto();

            foreach (IntVar var in times)
            {
                res.Times.Add(var.Index);
            }
            foreach (I d in demands)
            {
                res.Demands.Add(Convert.ToInt64(d));
            }
            foreach (IntVar var in actives)
            {
                res.Actives.Add(var.Index);
            }

            ct.Proto.Reservoir = res;
            return(ct);
        }
Ejemplo n.º 2
0
        /**
         * <summary>
         * Adds an optional event.
         * </summary>
         *
         * <remarks>
         * If `is_active` is true, It will increase the used capacity by `level_change` at time `time`.
         * `time` must be an affine expression.
         * </remarks>
         */
        public ReservoirConstraint AddOptionalEvent <T, L>(T time, L level_change, ILiteral literal)
        {
            ReservoirConstraintProto res = Proto.Reservoir;

            res.TimeExprs.Add(cp_model_.GetLinearExpressionProto(cp_model_.GetLinearExpr(time)));
            res.LevelChanges.Add(Convert.ToInt64(level_change));
            res.ActiveLiterals.Add(literal.GetIndex());
            return(this);
        }
Ejemplo n.º 3
0
        /**
         * <summary>
         * Adds a reservoir constraint with optional refill/emptying events.
         * </summary>
         *
         * <remarks>
         * <para>Maintain a reservoir level within bounds. The water level starts at 0, and at any time, it
         * must be within [min_level, max_level].
         * </para>
         *
         * <para>Given an event (time, levelChange, active), if active is true, and if time is assigned a
         * value t, then the level of the reservoir changes by levelChange (which is constant) at time t.
         * Therefore, at any time t:
         * <code>∑(levelChanges[i] * actives[i] if times[i] ≤ t) in [min_level, max_level]</code>
         * </para>
         *
         * <para>Note that min level must be ≤ 0, and the max level must be ≥ 0. Please use fixed
         * level_changes to simulate an initial state. </para>
         * </remarks>
         *
         * <param name="minLevel"> at any time, the level of the reservoir must be greater of equal than the min
         *     level. minLevel must me ≤ 0 </param>
         * <param name="maxLevel"> at any time, the level of the reservoir must be less or equal than the max
         *     level. maxLevel must be ≥ 0 </param>
         * <returns> an instance of the ReservoirConstraint class </returns>
         */
        public ReservoirConstraint AddReservoirConstraint(long minLevel, long maxLevel)
        {
            ReservoirConstraintProto res = new ReservoirConstraintProto();

            res.MinLevel = minLevel;
            res.MaxLevel = maxLevel;

            ReservoirConstraint ct = new ReservoirConstraint(this, model_);

            ct.Proto.Reservoir = res;
            return(ct);
        }
Ejemplo n.º 4
0
  public Constraint AddReservoirConstraint(IEnumerable<IntVar> times,
                                           IEnumerable<int> demands,
                                           long min_level, long max_level)
  {
    Constraint ct = new Constraint(model_);
    ReservoirConstraintProto res = new ReservoirConstraintProto();
    foreach (IntVar var in times)
    {
      res.Times.Add(var.Index);
    }
    foreach (int d in demands)
    {
      res.Demands.Add(d);
    }

    ct.Proto.Reservoir = res;
    return ct;
  }
Ejemplo n.º 5
0
        public Constraint AddReservoirConstraint <I>(IEnumerable <LinearExpr> times, IEnumerable <I> levelChanges,
                                                     long minLevel, long maxLevel)
        {
            Constraint ct = new Constraint(model_);
            ReservoirConstraintProto res = new ReservoirConstraintProto();

            foreach (LinearExpr time in times)
            {
                res.TimeExprs.Add(GetLinearExpressionProto(time));
            }
            foreach (I d in levelChanges)
            {
                res.LevelChanges.Add(Convert.ToInt64(d));
            }

            res.MinLevel       = minLevel;
            res.MaxLevel       = maxLevel;
            ct.Proto.Reservoir = res;

            return(ct);
        }