首页 > 解决方案 > 数值最小化 8 变量约束系统的最有效计算方法

问题描述

我花了相当长的时间来寻找一个数值实例来解决 7 个非常复杂的不等式加上区域规范的 8 个变量系统。不幸的是,由于输入真的很长,所以我不能产生 MWE 或任何类似的东西。

我目前的方法是 Mathematica 的NMinimize例程,将 7 个不等式中的一个最小化为所有其他条件作为约束——该FindInstance命令只是退出内核而无法完成运行。

能够产生输出,但除了比最优速度慢之外,产生的NMinimize结果也不符合所有约束。

问题是我需要确定,对于我运行的每个基准,如果输出不满足每个约束,那是因为这样的一组实数不存在——用我目前的方法我不能是,凭经验。

那么:是否有一种万无一失、尽可能高效的计算方法让我找到 8 个变量的 7 个复杂不等式(涉及三角函数)的数值解的单个实例,或者确保这样的集合不存在?

它可以是 Mathematica/python/fortran 包、遗传算法或任何东西——只要有足够清晰的文档。

标签: numerical-methodsminimization

解决方案


您需要为约束赋予重要性乘数,并且优化方法不应该是贪婪的。

与多起点相结合的遗传算法(或减少突变的模拟退火)倾向于收敛到全局最小值(因此不是贪婪的),并给予更多时间,但不能保证启发式算法将在 Y 时间内完成 X 函数。给它的时间越多,它就越能收敛到全局最小值。

在遗传算法中,您可以像这样添加大的约束惩罚:

fitness_minima = some_function_output_between_1_and_10 + 
                 constraints_breached?1000.0f:0;

因此,没有违反约束的 DNA 将被 GA 的交叉部分青睐。

“尽可能高效”取决于您的算法。如果你可以并行化算法并在多个 GPU 上运行它,它应该会比 CPU 提供显着的加速。与 CPU 绘制数小时的蒙娜丽莎相比,在 3 个低端 GPU 上运行的并行版本在 10 分钟内完成 ( https://www.youtube.com/watch?v=QRZqBLJ6brQ )。如果您不想自己进行工作分配,至少一些支持 OpenCL/CUDA 的库/框架(如 Tensorflow)应该能够加速您的算法。


推荐阅读