public IVariable Calculate(IMilpManager milpManager, OperationType type, params IVariable[] arguments) { if (!SupportsOperation(type, arguments)) { throw new NotSupportedException(SolverUtilities.FormatUnsupportedMessage(type, arguments)); } if (arguments.All(x => x.IsConstant())) { var sum = arguments.Select(x => x.ConstantValue.Value).Sum(); if (arguments.All(x => x.IsInteger())) { return(milpManager.FromConstant((int)sum)); } return(milpManager.FromConstant(sum)); } var domain = CalculateDomain(arguments); return(arguments.Aggregate((x, y) => { var result = milpManager.SumVariables(x, y, domain); result.ConstantValue = x.ConstantValue + y.ConstantValue; result.Expression = $"{x.FullExpression()} + {y.FullExpression()}"; return result; })); }
public IVariable Calculate(IMilpManager milpManager, OperationType type, params IVariable[] arguments) { if (!SupportsOperation(type, arguments)) throw new NotSupportedException(SolverUtilities.FormatUnsupportedMessage(type, arguments)); if (arguments.All(x => x.IsConstant())) { var sum = arguments.Select(x => x.ConstantValue.Value).Sum(); if (arguments.All(x => x.IsInteger())) { return milpManager.FromConstant((int) sum); } return milpManager.FromConstant(sum); } var domain = CalculateDomain(arguments); return arguments.Aggregate((x, y) => { var result = milpManager.SumVariables(x, y, domain); result.ConstantValue = x.ConstantValue + y.ConstantValue; result.Expression = $"{x.FullExpression()} + {y.FullExpression()}"; return result; }); }