// Worker thread
void SearchSolution()
{
// create learning algorithm
SOMLearning trainer = new SOMLearning(network);
// input
double[] input = new double[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)radius * (iterations - i) / iterations;
input[0] = rand.Next(256);
input[1] = rand.Next(256);
input[2] = rand.Next(256);
trainer.Run(input);
// update map once per 50 iterations
if ((i % 10) == 9)
{
UpdateMap();
}
// increase current iteration
i++;
// set current iteration's info
SetText(currentIterationBox, i.ToString());
// stop ?
if (i >= iterations)
break;
}
// enable settings controls
EnableControls(true);
}