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