Java 如何在Apache Commons Math SimplexSolver中设置决策变量类型,如binary、int、double?

Java 如何在Apache Commons Math SimplexSolver中设置决策变量类型,如binary、int、double?,java,apache,solver,linear-programming,simplex,Java,Apache,Solver,Linear Programming,Simplex,如何在Apache Commons Math中设置决策变量类型,如binary、int、double?以下程序的输出如下: 332.6666666666667 1.0 8331.666666666668 我希望决策变量的类型为int而不是double;如果作为整数决策变量求解,则输出应为333,08325 public static void testSample() throws OptimizationException { LinearObjectiveFunction f =

如何在Apache Commons Math中设置决策变量类型,如binary、
int
double
?以下程序的输出如下:

332.6666666666667
1.0
8331.666666666668
我希望决策变量的类型为
int
而不是
double
;如果作为整数决策变量求解,则输出应为
333,08325

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());
}
public static void testSample()引发优化异常{
LinearObjectiveFunction f=新的LinearObjectiveFunction(新的双[]{25,15},0);
集合约束=新建ArrayList();
添加(新的LinearConstraint(新的double[]{5,8},Relationship.LEQ,5000));
添加(新的LinearConstraint(新的double[]{1,4},Relationship.LEQ,1500));
add(新的LinearConstraint(新的double[]{3,2},Relationship.LEQ,1000));
add(newlinearconstraint(newdouble[]{1,0},Relationship.GEQ,1));
add(newlinearconstraint(newdouble[]{0,1},Relationship.GEQ,1));
SimplexSolver=新SimplexSolver();
RealPointValuePair solution=solver.optimize(f,约束,GoalType.MAXIMIZE,true);
System.out.println(solution.getPoint()[0]);
System.out.println(solution.getPoint()[1]);
System.out.println(solution.getValue());
}
对此很方便:

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 333 1. 8,332
附录:此方法假设使用实数应用,结果四舍五入为整数。包含
SimplexSolver
的包不提供其他实现。作为另一种选择,考虑一个或“代码> Max Trimx<代码>,在.< /p>中可用。谢谢您的回答。在您的答案中,您只是格式化了数字,这与优化无关。333 1 8332不是优化答案,优化解决方案是333 0 8325。通过设置决策变量类型,我们可以得到真正的优化。有人知道怎么做吗?啊,我误解了;以上。对不起,我错误地编辑了你的问题。