我正在尝试使用Apache
Commons数学库3.5+版本来解决优化问题。基本上,我试图将(gamma)分布拟合到某些数据点。我似乎找不到任何有关如何使用新的(版本3.5)优化工具(例如SimplexSolver,SimplexOptimizer或OptimizationData)解决琐碎的优化问题的简单示例。
之前曾在这里问过类似的问题,但是所有答案似乎都是针对较旧版本的apache数学-在3.5中,所有内容都进行了重组,而我找不到的示例代码都能奏效。
有没有人有一个可行的示例,说明如何使用新的优化器或求解器?我对SimplexOptimizer最为感兴趣,但是在这一点上,任何事情都会有用。
确实,优化器可能很难使用:许多参数,其中不同类型的优化器需要不同的组合,并且它们都隐藏在所OptimizationData
接收的通用数组中。除非您开始将代码与它们所引用的论文相匹配,否则您将很难从中获得任何结果。
我还想偶尔使用一些求解器/优化器,对我来说,可靠的,有效的“示例”的主要来源是这些类的 单元测试
,它们通常非常复杂,并且涵盖很多情况。例如,关于SimplexOptimizer
,您可能想看看org/apache/commons/math4/optim/nonlinear/scalar/noderiv/
包含测试类SimplexOptimizerMultiDirectionalTest.java
和的测试用例
SimplexOptimizerNelderMeadTest.java
。
(对不起,也许这不是您期望或希望的,但是…当我试图弄清楚OptimizationData
这些优化器实际需要哪些时,我发现这些测试非常有帮助…)
编辑
仅供参考,是一个完整的示例,该示例摘自以下基本单元测试之一:
import java.util.Arrays;
import org.apache.commons.math3.analysis.MultivariateFunction;
import org.apache.commons.math3.optim.InitialGuess;
import org.apache.commons.math3.optim.MaxEval;
import org.apache.commons.math3.optim.PointValuePair;
import org.apache.commons.math3.optim.nonlinear.scalar.GoalType;
import org.apache.commons.math3.optim.nonlinear.scalar.ObjectiveFunction;
import org.apache.commons.math3.optim.nonlinear.scalar.noderiv.NelderMeadSimplex;
import org.apache.commons.math3.optim.nonlinear.scalar.noderiv.SimplexOptimizer;
import org.apache.commons.math3.util.FastMath;
public class SimplexOptimizerExample
{
public static void main(String[] args)
{
SimplexOptimizer optimizer = new SimplexOptimizer(1e-10, 1e-30);
final FourExtrema fourExtrema = new FourExtrema();
final PointValuePair optimum =
optimizer.optimize(
new MaxEval(100),
new ObjectiveFunction(fourExtrema),
GoalType.MINIMIZE,
new InitialGuess(new double[]{ -3, 0 }),
new NelderMeadSimplex(new double[]{ 0.2, 0.2 }));
System.out.println(Arrays.toString(optimum.getPoint()) + " : "
+ optimum.getSecond());
}
private static class FourExtrema implements MultivariateFunction
{
// The following function has 4 local extrema.
final double xM = -3.841947088256863675365;
final double yM = -1.391745200270734924416;
final double xP = 0.2286682237349059125691;
final double yP = -yM;
final double valueXmYm = 0.2373295333134216789769; // Local maximum.
final double valueXmYp = -valueXmYm; // Local minimum.
final double valueXpYm = -0.7290400707055187115322; // Global minimum.
final double valueXpYp = -valueXpYm; // Global maximum.
public double value(double[] variables)
{
final double x = variables[0];
final double y = variables[1];
return (x == 0 || y == 0) ? 0 : FastMath.atan(x)
* FastMath.atan(x + 2) * FastMath.atan(y) * FastMath.atan(y)
/ (x * y);
}
}
}
问题内容: 因此,我在这里已经读到,在Vue.js中,可以使用或在选择器中创建适用于子组件内部元素的样式规则。但是,无论是在SCSS还是普通的旧CSS中,尝试以我的样式使用它均无效。而是将它们原样发送到浏览器,因此无效。例如: home.vue: 生成的CSS: 我想要的是: 我与之相关的webpack配置如下所示: 所以我的问题是,如何让该操作员工作? 我已经找到了这个答案,但我确实在这样做,而
在一个flink项目中,我使用一个case类click。 这个类填充了数据集,并且在日期为Java8的情况下可以很好地工作。在Java7环境中切换到org.joda(Version2.9)之后,对数据集中的click对象的调用不像以前那样执行。对click对象的date字段的某些函数的访问引发。这些函数的例子有等。我能够确保click类的日期字段不为空。我怀疑joda时间库与kryo序列化的交互不
问题内容: 我想使用或在C中使用。我该怎么做?我不知道如何用C处理它们,如果有人知道,请告诉我如何。谢谢。 问题答案: 通常,最好避免打开文件以获取随机数据,因为该过程中存在多个故障点。 在最近的Linux发行版,该系统调用可用来获取加密安全随机数,它不能失败 ,如果 是 没有 指定为标志和读取量最多256个字节。 截至2017年10月,OpenBSD,Darwin和Linux(带有)现在都已实现
我是SpringAMQP的新手。我有一个应用程序是生产者发送消息给另一个应用程序是消费者。 一旦消费者收到消息,我们将对数据进行验证。 如果数据是正确的,我们必须确认,消息应该从队列中删除。如果数据不正确,我们必须对数据进行NACK(否定确认),以便它在RabbitMQ中重新排队。 我偶然发现
问题内容: 我还不能弄清楚如何在Swift中获取a的子字符串: 我无法在Swift中创建范围。在Playground中自动完成并不是超级有帮助-这说明: 我在Swift标准参考库中找不到任何有帮助的东西。这是另一个疯狂的猜测: 还有这个: 我看过其他答案(在SwiftString中查找字符的索引),似乎暗示着由于是的桥类型,因此“旧”方法应该起作用,但尚不清楚如何- 例如,这也不起作用(似乎不是有
显然IE(11)在方面存在问题,例如在事件方面。IE是否有其他方法获得? 下面是一个在IE中产生错误的示例:https://jsfiddle.net/rnyqy78m/