我老實說不太清楚,如果我正確地標題這個問題,因爲我不能確定問題。另外,請記住,我仍然有很多需要了解進化算法的知識,並且不是以任何方式掌握它們的。瀏覽器誤讀Document.write()
下面的代碼是一個簡單的遺傳算法,如果你甚至想這麼稱呼它的話。它遺漏了真正的完整遺傳算法的多個特徵,但它僅僅是示範的一個例子。它所做的只是一個字符串(在這種情況下由我預先確定)並對它進行變異,一次一個字符,直到字符串變成「Hello,world!」。看看:
var source2 = "og834tnUEF*bt"; //random string
var target2 = "Hello, world!";
function fitness(source, target) {
var fitval = 0;
for(var i = 0; i < source.length; i++) {
fitval += Math.pow(target.charCodeAt(i) - source.charCodeAt(i), 2);
} return (fitval);
}
function mutate(source) {
var charpos = Math.floor(Math.random() * source.length);
parts = source.split("");
var temp = String.fromCharCode(source.charCodeAt(charpos) + (Math.random() < 0.5 ? -1 : 1));
parts[charpos] = temp;
return (parts.join(""));
}
//functions end
var fitval = fitness(source2, target2);
var p = 0;
while(true) {
p += 1;
mutant = mutate(source2);
mutFit = fitness(mutant, target2);
if (mutFit < fitval) {
fitval = mutFit;
source2 = mutant;
document.write(p + " : " + mutFit + " : " + mutant + "<br />");
} if (fitval === 0) break;
}
我不相信算法的描述很重要,因爲我沒有問題的代碼。這行在這裏:
document.write(p + " : " + mutFit + " : " + mutant + "<br />");
似乎是給我的問題。儘管最後包含一個換行符,但瀏覽器中的輸出無時無刻都會偶爾分組。看看這裏的JSFiddle:https://jsfiddle.net/oaahzsuf/
注意輸出綁定?我發現分組似乎每次出現分號都會發生變化,但我不知道與什麼有關。關於什麼是問題的任何想法?我覺得我可以忽略簡單的東西,所以任何幫助表示讚賞。