Beispiel #1
0
        public double[] ComputeMin(OptMultivariateFunction function, OptSimplexBoundVariable[] variables, double initialStep, double tolerance, ref int MAXFUN)
        {
            this.Function = function;
            this.MeFunEvaluations = 0;

            this.MeSimplexBoundVariableList = OptSimplexBoundVariable.GetClon(variables);
            this.MeInitialStep = initialStep;

            this.InitializeVariables();
            this.InitializeWorkSpace();

            if (this.MeNumFreeVariables == 0) return this.MeVariables;

            this.MeCOBYLA.Run(this.MeNumFreeVariables, this.MeNumBoundVariables, ref this.MeFreeVariables, 0, initialStep, tolerance, 0, ref MAXFUN, ref W, 0, ref IACT, 0);

            int varFreeVarIndex = 0;
            for (int i = 0; i < this.MeSimplexBoundVariableList.Length; i++)
            {
                if (this.MeSimplexBoundVariableList[i].Fixed == false)
                {
                    //mod
                    this.MeVariables[i] = this.MeFreeVariables[varFreeVarIndex] * this.MeSimplexBoundVariableList[i].ScaleFactor;
                    varFreeVarIndex++;
                }
            }

            MAXFUN = this.MeFunEvaluations;

            return this.MeVariables;
        }
Beispiel #2
0
        public double[] ComputeMin(OptMultivariateFunction function, OptSimplexBoundVariable[] variables, double initialStep, double tolerance, ref int MAXFUN)
        {
            this.Function         = function;
            this.MeFunEvaluations = 0;


            this.MeSimplexBoundVariableList = OptSimplexBoundVariable.GetClon(variables);
            this.MeInitialStep = initialStep;

            this.InitializeVariables();
            this.InitializeWorkSpace();

            if (this.MeNumFreeVariables == 0)
            {
                return(this.MeVariables);
            }

            this.MeCOBYLA.Run(this.MeNumFreeVariables, this.MeNumBoundVariables, ref this.MeFreeVariables, 0, initialStep, tolerance, 0, ref MAXFUN, ref W, 0, ref IACT, 0);


            int varFreeVarIndex = 0;

            for (int i = 0; i < this.MeSimplexBoundVariableList.Length; i++)
            {
                if (this.MeSimplexBoundVariableList[i].Fixed == false)
                {
                    //mod
                    this.MeVariables[i] = this.MeFreeVariables[varFreeVarIndex] * this.MeSimplexBoundVariableList[i].ScaleFactor;
                    varFreeVarIndex++;
                }
            }

            MAXFUN = this.MeFunEvaluations;

            return(this.MeVariables);
        }