LampelSoft SOMSim


by Johannes Lampel / LampelSoft
(c) Johannes Lampel / LampelSoft 2000
(SOM means Self Organizing Map - a type of neural net introduced by Teuvo Kohonen)


/***************************************************************************
 *                                                                         *
 *   This program is free software; you can redistribute it and/or modify  *
 *   it under the terms of the GNU General Public License as published by  *
 *   the Free Software Foundation; either version 2 of the License, or     *
 *   any later version.                                                    *
 *                                                                         *
 ***************************************************************************/
Documentation of functions ...
DateVersionComment
Sept 12th - 15th 2000

0.0.1

Writing of Simulator
Sept 16th 2000

0.0.2

porting to Linux
Sept 17th 2000

0.1.0

Optimizing by elim unneccessary vars and removing the slowly pow(?,2.0)(200kWeights/s -> 500 kWeights/s (10-100*100) - (With MS VC++ 6.0 there are still big performance differences between optimized and unoptimized compilations. The unoptimized is 3-4 times faster !!!?)
Sept 20th 2000

0.1.1

qSOM2d::CategorizeFast added - This function neglects the neurons outside a square defined by the winner neuron as middle and the min radius by the 'dDistanceP' The distance or stiffness param. This approach is only suitable for NK - functions, where the result is 0 if z>d. This' with (fNK) cone, cyl and cos the case but not the gauss' .
Sept 26th 2000

0.1.2

qSOM2d::Categorize(Fast) are returning the length of the difference vector between the input and the winner - neuron before categorization. This vector is also stored in pVDiff .
Sept 27th 2000

0.1.3

The classes SOMPattern (and of course SOMPatternElem) should contain the training data. A SOMPatternElem contains the error ( distance from input to weight vector of winner neuron )and the related input vector. The error is set by the return value of qSOM2d::Categorize(Fast).

TO DO

- Sometimes ( or only with optimized compilin' with MS C++6.0 it cannot find the nearest Neuron !!!??) qSOM2d :: GetWinner  isn't able to find minima and the result of a undefined return, would be a page fault. Now this problem is solved by a default setting of this return to 0, but this isn't obviously a solution - and not absolutely a mathematical - Another interesting problem is that this bug only occures with MS C++ and not with g++ and only in some special times. The random number generator is being initialized with srand(time(NULL)), could this be the solution ???? Have fun while searching this crazy bug !!

- in nVec.cpp : The pointer to data has to be checked and in case an errror has to be thrown