summaryrefslogtreecommitdiff
path: root/src/simulation/game.js
diff options
context:
space:
mode:
Diffstat (limited to 'src/simulation/game.js')
-rw-r--r--src/simulation/game.js22
1 files changed, 13 insertions, 9 deletions
diff --git a/src/simulation/game.js b/src/simulation/game.js
index 20c5e4e..f95fbc4 100644
--- a/src/simulation/game.js
+++ b/src/simulation/game.js
@@ -2,10 +2,13 @@
import { random_choice, apply, shuffle } from '../util.js';
+import { mut_genome_insert, parse_genome } from '../genome/genome.js';
+import { world_update } from '../world/world.js';
import { senses } from './senses.js';
import { actions } from './actions.js';
import { lattice_rules } from './lattice_rules.js';
import { validity } from './validity.js';
+import { postprocess } from './postprocess.js';
function is_wall(size, x, y) {
@@ -89,22 +92,22 @@ export function create_world(size, teams) {
// games
// }
+const N_INPUT = senses.reduce((acc, sense) => acc + sense.size, 0);
+const N_OUTPUT = actions.reduce((acc, action) => acc + action.size, 0);
+const MAX_MUTATIONS = 15;
+
let agent_id = 0;
export function create_agent(genome, n_internal) {
return {
id: agent_id++, // !!!! side effect !!!!
- net: parse_genome,
+ net: parse_genome(N_INPUT, N_OUTPUT, genome),
state: [...Array(n_internal)].map(_ => (2*Math.random()) - 1),
}
}
-const N_INPUT = senses.reduce((acc, sense) => acc + sense.size, 0);
-const N_OUTPUT = actions.reduce((acc, action) => acc + action.size, 0);
-const MAX_MUTATIONS = 15;
-
export function create_team(size, genome_size, n_internal) {
const genome = apply(
@@ -112,6 +115,7 @@ export function create_team(size, genome_size, n_internal) {
genome_size,
[N_INPUT, n_internal, N_OUTPUT, []],
).slice(-1)[0];
+ console.log(N_INPUT, N_OUTPUT, genome);
const agents = [...Array(size)].map(_ => create_agent(genome, n_internal));
return { agents, genome, score: 0, games: 0 };
@@ -149,7 +153,7 @@ export function child_team(team, keep=Math.floor(team.size/2)) {
export function create_game(teams, team_indices) {
- const world = create_world(999, team_indices.map(i => teams[i].agents));
+ const world = create_world(100, team_indices.map(i => teams[i].agents));
return { world, team_indices, time: 0 };
}
@@ -157,7 +161,7 @@ export function create_game(teams, team_indices) {
export function step_game(game) {
return {
...game,
- world: world_update(world, postprocess),
+ world: world_update(game.world, postprocess),
time: game.time + 1,
};
}
@@ -202,7 +206,7 @@ function random_indices(teams) {
acc.splice(idx, 1);
return acc;
},
- teams.keys()
+ [...teams.keys()]
);
}
@@ -239,7 +243,7 @@ export function update_epoch(epoch) {
return [...Array(count > 0 ? count : 1)].map(x => team)
})
.flat();
- const new_teams = [...Array(epoch.teams.length]
+ const new_teams = [...Array(epoch.teams.length)]
.reduce((acc) => child_team(random_choice(source_teams)), []);
return create_epoch(new_teams);
}