微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

使用 fminunc 进行无约束最小化,在目标函数中有约束,vs 使用有约束的最小化函数,例如fmincon,sqp?

如何解决使用 fminunc 进行无约束最小化,在目标函数中有约束,vs 使用有约束的最小化函数,例如fmincon,sqp?

我有一个部分约束(在参数中)最小化问题,我目前正在使用 Octave 的 fminunc 函数解决该问题,但是如果违反任何约束,则使用 if 语句在目标函数本身内应用约束以产生 realmax 成本.

然而,这个问题也可以通过使用 fmincon 来解决,参数的上限和下限被明确提供为约束。我也可能也可以使用其他更“复杂”的函数(例如 sqp)来解决问题。

我正在解决的问题是:- 找到值 'a' 到 'f' 使得

C1 - a = C2 * K
C3 + b = C4 * K
C5 - c = C6 * K
C7 - d = C8 * K
C9 + e = C10 * K
C11 - f = C12 * K

where all the C1,C2... are kNown,different valued constants 0 < C < 1
where K = 1 - a + b - c - d + e - f
and K > 0
and where  a,c,d and f are individually subject to constraints on their values

理论上,目标函数的最小成本应该是0。

最好的方法是什么?黑客使用 fminunc 是否会以某种方式导致不可预测/病态的解决方案?使用“适合工作的工具”并使用专门用于约束最小化的函数是否更好?

这听起来像是一个哲学问题,但实际上我关心的是解决方案的准确性,以及编程的难易程度和计算效率。

解决方法

help fminunc 一起使用的

Documentation 确实提供了一些答案。

fminunc 使用的算法是梯度搜索,它依赖于可微的目标函数。如果函数具有不连续性,最好使用无导数算法,例如 fminsearch。

返回 realmax 会搞乱梯度计算。最坏的情况是它会充斥着 NaNInf

您可以将优化器的“Display”option 设置为“iter”,并确定您的程序收敛是否仅仅是因为它从不触及边界,或者 fminunc 是否确实有一些故障保护。

另外,请注意 fminsearch,它是一种优化任意函数的单纯形方法。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。