private static IVariable CalculateBatch(IMilpManager milpManager, IVariable[] first, IVariable[] second) { var power = (int)Math.Pow(2, first.Length); return first.Zip(second, Tuple.Create).Aggregate(milpManager.FromConstant(0), (result, pair) => { power /= 2; return result.Operation(OperationType.Addition, pair.Item1.Operation(OperationType.IsGreaterOrEqual, pair.Item2).Operation(OperationType.Multiplication, milpManager.FromConstant(power)), pair.Item1.Operation(OperationType.IsLessOrEqual, pair.Item2).Operation(OperationType.Multiplication, milpManager.FromConstant(-power)) ); }); }