我有一个功能V,它依赖于两个变量v1和v2以及一个包含15个参数的参数数组p。 我想最小化关于v1和v2的函数V,但是我的函数没有闭合表达式,因此我无法构建和使用Derivatives。
问题如下:为了计算我的函数的值,我需要两个4x4矩阵的特征值(它应该是概念上的对称和真实的,但有时候EigenSolver不会得到真正的特征值)。这些特征值我用特征包计算。矩阵的条目由v1,v2和p。
给出某些输入集的某些特征值变为负值。这些是我想要忽略的输入集,因为它们将导致复杂的Function值,并且我的Function只允许有实数值。
有没有办法包含这个?我的第一次尝试是使用GSL-Library的Nelder-Mead-Simplex算法,如果其中一个特征值变为负值,则该函数的输出值太高,但这并不起作用。
感谢您的任何建议。
答案 0 :(得分:0)
对于Nelder-Mead单形,您可以拒绝新点作为单形的顶点,除非它们具有所需的属性。
人为增加禁用点的函数值的方法也称为penalty or barrier function。您可能想要重新设计惩罚函数。
另一种没有衍生物的优化方法是Simulated Annealing方法。同样,您可以修改方法以避免禁止点。
“不起作用”是什么意思?需要太长时间吗?结果函数值是否太高?
根据功能评估成本,它可能是一种简单扫描2D间隔,评估所有宽度x高度函数值并在具有最低函数值的图块中向下钻取的方法。