首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >apache commons LinearObjectiveFunction算法

apache commons LinearObjectiveFunction算法
EN

Stack Overflow用户
提问于 2017-10-12 20:00:26
回答 1查看 259关注 0票数 0

apache commons数学库如何计算给定不等式约束的目标函数的最小值和最大值。

e.g

代码语言:javascript
复制
maximize 3x1+5x2 
given - 2x1+8x2<=13
5x1-x2<=11
x1>=0,x2>=0

apache commons库对此应用了什么算法。

EN

回答 1

Stack Overflow用户

发布于 2017-10-12 20:40:42

在Apache commons数学中有一个Simplex求解器。

你可以使用这个库来解决你的问题:

代码语言:javascript
复制
@Test
public void testMathStackOverflow() {
    //      maximize 3x1+5x2
    //      subject to
    //          2x1+8x2<=13
    //          5x1-x2<=11
    //              x1>=0
    // x2>=0

    LinearObjectiveFunction f = new LinearObjectiveFunction(new double[] { 3, 5}, 0);

    ArrayList<LinearConstraint> constraints = new ArrayList<>();

    constraints.add(new LinearConstraint(new double[] {2, 8}, Relationship.LEQ, 13));
    constraints.add(new LinearConstraint(new double[] {5, -1}, Relationship.LEQ, 11));

    double epsilon = 1e-6;
    SimplexSolver solver = new SimplexSolver();
    PointValuePair solution = solver.optimize(f, new LinearConstraintSet(constraints),
            GoalType.MAXIMIZE,
            new NonNegativeConstraint(true),
            PivotSelectionRule.BLAND);
    System.out.printf("x1: %f; x2: %f; max: %f", solution.getPoint()[0], solution.getPoint()[1], solution.getValue());
}

结果是:

代码语言:javascript
复制
x1: 2.404762; x2: 1.023810; max: 12.333333

我使用了以下依赖项:

代码语言:javascript
复制
<groupId>org.apache.commons</groupId>
<artifactId>commons-math4</artifactId>
<version>4.0-SNAPSHOT</version>

有关此库中Simplex求解器用法的更多示例,请下载源代码并检查包中的单元测试:

代码语言:javascript
复制
org.apache.commons.math4.optim.linear
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46709079

复制
相关文章

相似问题

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