/// <summary>
 /// Initialize solver
 /// </summary>
 public void Init()
 {
     for (int i = 0; i < m_swarmSize; i++)
     {
         float[] pos       = new float[m_particleSize];
         float[] speed     = new float[m_particleSize];
         float   normEcart = Mathf.Abs(m_maxRange - m_minRange);
         for (int j = 0; j < m_particleSize; j++)
         {
             pos[j]   = Random.Range(m_minRange, m_maxRange);
             speed[j] = Random.Range(-normEcart, normEcart);
         }
         ParticlePSO pso = new ParticlePSO();
         pso.position     = pos;
         pso.speed        = speed;
         pso.bestPosition = new float[m_particleSize];
         System.Array.Copy(pso.position, pso.bestPosition, pos.Length);
         if (i == 0)
         {
             bestWarmPosition = new float[m_particleSize];
             System.Array.Copy(pos, bestWarmPosition, m_particleSize);
         }
         else
         {
             if (toOptimize(bestWarmPosition) > toOptimize(pos))
             {
                 System.Array.Copy(pos, bestWarmPosition, pos.Length);
             }
         }
         _Particles.Add(pso);
     }
 }
    /// <summary>
    ///  Get the position from the solver and apply it to the game objects in the scene
    /// </summary>
    private void UpdateParticlePosition()
    {
        for (int i = 0; i < _NbParticles; i++)
        {
            ParticlePSO psop = m_solver._Particles[i];

            m_particles[i].transform.position = new Vector3(psop.position[0], (float)SimpleOptimFunction(psop.position), psop.position[1]);
        }
    }