类 SimplexSolver
使用“双阶段单纯形法”解决线性问题。
SimplexSolver
支持以下作为参数提供给optimize(OptimizationData...)
的OptimizationData
数据:
- 目标函数:
LinearObjectiveFunction
- 必需 - 线性约束:
LinearConstraintSet
- 必需 - 优化类型:
GoalType
- 可选,默认:MINIMIZE
- 是否允许负值作为解:
NonNegativeConstraint
- 可选,默认:true - 主元选择规则:
PivotSelectionRule
- 可选,默认:PivotSelectionRule.DANTZIG
- 最佳解的回调:
SolutionCallback
- 可选 - 最大迭代次数:
MaxIter
- 可选,默认:Integer.MAX_VALUE
注意:根据问题定义,默认的收敛标准可能过于严格,导致MathIllegalStateException
或MathIllegalStateException
。在这种情况下,建议使用更合适的值调整这些标准,例如放宽ε值。
默认的收敛标准:
- 算法收敛:1e-6
- 浮点比较:10 ulp
- 截止值:1e-10
截止值被引入以处理单纯形表中非常小的主元素的情况,因为这些元素可能导致数值不稳定和退化。小于此值的潜在主元素将被视为零,因此不会被主元选择机制考虑。默认值对许多问题是安全的,但在使用线性约束或目标函数中使用非常小系数的情况下可能需要调整。
-
字段概要
从类继承的字段 org.hipparchus.optim.BaseOptimizer
evaluations, iterations
-
构造器概要
构造器说明使用默认设置构建单纯形求解器。SimplexSolver
(double epsilon) 使用指定的接受误差量构建单纯形求解器。SimplexSolver
(double epsilon, int maxUlps) 使用指定的接受误差量构建单纯形求解器。SimplexSolver
(double epsilon, int maxUlps, double cutOff) 使用指定的接受误差量构建单纯形求解器。 -
方法概要
修饰符和类型方法说明protected void
doIteration
(org.hipparchus.optim.linear.SimplexTableau tableau) 在给定模型上运行单纯形法的一个迭代。执行优化算法的大部分工作。optimize
(OptimizationData... optData) 存储数据并执行优化。protected void
parseOptimizationData
(OptimizationData... optData) 扫描表征问题的(必需和可选)优化数据列表。protected void
solvePhase1
(org.hipparchus.optim.linear.SimplexTableau tableau) 解决单纯形法的第一阶段。从类继承的方法 org.hipparchus.optim.linear.LinearOptimizer
getConstraints, getFunction, isRestrictedToNonNegative
从类继承的方法 org.hipparchus.optim.nonlinear.scalar.MultivariateOptimizer
computeObjectiveValue, getGoalType
从类继承的方法 org.hipparchus.optim.BaseMultivariateOptimizer
getLowerBound, getStartPoint, getUpperBound
从类继承的方法 org.hipparchus.optim.BaseOptimizer
getConvergenceChecker, getEvaluations, getIterations, getMaxEvaluations, getMaxIterations, incrementEvaluationCount, incrementIterationCount, optimize
-
构造器详细资料
-
SimplexSolver
public SimplexSolver()使用默认设置构建单纯形求解器。 -
SimplexSolver
public SimplexSolver(double epsilon) 使用指定的接受误差量构建单纯形求解器。- 参数:
-
epsilon
- 用于算法收敛的误差量。
-
SimplexSolver
public SimplexSolver(double epsilon, int maxUlps) 使用指定的接受误差量构建单纯形求解器。- 参数:
-
epsilon
- 用于算法收敛的误差量。 -
maxUlps
- 浮点比较中接受的误差量。
-
SimplexSolver
public SimplexSolver(double epsilon, int maxUlps, double cutOff) 使用指定的接受误差量构建单纯形求解器。- 参数:
-
epsilon
- 用于算法收敛的误差量。 -
maxUlps
- 浮点比较中接受的误差量。 -
cutOff
- 小于cutOff的值被视为零。
-
-
方法详细资料
-
optimize
存储数据并执行优化。参数列表是开放式的,因此子类可以使用特定于其具体实现的参数扩展它。
当多次调用该方法时,仅当实际存在于参数列表中时,实例数据才会被覆盖:当未指定时,前一次调用中设置的数据将保留(因此在后续调用中是可选的)。
重要提示:子类必须覆盖
BaseOptimizer.parseOptimizationData(OptimizationData[])
如果它们需要注册自己的选项;但是,它们还必须在该方法中调用super.parseOptimizationData(optData)
。- 覆盖:
-
optimize
在类中LinearOptimizer
- 参数:
-
optData
- 优化数据。除了LinearOptimizer
中记录的数据外,此方法还将注册以下数据: - 返回:
- 满足收敛标准的点/值对。
- 抛出:
-
MathIllegalStateException
- 如果超过最大迭代次数。 -
MathIllegalArgumentException
- 如果约束的维度与目标函数的维度不匹配
-
parseOptimizationData
扫描表征问题的(必需和可选)优化数据列表。- 覆盖:
-
parseOptimizationData
在类中LinearOptimizer
- 参数:
-
optData
- 优化数据。除了LinearOptimizer
中记录的数据外,此方法还将注册以下数据:
-
doIteration
protected void doIteration(org.hipparchus.optim.linear.SimplexTableau tableau) throws MathIllegalStateException 在给定模型上运行单纯形法的一个迭代。- 参数:
-
tableau
- 问题的简单表。 - 抛出:
-
MathIllegalStateException
- 如果允许的迭代次数已用完。 -
MathIllegalStateException
- 如果发现模型没有有界解。
-
solvePhase1
protected void solvePhase1(org.hipparchus.optim.linear.SimplexTableau tableau) throws MathIllegalStateException 解决单纯形法的第一阶段。- 参数:
-
tableau
- 问题的简单表。 - 抛出:
-
MathIllegalStateException
- 如果允许的迭代次数已用完,或者如果发现模型没有有界解,或者如果没有可行解
-
doOptimize
执行优化算法的大部分工作。- 指定者:
-
doOptimize
在类中BaseOptimizer<PointValuePair>
- 返回:
- 给出目标函数最优值的点/值对。
- 抛出:
-
MathIllegalStateException
-