在数值上最小化 8 变量约束系统的最有效计算方法
Most efficient computational method to numerically minimize a 8 variables constrained system
我花了很长一段时间来寻找一个数值实例来解决 7 个非常复杂的不等式加上区域规范的 8 变量系统。不幸的是,我无法生成 MWE 或类似的东西,因为输入真的很长。
我目前的方法是 Mathematica 的 NMinimize
例程,将 7 个不等式中的一个最小化作为约束的所有其他条件 -- FindInstance
命令只是退出内核而无法完成 运行宁.
NMinimize
能够产生输出,但除了比最佳速度慢之外,产生的结果不符合所有约束。
问题是我需要确定,对于每个基准我运行,如果输出不不满足每一个约束是因为这样一组实数不存在——根据经验,用我目前的方法我做不到。
所以:有没有一种万无一失的、尽可能高效的计算方法,可以让我找到 8 个变量的 7 个复杂不等式(涉及三角函数)的数值解的单个实例 或者确定这样的集合不存在?
它可以是 Mathematica/python/fortran 程序包、遗传算法或任何东西 -- 只要有足够清晰的文档。
您需要为约束赋予重要性乘数,并且优化方法不应贪婪。
遗传算法结合多起点(或减少突变的模拟退火)往往会收敛到全局最小值(因此不贪婪),并提供更多时间,但不能保证启发式算法会完成 X Y 时间函数。给它的时间越多,它就越能收敛到全局最小值。
在遗传算法中,你可以像这样添加大的约束惩罚:
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 支持 libraries/frameworks(例如 Tensorflow)应该能够加速您的算法。
我花了很长一段时间来寻找一个数值实例来解决 7 个非常复杂的不等式加上区域规范的 8 变量系统。不幸的是,我无法生成 MWE 或类似的东西,因为输入真的很长。
我目前的方法是 Mathematica 的 NMinimize
例程,将 7 个不等式中的一个最小化作为约束的所有其他条件 -- FindInstance
命令只是退出内核而无法完成 运行宁.
NMinimize
能够产生输出,但除了比最佳速度慢之外,产生的结果不符合所有约束。
问题是我需要确定,对于每个基准我运行,如果输出不不满足每一个约束是因为这样一组实数不存在——根据经验,用我目前的方法我做不到。
所以:有没有一种万无一失的、尽可能高效的计算方法,可以让我找到 8 个变量的 7 个复杂不等式(涉及三角函数)的数值解的单个实例 或者确定这样的集合不存在?
它可以是 Mathematica/python/fortran 程序包、遗传算法或任何东西 -- 只要有足够清晰的文档。
您需要为约束赋予重要性乘数,并且优化方法不应贪婪。
遗传算法结合多起点(或减少突变的模拟退火)往往会收敛到全局最小值(因此不贪婪),并提供更多时间,但不能保证启发式算法会完成 X Y 时间函数。给它的时间越多,它就越能收敛到全局最小值。
在遗传算法中,你可以像这样添加大的约束惩罚:
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 支持 libraries/frameworks(例如 Tensorflow)应该能够加速您的算法。