From 9fbeab4652b075fb545cbe54984a91f91be1d627 Mon Sep 17 00:00:00 2001 From: sanine Date: Mon, 30 Oct 2023 00:43:26 -0500 Subject: implement mut_genome_insert --- src/genome/genome.js | 16 ++++++++++++++++ src/genome/genome.test.js | 25 +++++++++++++++++++++++++ 2 files changed, 41 insertions(+) (limited to 'src') diff --git a/src/genome/genome.js b/src/genome/genome.js index 7688b32..d35b68c 100644 --- a/src/genome/genome.js +++ b/src/genome/genome.js @@ -104,3 +104,19 @@ export function mut_genome_expand( n_input, n_internal+1, n_output, new_genome, ]; } + + +export function mut_genome_insert( + [n_input, n_internal, n_output, genome], + weight_max, + r1, r2, r3 +) { + const source = Math.floor((n_input + n_internal) * r1); + const sink = Math.floor((n_internal + n_output) * r2) + n_input; + const weight = weight_max * ((2*r3)-1); + + return [ + n_input, n_internal, n_output, + [...genome, [source, sink, weight]], + ]; +} diff --git a/src/genome/genome.test.js b/src/genome/genome.test.js index 11b2d31..d7dbe72 100644 --- a/src/genome/genome.test.js +++ b/src/genome/genome.test.js @@ -7,6 +7,7 @@ import { mut_gene_sink, mut_gene_weight, mut_genome_expand, + mut_genome_insert, } from './genome'; @@ -161,3 +162,27 @@ test('expand genome', () => { ], ]); }); + + +test('insert new genes', () => { + const n_input = 1; + const n_internal = 2; + const n_output = 1; + const weight_max = 4; + + expect(mut_genome_insert([ + n_input, n_internal, n_output, + [] + ], weight_max, 0, 0.5, 0)).toEqual([ + n_input, n_internal, n_output, + [[0, 2, -4]] + ]); + + expect(mut_genome_insert([ + n_input, n_internal, n_output, + [[0, 2, -4]] + ], weight_max, 0.99, 0, 1)).toEqual([ + n_input, n_internal, n_output, + [[0, 2, -4], [2, 1, 4]] + ]); +}); -- cgit v1.2.1