簡體   English   中英

如何在Apache Commons Math SimplexSolver中設置二進制,整數,雙精度等決策變量類型?

[英]How to set decision variables types like binary, int, double in Apache Commons Math SimplexSolver?

如何在Apache Commons Math SimplexSolver設置二進制, intdouble SimplexSolver等決策變量類型? 以下程序的輸出如下:

332.6666666666667
1.0
8331.666666666668

我希望決策變量的類型為int而不是double ; 如果求解為整數決策變量333, 0, 8325則輸出應為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());
}

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM