Example #1
0
        public IVariable Set(IMilpManager milpManager, CompositeConstraintType type, ICompositeConstraintParameters parameters,
                             IVariable leftVariable, params IVariable[] rightVariable)
        {
            var maximumIntegerValue = milpManager.FromConstant(milpManager.MaximumIntegerValue);
            var one = milpManager.FromConstant(1);

            var allVariables = new[] { leftVariable }.Concat(rightVariable).ToArray();
            var boundaryVariables = allVariables.Select(v => milpManager.CreateAnonymous(Domain.BinaryInteger)).ToArray();

            milpManager.Operation(OperationType.Addition, boundaryVariables).Set(ConstraintType.LessOrEqual, one);

            for (int i = 0; i < allVariables.Length; ++i)
            {
                IVariable sum = boundaryVariables[i];
                if (i < allVariables.Length - 1)
                {
                    sum = sum.Operation(OperationType.Addition, boundaryVariables[i + 1]);
                }
                allVariables[i]
                .Set(ConstraintType.LessOrEqual, sum.Operation(OperationType.Multiplication, maximumIntegerValue))
                .Set(ConstraintType.GreaterOrEqual, sum.Operation(OperationType.Multiplication, maximumIntegerValue).Operation(OperationType.Negation));
            }

            return(leftVariable);
        }
Example #2
0
        public IVariable Set(IMilpManager milpManager, CompositeConstraintType type, ICompositeConstraintParameters parameters,
                             IVariable leftVariable, params IVariable[] rightVariable)
        {
            leftVariable.Operation(OperationType.DifferentValuesCount, rightVariable)
            .Set(ConstraintType.Equal, milpManager.FromConstant(rightVariable.Length + 1));

            return(leftVariable);
        }
        public IVariable Set(IMilpManager milpManager, CompositeConstraintType type, ICompositeConstraintParameters parameters,
            IVariable leftVariable, params IVariable[] rightVariable)
        {
            leftVariable.Operation(OperationType.DifferentValuesCount, rightVariable)
                .Set(ConstraintType.Equal, milpManager.FromConstant(rightVariable.Length + 1));

            return leftVariable;
        }
        public IVariable Set(IMilpManager milpManager, CompositeConstraintType type, ICompositeConstraintParameters parameters,
            IVariable leftVariable, params IVariable[] rightVariable)
        {
            rightVariable.Aggregate(milpManager.FromConstant(0),
                (current, variable) =>
                    current.Operation(OperationType.Addition, leftVariable.Operation(OperationType.IsEqual, variable))).Create()
                .Set(ConstraintType.Equal, milpManager.FromConstant(0));

            return leftVariable;
        }
        public IVariable Set(IMilpManager milpManager, CompositeConstraintType type, ICompositeConstraintParameters parameters,
                             IVariable leftVariable, params IVariable[] rightVariable)
        {
            rightVariable.Aggregate(milpManager.FromConstant(0),
                                    (current, variable) =>
                                    current.Operation(OperationType.Addition, leftVariable.Operation(OperationType.IsEqual, variable))).Create()
            .Set(ConstraintType.Equal, milpManager.FromConstant(0));

            return(leftVariable);
        }
Example #6
0
        public IVariable Set(IMilpManager milpManager, CompositeConstraintType type, ICompositeConstraintParameters parameters,
            IVariable leftVariable, params IVariable[] rightVariable)
        {
            var one = milpManager.FromConstant(1);
            var maximumIntegerValue = milpManager.FromConstant(milpManager.MaximumIntegerValue);

            var allVariables = new[] {leftVariable}.Concat(rightVariable).ToArray();
            var boundaryVariables = allVariables.Select(v => milpManager.CreateAnonymous(Domain.BinaryInteger)).ToArray();
            milpManager.Operation(OperationType.Addition, boundaryVariables).Set(ConstraintType.LessOrEqual, one);
            foreach (var pair in allVariables.Zip(boundaryVariables, Tuple.Create))
            {
                pair.Item1
                    .Set(ConstraintType.LessOrEqual, pair.Item2.Operation(OperationType.Multiplication, maximumIntegerValue))
                    .Set(ConstraintType.GreaterOrEqual, pair.Item2.Operation(OperationType.Multiplication, maximumIntegerValue).Operation(OperationType.Negation));
            }

            return leftVariable;
        }
Example #7
0
        public IVariable Set(IMilpManager milpManager, CompositeConstraintType type, ICompositeConstraintParameters parameters,
                             IVariable leftVariable, params IVariable[] rightVariable)
        {
            var one = milpManager.FromConstant(1);
            var maximumIntegerValue = milpManager.FromConstant(milpManager.MaximumIntegerValue);

            var allVariables = new[] { leftVariable }.Concat(rightVariable).ToArray();
            var boundaryVariables = allVariables.Select(v => milpManager.CreateAnonymous(Domain.BinaryInteger)).ToArray();

            milpManager.Operation(OperationType.Addition, boundaryVariables).Set(ConstraintType.LessOrEqual, one);
            foreach (var pair in allVariables.Zip(boundaryVariables, Tuple.Create))
            {
                pair.Item1
                .Set(ConstraintType.LessOrEqual, pair.Item2.Operation(OperationType.Multiplication, maximumIntegerValue))
                .Set(ConstraintType.GreaterOrEqual, pair.Item2.Operation(OperationType.Multiplication, maximumIntegerValue).Operation(OperationType.Negation));
            }

            return(leftVariable);
        }
Example #8
0
        public IVariable Set(IMilpManager milpManager, CompositeConstraintType type, ICompositeConstraintParameters parameters,
            IVariable leftVariable, params IVariable[] rightVariable)
        {
            var maximumIntegerValue = milpManager.FromConstant(milpManager.MaximumIntegerValue);
            var one = milpManager.FromConstant(1);

            var allVariables = new[] { leftVariable }.Concat(rightVariable).ToArray();
            var boundaryVariables = allVariables.Select(v => milpManager.CreateAnonymous(Domain.BinaryInteger)).ToArray();
            milpManager.Operation(OperationType.Addition, boundaryVariables).Set(ConstraintType.LessOrEqual, one);

            for (int i = 0; i < allVariables.Length; ++i)
            {
                IVariable sum = boundaryVariables[i];
                if (i < allVariables.Length - 1)
                {
                    sum = sum.Operation(OperationType.Addition, boundaryVariables[i + 1]);
                }
                allVariables[i]
                    .Set(ConstraintType.LessOrEqual, sum.Operation(OperationType.Multiplication, maximumIntegerValue))
                    .Set(ConstraintType.GreaterOrEqual, sum.Operation(OperationType.Multiplication, maximumIntegerValue).Operation(OperationType.Negation));
            }

            return leftVariable;
        }
Example #9
0
 /// <summary>
 /// Adds composite constraint to a solver
 /// </summary>
 /// <param name="variable">Variable to constraint</param>
 /// <param name="type">Constraint type</param>
 /// <param name="parameters">Additional constraint parameters</param>
 /// <param name="right">Right hand side of a constraint</param>
 /// <returns>Variable passed as an argument</returns>
 public static IVariable Set(this IVariable variable, CompositeConstraintType type, ICompositeConstraintParameters parameters, params IVariable[] right)
 {
     if (variable == null) throw new ArgumentNullException(nameof(variable));
     return variable.MilpManager.Set(type, parameters, variable, right);
 }
 /// <summary>
 /// Adds composite constraint to a solver
 /// </summary>
 /// <param name="variable">Variable to constraint</param>
 /// <param name="type">Constraint type</param>
 /// <param name="parameters">Additional constraint parameters</param>
 /// <param name="right">Right hand side of a constraint</param>
 /// <returns>Variable passed as an argument</returns>
 public static IVariable Set(this IVariable variable, CompositeConstraintType type, ICompositeConstraintParameters parameters, params IVariable[] right)
 {
     if (variable == null)
     {
         throw new ArgumentNullException(nameof(variable));
     }
     return(variable.MilpManager.Set(type, parameters, variable, right));
 }
Example #11
0
 public virtual IVariable Set(CompositeConstraintType type, ICompositeConstraintParameters parameters, IVariable left,
                              params IVariable[] variables)
 {
     return(CompositeConstraints[type].Set(this, type, parameters, left, variables));
 }
Example #12
0
 public virtual IVariable Set(CompositeConstraintType type, ICompositeConstraintParameters parameters, IVariable left,
     params IVariable[] variables)
 {
     return CompositeConstraints[type].Set(this, type, parameters, left, variables);
 }