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