Matlab杂录

Matlab杂录

有一些在学习和使用Matlab过程中遇到的函数的用法和注意事项,会记录在这里。

fmincon()

在做小论文的轨迹优化的过程中第一次用到这个函数。

x = fmincon(fun,x0,A,b)

这个函数可以在给定边界条件的下求出使得函数fun取得的最小值对应的x。A和b都是对应的边界条件,还有其他输入,详见官方帮助文档:fmincon官方说明
主要想说明的是使用这个函数的时候需要注意的几点:

  1. fmincon中边界条件不是被严格遵守的
    fmincon的算法只是在收敛的时候尝试满足边界条件A,b,Aeq,beq,而并不保证在所有迭代步骤都满足这些条件,也不保证一直呆在可行域。即便lb,ub在某些非默认设置下也是可能不会被满足的。
    为什么收敛的优先级在此会高于边界条件?
    对于非凸的问题,很难说从出发点到最优解会有一条单调递减的路径,所以为了寻找到最优解,适当允许搜索过程探寻不满足边界条件的地方是有必要的。同样,对于非线性约束的可行域,到达线性可行约束域比在线性约束的可行域上停留要困难得多。对于线性约束,有一些系统的方法可以计算出附近的可行点的局部集合,以逐步进行下一次迭代,但是对于非线性约束,则不一样了。
    以上解答部分翻译自Matlab的一个问答,他的说法应该是对的,根据官方文档对于算法选择的描述,这里只提及了所采用的算法(如interior-point和sqp)中bounds是会被严格遵守的,而没有说constrains是否会被严格遵守。bounds指代lb和ub,constrains是其他的限制条件,是不一样的东西(似乎没有想到合适的对应中文词)。
  2. fmincon的输出和设置其实是很多的
    举例我在使用这个函数的过程中就遇到过迭代次数超过默认值的情况。关于fmincon的所有设置都可以用optimptions函数来调整。比如
options = optimoptions('fmincon','MaxFunctionEvaluations',30000,'MaxIterations',15000);

就是把fmincon的MaxFunctionEvaluations上限设置为30000次,迭代步骤上限设为15000次。官方文档对optimoptions的说明。
更准确地说,这里是创建了一个针对fmincon的设置,而还没有把这个配置真正运用上,要运用这组设置,需要在使用fmincon函数的时候把options这个变量作为输入参数的一个:

x = fmincon(fun,x0,A,b,Aeq,beq,lb,ub,nonlcon,options)

(注意多了末尾的options变量!)
MaxFunctionEvaluations可以理解为试探的次数,比如算法在一个点的四周试探了三个邻近点的值,然后确定下一步要往其中的某个点走,这个时候FunctionEvaluations对应3次,即试探了3次,而Iteration是一次,即走了一步,完成了一步迭代。具体可见官方文档。
除此之外fmincon不仅可以输出优化后的结果,还有一些用于帮助了解优化过程中都干了什么,最后优化结果怎么样的信息,一般会用到exitflag和output这个输出参数。详见官方说明的Output部分。

你可能感兴趣的:(matlab)