| @ -0,0 +1,104 @@ | |||
| <html> | |||
| <head> | |||
| <script> | |||
| class Gene | |||
| { | |||
| constructor(min, max, value) | |||
| { | |||
| this.min = min; | |||
| this.max = max; | |||
| this.value = value; | |||
| } | |||
| getRealValue() | |||
| { | |||
| return (this.max - this.min) * this.value + this.min; | |||
| } | |||
| getValue() | |||
| { | |||
| return this.value; | |||
| } | |||
| setValue(val) | |||
| { | |||
| this.value = val; | |||
| } | |||
| makeClone() | |||
| { | |||
| return new Gene(this.min, this.max, this.value); | |||
| } | |||
| } | |||
| class Chromosome | |||
| { | |||
| constructor(geneArray) | |||
| { | |||
| this.genes = []; | |||
| for(let i = 0; i < geneArray.length; i++) | |||
| { | |||
| this.genes.push(geneArray[i].makeClone()); | |||
| } | |||
| } | |||
| getGenes() | |||
| { | |||
| return this.genes; | |||
| } | |||
| mutate() | |||
| { | |||
| this.genes[Math.round(Math.random() * (this.genes.length-1))].setValue(Math.random()); | |||
| } | |||
| } | |||
| const mate = function(father, mother) | |||
| { | |||
| let son = new Chromosome(father.getGenes()); | |||
| let daughter = new Chromosome(mother.getGenes()); | |||
| for(let i = 0;i < son.getGenes().length; i++) | |||
| { | |||
| let blendCoef = Math.random(); | |||
| blendGene(son.getGenes()[i], daughter.getGenes()[i], blendCoef); | |||
| } | |||
| }; | |||
| const blendGene = function(gene1, gene2, blendCoef) | |||
| { | |||
| let value1 = (blendCoef * gene1.getValue()) + | |||
| (gene2.getValue() * (1- blendCoef)); | |||
| let value2 = ((1-blendCoef) * gene1.getValue()) + | |||
| (gene2.getValue() * blendCoef); | |||
| gene1.setValue(value1); | |||
| gene2.setValue(value2); | |||
| }; | |||
| let gene1 = new Gene(1,10,.6); | |||
| let gene2 = new Gene(2,5,0.4); | |||
| let geneList = [gene1, gene2]; | |||
| var c = new Chromosome(geneList); | |||
| var c2 = new Chromosome(c.getGenes()); | |||
| console.log(c.getGenes()); | |||
| console.log(c2.getGenes()); | |||
| c.mutate(); | |||
| c.mutate(); | |||
| console.log(c.getGenes()); | |||
| console.log(c2.getGenes()); | |||
| </script> | |||
| </head> | |||
| <body> | |||
| </body> | |||
| </html> | |||