void FixedUpdate() { if (popM.isRunning() && alive) { float raysum = 0; for (int i = 0; i < ray_dir.Count; i++) { RaycastHit hit; if (Physics.Raycast(transform.position, transform.TransformDirection(ray_dir[i]), out hit)) { if (hit.collider.tag == "Obstacle") { input_values[i, 0] = hit.distance; raysum += hit.distance; } } //Test Raycasting directions Debug.DrawRay(transform.position, transform.TransformDirection(ray_dir[i]) * 30, Color.green); } fitness += Mathf.Pow(2, (raysum / n_input) / 100); //fitness += (raysum/n_input)/100 ; //fitness += 1 / Mathf.Pow(2,( Vector3.Distance(transform.position,target_pos))/10); //fitness = Mathf.Clamp(fitness,0,9999999); } }
// Update is called once per frame void FixedUpdate() { if (popM.isRunning()) { float dir = dna_obj.predict(); if (!float.IsNaN(dir) && dna_obj.isAlive()) { rb.MovePosition(transform.position + (transform.forward * Time.fixedDeltaTime * 70)); transform.rotation = Quaternion.Euler(transform.eulerAngles + Vector3.up * dir * 100f * Time.fixedDeltaTime); } } }