Still cant get neat arena to work
This commit is contained in:
66
src/lib/neatArena/curriculum_e2e.test.ts
Normal file
66
src/lib/neatArena/curriculum_e2e.test.ts
Normal file
@@ -0,0 +1,66 @@
|
||||
|
||||
import { describe, test, expect } from 'bun:test';
|
||||
import { createPopulation, evolveGeneration, getPopulationStats, DEFAULT_EVOLUTION_CONFIG } from './evolution';
|
||||
import { evaluatePopulation, DEFAULT_MATCH_CONFIG } from './selfPlay';
|
||||
|
||||
// Extended configuration for Long-term Test
|
||||
const LONG_RUN_CONFIG = {
|
||||
...DEFAULT_EVOLUTION_CONFIG,
|
||||
populationSize: 50, // Smaller pop for faster test speed
|
||||
};
|
||||
|
||||
const MATCH_CONFIG = {
|
||||
...DEFAULT_MATCH_CONFIG,
|
||||
matchesPerGenome: 6, // 2 Static + 2 Spinner + 2 Peer
|
||||
maxTicks: 300,
|
||||
};
|
||||
|
||||
describe('Curriculum Evolution Long-term', () => {
|
||||
test('Should reliably evolve High Fitness over 50 generations', () => {
|
||||
let population = createPopulation(LONG_RUN_CONFIG);
|
||||
const history: number[] = [];
|
||||
|
||||
console.log('\n--- Starting Long-term Curriculum Test (50 Gens) ---');
|
||||
|
||||
for (let gen = 0; gen < 50; gen++) {
|
||||
try {
|
||||
// 1. Evaluate
|
||||
const evaluatedPop = evaluatePopulation(population, MATCH_CONFIG);
|
||||
const stats = getPopulationStats(evaluatedPop);
|
||||
|
||||
history.push(stats.avgFitness);
|
||||
|
||||
console.log(`Gen ${gen}: Avg ${stats.avgFitness.toFixed(2)} | Max ${stats.maxFitness.toFixed(2)} | Species ${stats.speciesCount}`);
|
||||
|
||||
// Checks
|
||||
if (gen === 0) {
|
||||
if (stats.avgFitness <= 1.0) {
|
||||
console.error(`FAILURE at Gen 0: Avg Fitness ${stats.avgFitness} <= 1.0`);
|
||||
}
|
||||
expect(stats.avgFitness).toBeGreaterThan(1.0);
|
||||
}
|
||||
|
||||
if (gen === 20) {
|
||||
if (stats.avgFitness <= 12.0) {
|
||||
console.error(`FAILURE at Gen 20: Avg Fitness ${stats.avgFitness} <= 12.0`);
|
||||
}
|
||||
expect(stats.avgFitness).toBeGreaterThan(12.0);
|
||||
}
|
||||
|
||||
// 2. Evolve
|
||||
population = evolveGeneration(evaluatedPop, LONG_RUN_CONFIG);
|
||||
} catch (e) {
|
||||
console.error(`CRASH at Gen ${gen}:`, e);
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
|
||||
console.log('--- Test Complete ---');
|
||||
|
||||
// Final Success Criteria
|
||||
const finalStats = getPopulationStats(evaluatePopulation(population, MATCH_CONFIG));
|
||||
console.log(`Final Gen: Avg ${finalStats.avgFitness.toFixed(2)}`);
|
||||
|
||||
expect(finalStats.avgFitness).toBeGreaterThan(15.0); // Better than just Static + Spinner?
|
||||
}, 600000); // 10 minute timeout
|
||||
});
|
||||
Reference in New Issue
Block a user