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); }
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; }
/// <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)); }
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); }
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; }
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); }
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; }
/// <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); }
public virtual IVariable Set(CompositeConstraintType type, ICompositeConstraintParameters parameters, IVariable left, params IVariable[] variables) { return(CompositeConstraints[type].Set(this, type, parameters, left, variables)); }
public virtual IVariable Set(CompositeConstraintType type, IVariable left, params IVariable[] variables) { return(Set(type, null, left, variables)); }
public virtual IVariable Set(CompositeConstraintType type, ICompositeConstraintParameters parameters, IVariable left, params IVariable[] variables) { return CompositeConstraints[type].Set(this, type, parameters, left, variables); }
public virtual IVariable Set(CompositeConstraintType type, IVariable left, params IVariable[] variables) { return Set(type, null, left, variables); }