Created
July 28, 2017 15:17
-
-
Save anonymous/70fac11f3c0899d9df4ef6dd909259a2 to your computer and use it in GitHub Desktop.
JS Bin // source https://jsbin.com/yuzehiqaya
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html> | |
<head> | |
<meta charset="utf-8"> | |
<meta name="viewport" content="width=device-width"> | |
<title>JS Bin</title> | |
</head> | |
<body> | |
<script id="jsbin-javascript"> | |
var TARGET = "METHINKS IT IS LIKE A WEASEL".toUpperCase(); | |
var ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ ".toUpperCase(); | |
var MUT_PROB = 10; | |
function generateGenome() { | |
var genome = ''; | |
for (var i=0; i<28; i++) { | |
genome += ALPHABET[Math.floor(Math.random() * ALPHABET.length)]; | |
} | |
return genome; | |
} | |
// generateGenome(); | |
function getFitness(genome) { | |
return genome.split('').filter(function (char, index) { | |
return char === TARGET[index]; | |
}).length; | |
} | |
// getFitness(generateGenome()); | |
function getGenePool(genome) { | |
var pool = []; | |
for (var i=0; i<50; i++) { | |
pool[i] = genome; | |
} | |
return pool; | |
} | |
function getFittest(pool) { | |
return pool.sort(function (a, b) { | |
return getFitness(b) - getFitness(a); | |
})[0]; | |
} | |
function doMutation(genome) { | |
var newGenome = ''; | |
genome.split('').forEach(function (gene, i) { | |
if (gene != TARGET[i]) { | |
newGenome += ALPHABET[Math.floor(Math.random() * ALPHABET.length)]; | |
} else { | |
newGenome += gene; | |
} | |
}); | |
return newGenome; | |
} | |
var _i = 0; | |
function evolve() { | |
var genome = generateGenome(); | |
var pool = getGenePool(genome); | |
while (getFitness(getFittest(pool)) < 28) { | |
genome = doMutation(genome); | |
pool = getGenePool(genome); | |
_i++; | |
if (_i % 10 === 0) { | |
console.log('evole ::' + _i + ' :: ' + genome); | |
} | |
} | |
return genome; | |
} | |
genome = evolve(); | |
console.log('complete at ' + _i + ' ' + genome); | |
// doMutation(genome); | |
// getFittest(getGenePool(genome)); | |
</script> | |
<script id="jsbin-source-javascript" type="text/javascript">var TARGET = "METHINKS IT IS LIKE A WEASEL".toUpperCase(); | |
var ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ ".toUpperCase(); | |
var MUT_PROB = 10; | |
function generateGenome() { | |
var genome = ''; | |
for (var i=0; i<28; i++) { | |
genome += ALPHABET[Math.floor(Math.random() * ALPHABET.length)]; | |
} | |
return genome; | |
} | |
// generateGenome(); | |
function getFitness(genome) { | |
return genome.split('').filter(function (char, index) { | |
return char === TARGET[index]; | |
}).length; | |
} | |
// getFitness(generateGenome()); | |
function getGenePool(genome) { | |
var pool = []; | |
for (var i=0; i<50; i++) { | |
pool[i] = genome; | |
} | |
return pool; | |
} | |
function getFittest(pool) { | |
return pool.sort(function (a, b) { | |
return getFitness(b) - getFitness(a); | |
})[0]; | |
} | |
function doMutation(genome) { | |
var newGenome = ''; | |
genome.split('').forEach(function (gene, i) { | |
if (gene != TARGET[i]) { | |
newGenome += ALPHABET[Math.floor(Math.random() * ALPHABET.length)]; | |
} else { | |
newGenome += gene; | |
} | |
}); | |
return newGenome; | |
} | |
var _i = 0; | |
function evolve() { | |
var genome = generateGenome(); | |
var pool = getGenePool(genome); | |
while (getFitness(getFittest(pool)) < 28) { | |
genome = doMutation(genome); | |
pool = getGenePool(genome); | |
_i++; | |
if (_i % 10 === 0) { | |
console.log('evole ::' + _i + ' :: ' + genome); | |
} | |
} | |
return genome; | |
} | |
genome = evolve(); | |
console.log('complete at ' + _i + ' ' + genome); | |
// doMutation(genome); | |
// getFittest(getGenePool(genome)); | |
</script></body> | |
</html> |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
var TARGET = "METHINKS IT IS LIKE A WEASEL".toUpperCase(); | |
var ALPHABET = "ABCDEFGHIJKLMNOPQRSTUVWXYZ ".toUpperCase(); | |
var MUT_PROB = 10; | |
function generateGenome() { | |
var genome = ''; | |
for (var i=0; i<28; i++) { | |
genome += ALPHABET[Math.floor(Math.random() * ALPHABET.length)]; | |
} | |
return genome; | |
} | |
// generateGenome(); | |
function getFitness(genome) { | |
return genome.split('').filter(function (char, index) { | |
return char === TARGET[index]; | |
}).length; | |
} | |
// getFitness(generateGenome()); | |
function getGenePool(genome) { | |
var pool = []; | |
for (var i=0; i<50; i++) { | |
pool[i] = genome; | |
} | |
return pool; | |
} | |
function getFittest(pool) { | |
return pool.sort(function (a, b) { | |
return getFitness(b) - getFitness(a); | |
})[0]; | |
} | |
function doMutation(genome) { | |
var newGenome = ''; | |
genome.split('').forEach(function (gene, i) { | |
if (gene != TARGET[i]) { | |
newGenome += ALPHABET[Math.floor(Math.random() * ALPHABET.length)]; | |
} else { | |
newGenome += gene; | |
} | |
}); | |
return newGenome; | |
} | |
var _i = 0; | |
function evolve() { | |
var genome = generateGenome(); | |
var pool = getGenePool(genome); | |
while (getFitness(getFittest(pool)) < 28) { | |
genome = doMutation(genome); | |
pool = getGenePool(genome); | |
_i++; | |
if (_i % 10 === 0) { | |
console.log('evole ::' + _i + ' :: ' + genome); | |
} | |
} | |
return genome; | |
} | |
genome = evolve(); | |
console.log('complete at ' + _i + ' ' + genome); | |
// doMutation(genome); | |
// getFittest(getGenePool(genome)); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment