首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在java中使用apache commons optimize()时出现的问题

在java中使用apache commons optimize()时出现的问题
EN

Stack Overflow用户
提问于 2014-12-02 04:21:16
回答 1查看 660关注 0票数 0

我目前正在尝试使用apache库在java中实现一个非导数的多变量优化。但是,我在向optimize()方法提供所需的"OptimizationData“时遇到了问题。下面是我到目前为止运行我的优化的所有信息。

代码语言:javascript
复制
public static double[] Optimize(double[][] contractDataMatrix, double[] modelData,String modelType,String weightType){
    ObjectiveFunction objective = new      
ObjectiveFunction(contractDataMatrix,modelType,weightType);

    org.apache.commons.math3.optim.nonlinear.scalar.noderiv.SimplexOptimizer optimizer =new   
org.apache.commons.math3.optim.nonlinear.scalar.noderiv.SimplexOptimizer(.01,.001);
    org.apache.commons.math3.optim.nonlinear.scalar.ObjectiveFunction obj = new    
org.apache.commons.math3.optim.nonlinear.scalar.ObjectiveFunction(objective);



    org.apache.commons.math3.optim.PointValuePair finalData=optimizer.optimize(
    new org.apache.commons.math3.optim.MaxEval(200),
    obj,
    GoalType.MINIMIZE,
    new InitialGuess(modelData)
    );

    return finalData.getPoint();

}

首先,我创建了一个ObjectiveFunction,这是我创建的一个类,作为扩展它的apache ObjectiveFunction类的包装器。我这样做是因为目标函数本身是一个包含多个参数的函数,这些参数对我的问题并不重要。然后,我构建了一个SimplexOptimizer,并尝试按照我在网上找到的一个示例调用optimize()。尽管文档没有明确说明需要什么作为输入,但我相信我已经提供了所有必要的参数,但有一个可能的例外情况,我将在下面的编辑中讨论。不管怎样,我得到了以下错误:

代码语言:javascript
复制
Exception in thread "main" org.apache.commons.math3.exception.NullArgumentException: null is not     allowed
at   org.apache.commons.math3.optim.nonlinear.scalar.noderiv.SimplexOptimizer.checkParameters(SimplexOptimizer.java:214)
at org.apache.commons.math3.optim.nonlinear.scalar.noderiv.SimplexOptimizer.doOptimize(SimplexOptimizer.java:128)
at org.apache.commons.math3.optim.nonlinear.scalar.noderiv.SimplexOptimizer.doOptimize(SimplexOptimizer.java:89)
at org.apache.commons.math3.optim.BaseOptimizer.optimize(BaseOptimizer.java:154)
at org.apache.commons.math3.optim.BaseMultivariateOptimizer.optimize(BaseMultivariateOptimizer.java:66)
at org.apache.commons.math3.optim.nonlinear.scalar.MultivariateOptimizer.optimize(MultivariateOptimizer.java:64)
at org.apache.commons.math3.optim.nonlinear.scalar.noderiv.SimplexOptimizer.optimize(SimplexOptimizer.java:122)
at compfin3.CompFin3.Optimize(CompFin3.java:181)
at compfin3.CompFin3.main(CompFin3.java:118)
Java Result: 1

有没有人知道这个错误指的是什么"null“值,以及我如何修复它?

最好的

保罗

编辑:我相信我已经找到了问题的根源。似乎作为我传递给优化器的优化数据的一部分,我忘记了定义我正在使用的特定AbstractSimplex。不幸的是,文档中给出的构造函数都不能正常工作。当我尝试的时候

代码语言:javascript
复制
org.apache.commons.math3.optim.PointValuePair finalData=optimizer.optimize(
    new org.apache.commons.math3.optim.MaxEval(200),
    obj,
    GoalType.MINIMIZE,
    new InitialGuess(modelData),
    new org.apache.commons.math3.optim.nonlinear.scalar.noderiv.AbstractSimplex(2)
    );

我得到编译错误

代码语言:javascript
复制
 AbstractSimplex is abstract, cannot be instantiated

即使这是该类的一个有文档记录的构造函数。

EN

回答 1

Stack Overflow用户

发布于 2014-12-02 05:18:20

下面的代码解决了我的问题:

代码语言:javascript
复制
public static double[] Optimize(double[][] contractDataMatrix,double[] minData, double[] maxData,double[] modelData,String modelType,String weightType){
    ObjectiveFunction objective = new     ObjectiveFunction(contractDataMatrix,modelType,weightType);

    org.apache.commons.math3.optim.nonlinear.scalar.noderiv.SimplexOptimizer optimizer =new org.apache.commons.math3.optim.nonlinear.scalar.noderiv.SimplexOptimizer(.01,.001);
    org.apache.commons.math3.optim.nonlinear.scalar.ObjectiveFunction obj = new org.apache.commons.math3.optim.nonlinear.scalar.ObjectiveFunction(objective);

    int n = modelData.length;

    org.apache.commons.math3.optim.PointValuePair finalData=optimizer.optimize(
    new org.apache.commons.math3.optim.MaxEval(200),
    obj,
    GoalType.MINIMIZE,
    new InitialGuess(modelData),
    new org.apache.commons.math3.optim.nonlinear.scalar.noderiv.NelderMeadSimplex(n)
    );

    return finalData.getPoint();

}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27236587

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档