【问题标题】:Matlab fminsearch options/restrictionsMatlab fminsearch 选项/限制
【发布时间】:2013-01-29 16:10:16
【问题描述】:

我在 Matlab 中有这个函数,它应该通过改变 inValues 的两个初始设置值来找到 minValuePossible 可能的最小值。如何将 fmin 搜索功能设置为在尝试查找最小值时不尝试负值?另外,如何设置 fminsearch 函数在尝试找到最小值时执行的不同变化的数量?因为目前它尝试了两个 inValues 的大约 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

【问题讨论】:

    标签: function matlab fminsearch


    【解决方案1】:

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

    在您的 minimiser 函数的开头添加值的约束。如果您遇到此约束,则返回一个巨大的最小化函数值。这将阻止 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;
    

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

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

    options = optimset('MaxFunEvals',numberOfVariations);
    minValuePossible = fminsearch(@minimiser, inValues,options);
    

    【讨论】:

      【解决方案2】:

      docs for fminsearch 没有描述限制要最小化的函数域的方法。

      如果要将范围限制为所有非负数,则可以简单地将函数包装在对 abs 的调用中,具体取决于语法。

      minValuePossible = fminsearch( @(x)(minimiser( abs(x) ) ), inValues); 
      

      如果您担心它会不断收敛到相同的最小值,请尝试各种不同的初始值。

      最后,您可以使用TolXTolFun 输入参数更改XminValuePossible 的终止容差。这是使用标准参数值语法完成的:function(...., 'Param', value)

      fminsearch( @(x)(minimiser(abs(x))), inValues, 'TolX', x_tolerance);
      

      【讨论】:

      • 我试图将函数包装在调用 abs 中,但收到一条错误消息:表达式或语句不正确 -- 可能不平衡 (、{ 或 [。另外,我将如何更改 X 的容差?
      • @thomashs87,我省略了右括号,我已经正确更新了代码。
      猜你喜欢
      • 2014-08-13
      • 2015-03-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-24
      • 2020-03-12
      • 1970-01-01
      相关资源
      最近更新 更多