Пример #1
0
    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();
        }
    }
Пример #2
0
    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);
    }
Пример #3
0
    private void evaluateChromosome(int index, RocketEvaluator evaluator)
    {
//		print("evaluate chromosome " + index);
        Chromosome chromosome = population.getChromosomes()[index];

        evaluator.startEvaluation(chromosome.getWeights(), index);
        ++chromosomesInEvaluation;
    }
Пример #4
0
    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);
    }
Пример #5
0
    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();
    }
Пример #6
0
    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;
            }
        }
    }
Пример #7
0
    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));
        }
    }
Пример #8
0
    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");
        }
    }
Пример #9
0
 public static NeuralNet CreateNeuralNet(RocketEvaluator evaluator)
 {
     return(new NeuralNet(NeuronMode.NEURON, true, 3 + 3 + 4, evaluator.getOutputsRequired(), (3 + 3 + 4) * 2, 2));
 }