-
-
Save olragon/e2bd1d1b6db91fec50a358f0342946a3 to your computer and use it in GitHub Desktop.
Genetic Algorithm - JS Bin// source https://jsbin.com/yuzehiqaya
This file contains hidden or 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 hidden or 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