You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Apache Commons Math 3.6.1中SimplexSolver的optimize方法正确使用示例

Apache Commons Math3 SimplexSolver 正确使用示例

入参差异说明

Apache Commons Math 3.1及以上版本对优化模块做了重构,SimplexSolver的optimize方法不再支持旧版分散参数的传入方式,改为接收可变长度的OptimizationData接口实现类实例。常用的OptimizationData实现类如下:

  • LinearObjectiveFunction:定义待求解的线性目标函数
  • LinearConstraintSet:存储所有线性约束条件的集合
  • GoalType:优化目标类型,可选GoalType.MINIMIZE(最小化)、GoalType.MAXIMIZE(最大化)
  • NonNegativeConstraint:标识是否要求所有决策变量默认非负

完整代码示例

以下为最小化场景的完整可运行示例,求解场景如下:

目标函数:min 2x + 3y
约束条件:

  1. x + y ≥ 5
  2. x ≥ 1
  3. y ≥ 2
  4. 所有决策变量非负
import org.apache.commons.math3.optim.PointValuePair;
import org.apache.commons.math3.optim.linear.*;
import org.apache.commons.math3.optim.nonlinear.scalar.GoalType;
import java.util.ArrayList;
import java.util.List;

public class SimplexDemo {
    public static void main(String[] args) {
        // 1. 定义目标函数:2x + 3y,最后一个参数为常数项,这里目标函数无常数项填0
        LinearObjectiveFunction function = new LinearObjectiveFunction(new double[]{2, 3}, 0);

        // 2. 定义约束集合
        List<LinearConstraint> constraints = new ArrayList<>();
        // 约束1:x + y ≥5
        constraints.add(new LinearConstraint(new double[]{1, 1}, Relationship.GEQ, 5));
        // 约束2:x ≥1
        constraints.add(new LinearConstraint(new double[]{1, 0}, Relationship.GEQ, 1));
        // 约束3:y ≥2
        constraints.add(new LinearConstraint(new double[]{0, 1}, Relationship.GEQ, 2));

        // 3. 创建求解器并调用optimize方法
        SimplexSolver solver = new SimplexSolver();
        PointValuePair result = solver.optimize(
                function,
                new LinearConstraintSet(constraints),
                GoalType.MINIMIZE,
                new NonNegativeConstraint(true) // 所有变量非负
        );

        // 4. 输出结果
        double[] variables = result.getFirst();
        double optimalValue = result.getValue();
        System.out.println("最优解 x = " + variables[0] + ", y = " + variables[1]);
        System.out.println("目标函数最小值 = " + optimalValue);
    }
}

注意事项

  • 构造SimplexSolver时可自定义传入三个参数:epsilon(收敛判定阈值)、maxUlps(浮点误差校验阈值)、cutoff(退化判定阈值),无参构造会使用默认配置
  • 若无特殊约束要求,NonNegativeConstraint参数建议传true,避免出现无意义的负解
  • 求解结果PointValuePair的getFirst()方法返回决策变量的最优解数组,顺序和目标函数中定义的变量顺序一致,getValue()方法返回目标函数的最优值

内容的提问来源于stack exchange,提问作者Mr. Moose

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 03:06:04