⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gparticleswarm.cpp

📁 一个非常有用的开源代码
💻 CPP
字号:
#include "GParticleSwarm.h"#include "GBits.h"#include <string.h>GParticleSwarm::GParticleSwarm(GRealVectorCritic* pCritic, int nPopulation, double dMin, double dRange): GRealVectorSearch(pCritic){	m_dLearningRate = .2;	m_nDimensions = pCritic->GetVectorSize();	m_nPopulation = nPopulation;	m_pPositions = new double[m_nPopulation * m_nDimensions];	m_pVelocities = new double[m_nPopulation * m_nDimensions];	m_pBests = new double[m_nPopulation * m_nDimensions];	m_pErrors = new double[m_nPopulation];	int n, i;	for(i = 0; i < m_nPopulation; i++)	{		for(n = 0; n < m_nDimensions; n++)		{			m_pPositions[m_nDimensions * i + n] = GBits::GetRandomDouble() * dRange + dMin;			m_pVelocities[m_nDimensions * i + n] = GBits::GetRandomDouble() * dRange + dMin;			m_pBests[m_nDimensions * i + n] = m_pPositions[m_nDimensions * i + n];		}		m_pErrors[i] = 1e100;	}	m_nGlobalBest = 0;}/*virtual*/ GParticleSwarm::~GParticleSwarm(){	delete(m_pErrors);	delete(m_pBests);	delete(m_pVelocities);	delete(m_pPositions);}/*virtual*/ void GParticleSwarm::Iterate(){	// Advance	int i, j, nPos;	int n = m_nPopulation * m_nDimensions;	for(i = 0; i < n; i++)		m_pPositions[i] += m_pVelocities[i];	// Critique the current spots and find the global best	double dError;	double dGlobalBest = 1e100;	for(i = 0; i < m_nPopulation; i++)	{		nPos = m_nDimensions * i;		dError = m_pCritic->Critique(&m_pPositions[nPos]);		if(dError < m_pErrors[i])		{			m_pErrors[i] = dError;			memcpy(&m_pBests[nPos], &m_pPositions[nPos], sizeof(double) * m_nDimensions);		}		if(m_pErrors[i] < dGlobalBest)		{			dGlobalBest = m_pErrors[i];			m_nGlobalBest = i;		}	}	// Update velocities	nPos = 0;	n = m_nDimensions * m_nGlobalBest;	for(i = 0; i < m_nPopulation; i++)	{		for(j = 0; j < m_nDimensions; j++)		{			m_pVelocities[nPos + j] += m_dLearningRate * GBits::GetRandomDouble() * (m_pBests[nPos + j] - m_pPositions[nPos + j]) + m_dLearningRate * GBits::GetRandomDouble() * (m_pPositions[n + j] - m_pPositions[nPos + j]);		}		nPos += m_nDimensions;	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -