Как установить переменные типа решения, такие как двоичные, int, double, в Apache Commons Math SimplexSolver? - PullRequest
4 голосов
/ 29 октября 2011

Как установить типы переменных решения, такие как двоичные, int, double в Apache Commons Math SimplexSolver?Вывод программы ниже:

332.6666666666667
1.0
8331.666666666668

Я хочу, чтобы переменные решения имели тип int, а не double;вывод должен быть 333, 0, 8325, если он решен как целочисленные переменные решения.

public static void testSample() throws OptimizationException {
    LinearObjectiveFunction f = new LinearObjectiveFunction(new double[]{25, 15}, 0);
    Collection<LinearConstraint> constraints = new ArrayList<LinearConstraint>();
    constraints.add(new LinearConstraint(new double[]{5, 8}, Relationship.LEQ, 5000));
    constraints.add(new LinearConstraint(new double[]{1, 4}, Relationship.LEQ, 1500));
    constraints.add(new LinearConstraint(new double[]{3, 2}, Relationship.LEQ, 1000));
    constraints.add(new LinearConstraint(new double[]{1, 0}, Relationship.GEQ, 1));
    constraints.add(new LinearConstraint(new double[]{0, 1}, Relationship.GEQ, 1));

    SimplexSolver solver = new SimplexSolver();
    RealPointValuePair solution = solver.optimize(f, constraints, GoalType.MAXIMIZE, true);

    System.out.println(solution.getPoint()[0]);
    System.out.println(solution.getPoint()[1]);
    System.out.println(solution.getValue());
}

1 Ответ

3 голосов
/ 30 октября 2011

NumberFormat удобно для этого:

NumberFormat nf = NumberFormat.getIntegerInstance();
System.out.println(nf.format(solution.getPoint()[0]));
System.out.println(nf.format(solution.getPoint()[1]));
System.out.println(nf.format(solution.getValue()));

Консоль:

333
1
8,332

Добавление: этот подход предполагает, что симплексный алгоритм применяется с использованием действительных чисел, а результат (ы) округляется до целого числа.Пакет, содержащий SimplexSolver, org.apache.commons.math.optimization.linear, не предлагает никакой другой реализации.В качестве альтернативы рассмотрим другой подход или Maxtrix<Rational>, доступный в JScience.

...