首页 > 代码库 > 一个C++的粒子群(PSO)算法实现

一个C++的粒子群(PSO)算法实现

收集和修改的PSO算法,可用于参考实现:

#include <cstring>
#include <iostream>
#include <cmath>
#include <algorithm>
#include <ctime>

#define rand_01 ((float)rand() / (float)RAND_MAX)

const int numofdims = 30;
const int numofparticles = 50;

using namespace std;

//typedef void (*FitnessFunc)(float X[numofparticles][numofdims], float fitnesses[numofparticles]);

void fitnessfunc(float X[numofparticles][numofdims], float fitnesses[numofparticles])
{
    memset(fitnesses, 0, sizeof (float) * numofparticles);
    for(int i = 0; i < numofparticles; i++)
    {
        for(int j = 0; j < numofdims; j++)
        {
            fitnesses[i] += X[i][j] * X[i][j]; //(pow(X[i][j], 2));
        }
    }
}

void rosenBroekFunc(float X[numofparticles][numofdims], float fitnesses[numofparticles])
{
	float x1, x2, t1, t2;
	memset(fitnesses, 0, sizeof (float) * numofparticles);    
    for(int i = 0; i < numofparticles; i++)
        for(int j = 0; j < numofdims - 1; j++)
        {
            x1 = X[i][j];
            x2 = X[i][j+1];
            t1 = (x2 - x1 * x1);
            t1 *= t1;
            t1 *= 100;
            t2 = x1 - 1;
            t2 *= t2;
            fitnesses[i] = t1 + t2;
        }
}

float mean(float inputval[], int vallength)
{
    float addvalue = http://www.mamicode.com/0;>