Ejemplo n.º 1
0
        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;
            }));
        }
Ejemplo n.º 2
0
        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;
            });
        }