<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>
							 |