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 FixedUpdate()
 {
     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;
     transform.Translate(vel[0], 0, vel[1], Space.Self);
 }
Esempio n. 3
0
    private void FixedUpdate()
    {
        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;
        transform.Translate(vel[0], 0, vel[1], Space.Self);
    }
Esempio n. 4
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);
    }