Esempio n. 1
0
    private float fitness(CPPN cppn, int evaluationIterations)
    {
        Vector2 vel              = new Vector2();
        Vector2 prevVel          = new Vector2();
        Vector2 pos              = new Vector2();
        float   traveledDistance = 0;

        for (int i = 0; i < evaluationIterations; i++)
        {
            prevVel = new Vector2(vel.x, vel.y);
            float[] input  = { vel[0], vel[1], traveledDistance };
            float[] result = cppn.setInputGetoutput(input);
            Vector2 res    = new Vector2(result[0], result[1]);
            if (res.magnitude > maxSpeed)
            {
                res *= maxSpeed / res.magnitude;
            }
            vel[0]           += Mathf.Clamp(res[0], -maxSpeed * Time.deltaTime, maxSpeed * Time.deltaTime);
            vel[1]           += Mathf.Clamp(res[1], -maxSpeed * Time.deltaTime, maxSpeed * Time.deltaTime);
            traveledDistance += vel.magnitude;
            pos += vel;
        }

        return(traveledDistance / (pos.magnitude * 0.5f));
    }
Esempio n. 2
0
    private void Start()
    {
        init();
        CPPN winner = createRandomAndGetWinner(100, 1000);

        spawnWinner(winner);
        StartCoroutine(autoSpawner(winner));
    }
Esempio n. 3
0
        public static void RunEvolution2()
        {
            var      bmp = new System.Drawing.Bitmap(FILE_IN);
            ImageSys img = new ImageSys(bmp);
            Texture  txt = new Interpolent(img, Intpol.Nearest);

            //var fitness = BuildFitness(txt);
            Console.WriteLine("Collecting Sample Points...");
            ControlPoints.BuildData();
            Fitness <CPPN> fitness = x => ControlPoints.GradeImage(x);

            EvolSpecies <CPPN> evolver = new EvolSpecies <CPPN>(500, 1.0, fitness); //100, 0.1
            CPPN best  = new CPPN();
            CPPN proto = new CPPN();


            Renderor ren    = new Renderor();
            ImageSys output = new ImageSys(256, 256);

            //img.BMP.Save(FILE_OUT + "test.png");

            Console.WriteLine("Aproximating Image: " + FILE_IN);
            evolver.Initialise(best);

            for (int i = 0; i < MAX_GEN; i++)
            {
                Console.WriteLine();
                string index = i.ToString("0000");

                Console.WriteLine("Rendering Best Fit...");
                ren.Render(best, output);
                output.BMP.Save(FILE_OUT + "A" + index + ".png");

                Console.WriteLine("Rendering Random Species...");
                ren.Render(proto, output);
                output.BMP.Save(FILE_OUT + "B" + index + ".png");

                int    nodes = best.NumNurons;
                int    axons = best.NumAxons;
                double fit   = evolver.TopFitness;

                Console.WriteLine();
                Console.WriteLine("Generation " + i + ": " + nodes + " " + axons + " " + fit);
                Console.WriteLine("Num Species: " + evolver.NumSpecies);
                Console.WriteLine("Threshold: " + evolver.Threshold.ToString("0.00"));

                ////we cannot have more species than there are indvidual organisms
                //if (evolver.NumSpecies > 100) throw new Exception();

                evolver.Evolve();
                evolver.GetTopSpec(best);
                evolver.GetRandProto(proto);
            }
        }
Esempio n. 4
0
    IEnumerator autoSpawner(CPPN cppn)
    {
        CPPN winner = cppn;

        while (true)
        {
            yield return(new WaitForSeconds(2));

            winner = createFromWinnerAndGetWinner(winner, 100, 1000);
            spawnWinner(winner);
        }
    }
Esempio n. 5
0
        public static void RandomMutaitons()
        {
            var      bmp     = new System.Drawing.Bitmap(FILE_IN);
            ImageSys img     = new ImageSys(bmp);
            Texture  txt     = new Interpolent(img, Intpol.Nearest);
            var      fitness = BuildFitness(txt);

            CPPN    network = new CPPN();
            VRandom rng     = new RandMT();

            network.Randomize(rng);

            Renderor ren    = new Renderor();
            ImageSys output = new ImageSys(256, 256);

            //img.BMP.Save(FILE_OUT + "test.png");

            Console.WriteLine("Building Network...");

            for (int i = 0; i < 200; i++)
            {
                network.Mutate(rng, 1.0);
            }


            Console.WriteLine("Aproximating Image: " + FILE_IN);



            //NOTE: Make it so we don't accept mutations that
            //result in NaN fitness!

            for (int i = 0; i < MAX_GEN; i++)
            {
                //network.Mutate(rng, 1.0); //0.1
                network.Randomize(rng);

                ren.Render(network, output);
                string file = i.ToString("0000") + ".png";

                output.BMP.Save(FILE_OUT + file);

                int    nodes = network.NumNurons;
                int    axons = network.NumAxons;
                double fit   = fitness(network);

                //Console.WriteLine();
                Console.WriteLine("Generation " + i + ": " + nodes + " " + axons + " " + fit);
            }
        }
Esempio n. 6
0
    private CPPN createRandomAndGetWinner(int amount, int evaluationIterations)
    {
        CPPN  winner      = null;
        float winnerScore = 0;

        for (int i = 0; i < amount; i++)
        {
            CPPN  cppn  = new CPPN(3, 2, neuronIA, connectionIA);
            float score = fitness(cppn, evaluationIterations);
            if (score > winnerScore)
            {
                winner      = cppn;
                winnerScore = score;
            }
        }
        Debug.Log("Won with " + winnerScore);
        return(winner);
    }
Esempio n. 7
0
    public float Fitness(CPPN cppn, int evaluationIterations)
    {
        //float output = 0;
        Vector2 vel = new Vector2();
        Vector2 pos = new Vector2();
        float   traveledDistance = 0;

        for (int i = 0; i < evaluationIterations; i++)
        {
            float[] input  = { vel[0], vel[1], traveledDistance };
            float[] result = cppn.setInputGetoutput(input);
            vel[0]            = Mathf.Clamp(result[0], -maxSpeed * Time.deltaTime, maxSpeed * Time.deltaTime);
            vel[1]            = Mathf.Clamp(result[1], -maxSpeed * Time.deltaTime, maxSpeed * Time.deltaTime);
            traveledDistance += vel.magnitude;
            pos += vel;
        }

        return(pos.magnitude + traveledDistance);
    }
Esempio n. 8
0
    private void Start()
    {
        int seed = Random.Range(0, 10000);

        Random.InitState(seed);
        Debug.Log("Seed: " + seed);
        CPPN cppn1 = new CPPN(3, 2, neuronIA, connectionIA);

        cppn1.printGenome();
        CPPN cppn2 = new CPPN(3, 2, neuronIA, connectionIA);

        cppn2.printGenome();
        CPPN.Genome genome = CPPNLib.Crossover(cppn1.genome, cppn2.genome);
        genome.mutate(neuronIA, connectionIA);
        cppn = new CPPN(genome, neuronIA, connectionIA);
        cppn.printGenome();
        Debug.Log("fitness: " + Fitness(cppn, 100));
        rb = GetComponent <Rigidbody>();
    }
Esempio n. 9
0
    private CPPN createFromWinnerAndGetWinner(CPPN cppn, int amount, int evaluationIterations)
    {
        CPPN  winner      = cppn;
        float winnerScore = fitness(cppn, evaluationIterations);

        for (int i = 0; i < amount; i++)
        {
            CPPN.Genome genome = cppn.genome.copy();
            genome.mutate(neuronIA, connectionIA);
            CPPN  newCppn = new CPPN(genome, neuronIA, connectionIA);
            float score   = fitness(newCppn, evaluationIterations);
            if (score > winnerScore)
            {
                winner      = newCppn;
                winnerScore = score;
            }
        }
        Debug.Log("Won with " + winnerScore);
        return(winner);
    }
Esempio n. 10
0
        public static void RunEvolution()
        {
            var      bmp = new System.Drawing.Bitmap(FILE_IN);
            ImageSys img = new ImageSys(bmp);
            Texture  txt = new Interpolent(img, Intpol.Nearest);

            var fitness = BuildFitness(txt);
            EvolMonogen <CPPN> evolver = new EvolMonogen <CPPN>(50, 0.1, fitness);
            CPPN best = new CPPN();

            evolver.Initialise(best);

            Renderor ren    = new Renderor();
            ImageSys output = new ImageSys(256, 256);

            //img.BMP.Save(FILE_OUT + "test.png");

            Console.WriteLine("Aproximating Image: " + FILE_IN);

            for (int i = 0; i < MAX_GEN; i++)
            {
                evolver.Evolve();
                evolver.GetTopSpec(best);

                ren.Render(best, output);
                string index = i.ToString("0000");
                output.BMP.Save(FILE_OUT + index + ".png");

                int    nodes = best.NumNurons;
                int    axons = best.NumAxons;
                double fit   = evolver.TopFitness;


                Console.WriteLine();
                Console.WriteLine("Generation " + i + ": " + nodes + " " + axons + " " + fit);
            }
        }
Esempio n. 11
0
 public void setup(CPPN icppn, float imaxSpeed)
 {
     rb       = GetComponent <Rigidbody>();
     cppn     = icppn;
     maxSpeed = imaxSpeed;
 }
Esempio n. 12
0
    private void spawnWinner(CPPN cppn)
    {
        ParticleController pc = Instantiate(particlePrefab).GetComponent <ParticleController>();

        pc.setup(cppn, maxSpeed);
    }