public override MinimizerResult Minimize( IFunction <double[], double> function_to_minimize, IFunction <double[], bool> validation_function, IMinimizerHaltingCriterion <Simplex> halting_criterion, double[] initial_value, double[] step_size) { throw new NotImplementedException(); }
public override MinimizerResult Minimize( IFunction <double[], double> minimization_function, IFunction <double[], bool> validation_function, IMinimizerHaltingCriterion <Simplex> halting_criterion, double[] parameters_initial, double[] initial_vextex_size) { Simplex simplex = new Simplex(parameters_initial, initial_vextex_size, minimization_function, validation_function); /* Holds vertices of simplex */ MinimizerResult result = new MinimizerResult(simplex); if (TrackResuls) { for (int vertex_index = 0; vertex_index < simplex.VertexCount; vertex_index++) { result.EvaluationList.Add(ToolsCollection.Copy(simplex.vertexes[vertex_index])); result.ValueList.Add(simplex.vertex_values[vertex_index]); result.IterationList.Add(0); } } double[] centroid_vertex = new double[simplex.ParameterCount]; for (int iteration = 1; iteration <= halting_criterion.MaximumIterationCount; iteration++) { simplex.ComputeCentroidVertex(centroid_vertex); // Check if the reflected point is valid; if so, accept or try expansion, if not then try an iside or outside contraction. bool reflection_or_expansion_successfull = TryReflectionAndExpansion(minimization_function, validation_function, simplex, centroid_vertex, result, iteration); // Check if reflextion and expansion where succesfull if (!reflection_or_expansion_successfull) { bool contraction_successful = TryContraction(minimization_function, validation_function, simplex, centroid_vertex, result, iteration); // Check if contraction was succesfull if (!contraction_successful) { bool shrink_successful = TryShrink(minimization_function, validation_function, simplex, centroid_vertex, result, iteration); // Check if shrink was succesfull if (!shrink_successful) { return(result); } } } if (halting_criterion.CheckHalt(simplex)) { result.IsHalted = false; break; } } result.IsSuccesFull = true; return(result); }
public MinimizerResult Minimize( IFunction <double[], double> function_to_minimize, IMinimizerHaltingCriterion <HaltingInfoType> halting_criterion, double[] parameters_initial, double[] initial_vextex_size) { return(Minimize( function_to_minimize, new FunctionContstant <double[], bool>(true), halting_criterion, parameters_initial, initial_vextex_size)); }
public override MinimizerResult Minimize( IFunction <double[], double> minimization_function, IFunction <double[], bool> validation_function, IMinimizerHaltingCriterion <Simplex> halting_criterion, double[] parameters_initial, double[] initial_vextex_size) { Simplex simplex = new Simplex(parameters_initial, minimization_function, validation_function); /* Holds vertices of simplex */ MinimizerResult result = new MinimizerResult(simplex); result.IsHalted = false; result.IsSuccesFull = true; return(result); }
public abstract MinimizerResult Minimize( IFunction <double[], double> function_to_minimize, IFunction <double[], bool> validation_function, IMinimizerHaltingCriterion <HaltingInfoType> halting_criterion, double[] initial_value, double[] step_size);