我試圖用Apache Commons提供的java優化庫解決約束非線性267維優化問題。Apache Commons優化問題
破譯後3天,這是我有:
public class optimize2 {
public static void main(String []args){
double[] point = {1.,2.};
double[] cost = {3., 2.};
MultivariateFunction function = new MultivariateFunction() {
public double value(double[] point) {
double x = point[0];
double y = point[1];
return x * y;
}
};
MultivariateOptimizer optimize = new BOBYQAOptimizer(5);
optimize.optimize(
new MaxEval(200),
GoalType.MAXIMIZE,
new InitialGuess(point),
new ObjectiveFunction(function),
new LinearConstraint(cost, Relationship.EQ, 30));
}
}
無論出於何種原因optimize.optimize()拋出空指針錯誤。也許我只是愚蠢的,但我不知道如何讓這個工作。
以下是錯誤:在螺紋
異常 「主」 顯示java.lang.NullPointerException 在org.apache.commons.math3.optim.nonlinear.scalar.noderiv.BOBYQAOptimizer.setup(BOBYQAOptimizer.java: 2401) at org.apache.commons.math3.optim.nonlinear.scalar.noderiv.BOBYQAOptimizer.doOptimize(BOBYQAOptimizer.java:236) at org.apache.commons.math3.optim.nonlinear.scalar.noderiv.BOBYQAOptimizer。 (org.apache.commons.math3.optim.BaseOptimizer.optimize(BaseOptimizer.java:143) at org.apache.commons.math3.optim.BaseMultivariateOptimizer.optimize(BaseMultivariateOptimizer.java: 66 ) 在org.apache.commons.math3.optim.nonlinear.scalar.MultivariateOptimizer.optimize(MultivariateOptimizer.java:64) 在Test.Code.optimize2.main(optimize2.java:39)
發佈包含堆棧跟蹤的完整錯誤消息。 – jlordo
* BOBYQA *算法不支持線性或非線性約束,僅支持可變邊界。我不是100%確定,但我並不認爲* Apache Commons Math *中的任何非線性可選算法都能夠處理變量邊界以外的約束。鮑威爾的* COBYLA2 *算法確實支持任意約束。我已經將原始實現的Fortran代碼轉換爲Java,你可以在這裏找到它(https://github.com/cureos/jcobyla)和[here](http://www.codeproject.com/Articles/ 508513 /免費非線性微分 - 優化 - 對-NET-和)。 –