void Minimizer_minimizeManyTimes (Minimizer me, long numberOfTimes, long maxIterationsPerTime, double tolerance) { double fopt = my minimum; int monitorSingle = numberOfTimes == 1; autoNUMvector<double> popt (NUMvector_copy<double> (my p, 1, my nParameters), 1); if (! monitorSingle) { Melder_progress (0.0, L"Minimize many times"); } /* on first iteration start with current parameters 27/11/97 */ for (long i = 1; i <= numberOfTimes; i++) { Minimizer_minimize (me, maxIterationsPerTime, tolerance, monitorSingle); Melder_casual ("Current %ld: minimum = %.17g", i, my minimum); if (my minimum < fopt) { NUMvector_copyElements (my p, popt.peek(), 1, my nParameters); fopt = my minimum; } Minimizer_reset (me, 0); if (! monitorSingle) { try { Melder_progress ( (double) i / numberOfTimes, Melder_integer (i), L" from ", Melder_integer (numberOfTimes)); therror } catch (MelderError) { Melder_clearError (); // interrurpt, no error break; } } } if (! monitorSingle) { Melder_progress (1.0, 0); } Minimizer_reset (me, popt.peek()); }
void Minimizer_init (Minimizer me, long nParameters, Daata object) { my nParameters = nParameters; my p = NUMvector<double> (1, nParameters); my object = object; my minimum = 1.0e30; my afterHook = classMinimizer_afterHook; Minimizer_reset (me, nullptr); /* added 27/11/97 */ }
void Minimizer_init (I, long nParameters, Data object) { iam (Minimizer); my nParameters = nParameters; my p = NUMvector<double> (1, nParameters); my object = object; my minimum = 1.0e30; my after = classMinimizer_after; Minimizer_reset (me, 0); /* added 27/11/97 */ }
static void _FFNet_Pattern_Activation_learn (FFNet me, Pattern pattern, Activation activation, long maxNumOfEpochs, double tolerance, Any parameters, int costFunctionType, int reset) { try { _FFNet_Pattern_Activation_checkDimensions (me, pattern, activation); Minimizer_setParameters (my minimizer, parameters); // Link the things to be learned my nPatterns = pattern -> ny; my inputPattern = pattern -> z; my targetActivation = activation -> z; FFNet_setCostFunction (me, costFunctionType); if (reset) { autoNUMvector<double> wbuf (1, my dimension); long k = 1; for (long i = 1; i <= my nWeights; i++) { if (my wSelected[i]) { wbuf[k++] = my w[i]; } } Minimizer_reset (my minimizer, wbuf.peek()); } Minimizer_minimize (my minimizer, maxNumOfEpochs, tolerance, 1); // Unlink my nPatterns = 0; my inputPattern = NULL; my targetActivation = NULL; } catch (MelderError) { my nPatterns = 0; my inputPattern = 0; my targetActivation = 0; } }