1
我正在測試一種新的優化算法,並在Java中有一個完整的測試框架。我將這與以前的論文結果進行了比較(其中一個是衆所周知的CLPSO論文)。關於函數的更多信息 - http://www.sfu.ca/~ssurjano/ackley.htmlJava - Ackley測試函數
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));
}
我目前在我的向量X = 0
--something與訂單/括號做得到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);
想知道如果對這些您需要的行數: 'sum1 + = Math.pow(x [i],2.0); sum2 + =(Math.cos(2.0 * Math.PI * x [i]));' 這也可能有助於使最後一行有'Math.exp(1.0)' 類似的問題整數除法,但與地板/舍入? –
嗨賈森,不幸的是我希望它是這麼簡單,鑑於值是2和1應該沒有類型轉換/數字格式錯誤,我試圖檢查,仍然得到8.881784197001252E-16,在我的X = 0向量 –
我懂了。 爲了讓問題更容易理解,您可以添加您在for循環中獲得的總和的樣本值嗎? –