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

📄 euclediantopology.h

📁 几种神经网络的源程序
💻 H
字号:
#ifndef KOHONENT_H#define KOHONENT_H#include "Kohonen.h"namespace annie {/** * Standard eucledian topology * OPT: zounds */		template<uint T_dimensions>class EucledianTopology : public Topology	{public:	/**	 * The coordinates are [0 ... plane_size-1] for each plane	 */	typedef uint Axes[T_dimensions];	EucledianTopology (const Axes &sizes);	virtual real getNeighborWeight(uint srcNeuron, uint destNeuron, real nbSize) const;	virtual bool isGridNeighbor(uint srcNeuron, uint destNeuron) const;	uint getSize(uint axis) const	{ return sizes[axis]; }	void id2Axes(uint id, Axes &out) const;	Vector axes2Vector(const Axes &a) const;	Axes sizes;};template<uint T_dimensions>EucledianTopology<T_dimensions>::EucledianTopology(const EucledianTopology::Axes &sizes)	{	totalCount = 1;	real mxd_2 = 0.;	for(uint i=0; i<T_dimensions; i++)	{		this->sizes[i] = sizes[i];		totalCount *= sizes[i];		mxd_2 += sizes[i] * sizes[i];	}	maxDim = sqrt(mxd_2);}template<uint T_dimensions>void EucledianTopology<T_dimensions>::id2Axes(uint id, EucledianTopology::Axes &indexes)	const{    for(uint i=0; i<T_dimensions; i++)	{    indexes[i] = id % sizes[i];	    id /= sizes[i];    }}template<uint T_dimensions>Vector EucledianTopology<T_dimensions>::axes2Vector(const Axes &a)	const {    Vector out(T_dimensions);    for(uint i=0; i<T_dimensions; i++)    out[i] = a[i];    return out;}template<uint T_dimensions>real EucledianTopology<T_dimensions>::getNeighborWeight(uint srcNeuron, uint destNeuron, real nbSize) const {	assert(srcNeuron < totalCount);	assert(destNeuron < totalCount);	Axes a;	id2Axes(srcNeuron, a);	Vector sa = axes2Vector(a);	id2Axes(destNeuron, a);	Vector da = axes2Vector(a);	//	cout << "dist: " << srcNeuron << " to " << destNeuron << " = " << sa.distance(da) << endl;	if(sa.distance(da) <= nbSize) return 1.0;	else return 0.;}template<uint T_dimensions>bool EucledianTopology<T_dimensions>::isGridNeighbor(uint srcNeuron, uint destNeuron) const	{	return getNeighborWeight(srcNeuron, destNeuron, 1.) == 1.;	/*	Axes a, b;	 *	id2Axes(srcNeuron, a);		id2Axes(destNeuron, b);		for(uint i=0; i<T_dimensions; i++) if(abs((int)a[i] - (int)b[i]) <= 1) return true;		return false;*/}} //annie#endif //_H

⌨️ 快捷键说明

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