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)); }
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); }
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); }
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); }