Java - Ackley 测试函数

标签 java mathematical-optimization evolutionary-algorithm

我正在测试一种新的优化算法,并且有一个完整的 Java 测试框架。我将其与之前论文的结果进行比较(其中一篇是著名的 CLPSO 论文)。有关该功能的更多信息 - http://www.sfu.ca/~ssurjano/ackley.html

Ackley 函数众所周知,并且是我的测试套件的一部分,尽管在该函数的 Java 实现中,我似乎无法使函数最小值为 0(对于所有 i,这应该发生在 x[i] = 0 时)。我猜这是 Java 中 exp 的一些舍入/处理。有什么减少这些计算错误的建议吗(必须是 Java 语言)?我当前的实现是:

public double f(double[] x) {
double sum1 = 0.0;
double sum2 = 0.0;

for (int i = 0 ; i < x.length ; i ++) {
        sum1 += Math.pow(x[i], 2);
        sum2 += (Math.cos(2*Math.PI*x[i]));
}

return (-20.0 * Math.exp(-0.2 * Math.sqrt(sum1 / ((double )x.length))) - 
                Math.exp(sum2 / ((double )x.length)) + 20.0 + Math.exp(1));
}

我目前在 vector X = 0 处获得最小值 8.881784197001252E-16

--与顺序/括号有关...

    return -20.0*Math.exp(-0.2*Math.sqrt(sum1 / ((double )x.length))) + 20
                     - Math.exp(sum2 /((double )x.length)) + Math.exp(1.0);

最佳答案

问题在于括号和计算顺序(不要问我如何或为什么!)

return -20.0*Math.exp(-0.2*Math.sqrt(sum1 / ((double )x.length))) + 20
                 - Math.exp(sum2 /((double )x.length)) + Math.exp(1.0);

关于Java - Ackley 测试函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31548955/

相关文章:

java - os.s.boot.SpringApplication : Application run failed

python - 如何使用惩罚方法最小化违反约束的二次目标函数

c# - 序列化问题(参数对象的类型不是原始类型)

java - 用 ANN 求解 XOR 的进化算法的改进

java - 尝试获取 2 个 arrayList 并将它们相乘并将新值存储到新的 arrayList 中以查找最小值/最大值

java - 在java文件中以加密格式存储数据?

java - 在网格首次附加后为网格单元添加(悬停)监听器

python - 在 numpy 中向量化求根

c++ - COIN BCP框架中如何获取全局下界

machine-learning - 如何利用赫布学习?