void SearchSolution()
{
// create network
DistanceNetwork network = new DistanceNetwork(2, networkSize * networkSize);
// set random generators range
foreach (var layer in network.Layers)
foreach (var neuron in layer.Neurons)
neuron.RandGenerator = new UniformContinuousDistribution(
new Range(0, Math.Max(pointsPanel.ClientRectangle.Width, pointsPanel.ClientRectangle.Height)));
// create learning algorithm
SOMLearning trainer = new SOMLearning(network, networkSize, networkSize);
// create map
map = new int[networkSize, networkSize, 3];
double fixedLearningRate = learningRate / 10;
double driftingLearningRate = fixedLearningRate * 9;
// iterations
int i = 0;
// loop
while (!needToStop)
{
trainer.LearningRate = driftingLearningRate * (iterations - i) / iterations + fixedLearningRate;
trainer.LearningRadius = (double)learningRadius * (iterations - i) / iterations;
// run training epoch
trainer.RunEpoch(trainingSet);
// update map
UpdateMap(network);
// increase current iteration
i++;
// set current iteration's info
SetText(currentIterationBox, i.ToString());
// stop ?
if (i >= iterations)
break;
}
// enable settings controls
EnableControls(true);
}