我正在尝试在 Java 中使用一些线性编程工具。我决定探索 SCPSolver,因为它带有文档。
所以我尝试运行 SCPSolver 主页中所示的示例:低杠杆接口示例
public class SCPSolverDemo {
public static void main(String ag[]){
LinearProgram lp = new LinearProgram(new double[]{5.0,10.0});
lp.addConstraint(new LinearBiggerThanEqualsConstraint(new double[]{3.0,1.0}, 8.0, "c1"));
lp.addConstraint(new LinearBiggerThanEqualsConstraint(new double[]{0.0,4.0}, 4.0, "c2"));
lp.addConstraint(new LinearSmallerThanEqualsConstraint(new double[]{2.0,0.0}, 2.0, "c3"));
lp.setMinProblem(true);
LinearProgramSolver solver = SolverFactory.newDefault();
double[] sol = solver.solve(lp);
System.out.println(Arrays.toString(sol)); //line 23
}
}
当我运行它时,我收到一条错误消息
Exception in thread "main" java.lang.NullPointerException
at drafts.SCPSolverDemo.main(SCPSolverDemo.java:23)
我意识到SolverFactory.newDefault();
返回null。文件说
搜索 LinearProgramSolver 服务的服务提供者并返回它找到的第一个实例。如果没有找到服务,它将堆栈跟踪打印到 stderr 并返回 null。当这个方法第一次被调用时,它会初始化 ServiceLoader,它会从类路径中找到可用的服务。后续调用使用第一次初始化的结果。因此,如果在第一次调用时没有可用的服务,则程序运行的其余部分将没有可用的服务。未来的实现可能会忽略这个问题。
但我不知道该怎么做才能解决这个问题。在这一点上,我需要你的帮助。我不能从现有的例子中理解很多,我不知道该怎么做。
有人可以给我一个可运行的例子,以了解发生了什么吗?先感谢您