public void reportFitness(RocketEvaluator evaluator, double fitness, int index) { totalFitness += fitness; --chromosomesInEvaluation; Chromosome chromosome = population.getChromosomes()[index]; chromosome.setFitness(fitness); if (currentBest == null || chromosome.getFitness() > currentBest.getFitnessScore()) { print("recording best fitness as: " + chromosome.getFitness()); BestEntry newBest = new BestEntry(population.getCurrentGenerationNumber(), new List <double>(chromosome.getWeights()), chromosome.getFitness()); currentBest = newBest; bests.Add(newBest); } // print("current index: " + currentChromosomeIndex); if (currentChromosomeIndex < populationSize - 1) { if (currentChromosomeIndex + chromosomesInEvaluation < populationSize - 1) { evaluateChromosome(currentChromosomeIndex + chromosomesInEvaluation + 1, evaluator); } ++currentChromosomeIndex; } else { // print("restart generation"); startNextGeneration(); } }
protected override void onBegin() { RocketEvaluator rocketEvaluator = (RocketEvaluator)evaluator; closestDistance = Vector3.Distance(rocketEvaluator.getTestSubject().transform.position, waypoint.transform.position); rocketEvaluator.getTestSubject().setTarget(waypoint.transform.position); waypoint.activate(this, rocketEvaluator.getTestSubject().gameObject); }
private void evaluateChromosome(int index, RocketEvaluator evaluator) { // print("evaluate chromosome " + index); Chromosome chromosome = population.getChromosomes()[index]; evaluator.startEvaluation(chromosome.getWeights(), index); ++chromosomesInEvaluation; }
protected override void onBegin() { RocketEvaluator rocketEvaluator = (RocketEvaluator)evaluator; currentWaypoint = 0; closestDistance = Vector3.Distance(rocketEvaluator.getTestSubject().transform.position, flightPath[0].transform.position); rocketEvaluator.getTestSubject().setTarget(flightPath[0].transform.position); flightPath[0].activate(this, rocketEvaluator.getTestSubject().gameObject); }
void Start() { for (int i = 0; i < conncurrentSimulators; ++i) { RocketEvaluator simulator = Instantiate(simulatorPrefab); simulator.evolutionator = this; simulators.Add(simulator); } population = new Population(null, CreateNeuralNet(simulators[0]), populationSize, .03, .3, .7); runEvaluation(); }
protected override void onUpdate() { RocketEvaluator rocketEvaluator = (RocketEvaluator)evaluator; if (started) { float currentDistance = Vector3.Distance(rocketEvaluator.getTestSubject().transform.position, waypoint.transform.position); if (currentDistance < closestDistance) { closestDistance = currentDistance; } } }
protected override void onTimeout() { RocketEvaluator rocketEvaluator = (RocketEvaluator)evaluator; if (!closestDistanceAtEnd) { scenarioScore += 1.0 / (1.0 + closestDistance); } else { scenarioScore += 1.0 / (1.0 + Vector3.Distance(rocketEvaluator.getTestSubject().transform.position, waypoint.transform.position)); } }
public override void waypointReached() { RocketEvaluator rocketEvaluator = (RocketEvaluator)evaluator; print("Waypoint reached!!!"); timer -= 10; closestDistance = 0f; scenarioScore += 1.0; ++currentWaypoint; if (currentWaypoint < flightPath.Count) { flightPath[currentWaypoint].activate(this, rocketEvaluator.getTestSubject().gameObject); rocketEvaluator.getTestSubject().setTarget(flightPath[currentWaypoint].transform.position); } else { evaluator.reportScenarioScore(scenarioScore); //started = false; print("setting started to false"); } }
public static NeuralNet CreateNeuralNet(RocketEvaluator evaluator) { return(new NeuralNet(NeuronMode.NEURON, true, 3 + 3 + 4, evaluator.getOutputsRequired(), (3 + 3 + 4) * 2, 2)); }