Matlab fminsearch选项/限制

tho*_*s87 3 matlab function fminsearch

我在Matlab中有此函数,应该通过改变inValues的两个初始设置值来找到minValuePossible的最小值。如何在尝试查找最小值时将fmin搜索功能设置为不尝试负值?另外,如何在尝试找到最小值时设置fminsearch函数执行的不同变化的数量?因为当前它尝试在两个inValue的大约20种不同组合中进行某处,然后完成。也许定义它改变每个值的数量?我该怎么做?

            function Valueminimiser

            inValues = [50,50];

            minValuePossible = fminsearch(@minimiser, inValues); 

                function result = minimiser(inValues)

                x=inValues(1);
                y=inValues(2);

                RunMode = 2;
                ValueOne = x;
                ValueTwo = y;

                [maxSCRAout] = main(RunMode,ValueOne,ValueTwo);
                result = minValuePossible;

              end

            end
Run Code Online (Sandbox Code Playgroud)

Tom*_*mas 5

如何在尝试查找最小值时将fmin搜索功能设置为不尝试负值?

在开始时添加最小化函数值的约束。如果遇到此限制,则返回最小化函数的巨大函数值。这将防止fminsearch考虑不符合您需求的数字:

function result = minimiser(inValues)
            if (sum(inValues < 0) > 1) % check if there is any negative number in input variable
                result = hugeValue;    % give a big value to the result
                return;                % return to fminsearch - do not execute the rest of the code
            end

            x=inValues(1);
            y=inValues(2);

            RunMode = 2;
            ValueOne = x;
            ValueTwo = y;

            [maxSCRAout] = main(RunMode,ValueOne,ValueTwo);
            result = minValuePossible;
Run Code Online (Sandbox Code Playgroud)

另外,如何在尝试找到最小值时设置fminsearch函数执行的不同变化的数量?

您可以使用optimset函数定义fminsearch的选项。optimset'MaxFunEvals'的参数是最大评估数-请注意,此提示甚至包括您约束的值,因此,如果您担心准确性,则按@slayton的建议设置'TolX'可能会更好。

options = optimset('MaxFunEvals',numberOfVariations);
minValuePossible = fminsearch(@minimiser, inValues,options);
Run Code Online (Sandbox Code Playgroud)