// 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 this.BeginInvoke ( new MethodInvoker (() => currentIterationBox.Text = i.ToString())); // stop ? if ( i >= iterations ) break; } // enable settings controls EnableControls( true ); }