Exemple #1
0
 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);
        }
Exemple #3
0
 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));
 }
Exemple #4
0
        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);
        }
Exemple #5
0
 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);