Skip to content

Instantly share code, notes, and snippets.

@olragon
Forked from anonymous/index.html
Last active July 28, 2017 15:18
Show Gist options
  • Save olragon/e2bd1d1b6db91fec50a358f0342946a3 to your computer and use it in GitHub Desktop.
Save olragon/e2bd1d1b6db91fec50a358f0342946a3 to your computer and use it in GitHub Desktop.
Genetic Algorithm - JS Bin// source https://jsbin.com/yuzehiqaya
<!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>
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