コード例 #1
0
ファイル: Generator.cs プロジェクト: w-garcia/Unity_PSO
    public void InitializeParticleVelocities()
    {
        foreach (Particle particle in particles)
        {
            Rigidbody rb = particle.gameObject.GetComponent <Rigidbody>();

            float randX;
            float randY;
            float randZ;
            SwarmUtil.GetRandomXYZ(out randX, out randY, out randZ);

            rb.AddForce(new Vector3(randX, randY, randZ).normalized *particleSpeed);
        }

        foreach (Particle optima in optimaList)
        {
            Rigidbody rb = optima.gameObject.GetComponent <Rigidbody>();

            float randX;
            float randY;
            float randZ;
            SwarmUtil.GetRandomXYZ(out randX, out randY, out randZ);

            rb.AddForce(new Vector3(randX, randY, randZ).normalized *optimaSpeed);
        }
    }
コード例 #2
0
ファイル: Generator.cs プロジェクト: w-garcia/Unity_PSO
    public void UpdateParticleVelocities()
    {
        entropyPercentage = Mathf.Clamp(entropyPercentage, 0, 1);

        foreach (Particle particle in particles)
        {
            Rigidbody rb = particle.gameObject.GetComponent <Rigidbody>();

            float randXp, randXg;
            float randYp, randYg;
            float randZp, randZg;
            SwarmUtil.GetRandomUnitSphereXYZ(out randXp, out randYp, out randZp, entropyPercentage);
            SwarmUtil.GetRandomUnitSphereXYZ(out randXg, out randYg, out randZg, entropyPercentage);

            float XpMotive = randXp * (particle.bestPosition.x - rb.position.x);
            float XgMotive = randXg * (globalBestPosition.x - rb.position.x);

            float YpMotive = randYp * (particle.bestPosition.y - rb.position.y);
            float YgMotive = randYg * (globalBestPosition.y - rb.position.y);

            float ZpMotive = randZp * (particle.bestPosition.z - rb.position.z);
            float ZgMotive = randZg * (globalBestPosition.z - rb.position.z);

            float X = personalBestInfluence * XpMotive + globalBestInfluence * XgMotive;
            float Y = personalBestInfluence * YpMotive + globalBestInfluence * YgMotive;
            float Z = personalBestInfluence * ZpMotive + globalBestInfluence * ZgMotive;

            //Vector3 influence = new Vector3(X * particleSpeed, Y * particleSpeed, Z * particleSpeed);
            rb.AddForce(new Vector3(X, Y, Z).normalized *particleSpeed);
        }

        foreach (Particle optima in optimaList)
        {
            Rigidbody rb = optima.gameObject.GetComponent <Rigidbody>();

            float randX;
            float randY;
            float randZ;
            SwarmUtil.GetRandomXYZ(out randX, out randY, out randZ);

            rb.AddForce(new Vector3(randX, randY, randZ).normalized *optimaSpeed);
        }
    }