numerical-methods - 数值最小化 8 变量约束系统的最有效计算方法
问题描述
我花了相当长的时间来寻找一个数值实例来解决 7 个非常复杂的不等式加上区域规范的 8 个变量系统。不幸的是,由于输入真的很长,所以我不能产生 MWE 或任何类似的东西。
我目前的方法是 Mathematica 的NMinimize
例程,将 7 个不等式中的一个最小化为所有其他条件作为约束——该FindInstance
命令只是退出内核而无法完成运行。
能够产生输出,但除了比最优速度慢之外,产生的NMinimize
结果也不符合所有约束。
问题是我需要确定,对于我运行的每个基准,如果输出不满足每个约束,那是因为这样的一组实数不存在——用我目前的方法我不能是,凭经验。
那么:是否有一种万无一失、尽可能高效的计算方法让我找到 8 个变量的 7 个复杂不等式(涉及三角函数)的数值解的单个实例,或者确保这样的集合不存在?
它可以是 Mathematica/python/fortran 包、遗传算法或任何东西——只要有足够清晰的文档。
解决方案
您需要为约束赋予重要性乘数,并且优化方法不应该是贪婪的。
与多起点相结合的遗传算法(或减少突变的模拟退火)倾向于收敛到全局最小值(因此不是贪婪的),并给予更多时间,但不能保证启发式算法将在 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)应该能够加速您的算法。
推荐阅读
- zsh - WSL 上的 Oh-My-Zsh 在命令提示符中显示问号
- javascript - 为页面 Javascript 上的多个元素保持选中状态
- wordpress - 如何将 wordpress 迁移到 EC2 bitnami?
- java - 如何在 Linux shell 中继续运行特定数量的 java 进程?
- reactjs - 如何自定义 MaterialUI 颜色阴影
- c++ - 进程以状态 -1073741510 终止 - C++ 素数分解
- oracle - 为什么我会收到 ORA-06531:对未初始化集合的引用?
- microsoft-graph-api - 如何从 Microsoft 图形 API 下载文件 (InputStream)?
- vb.net - 是否可以有一个文件来控制我可以从任何形式访问的自定义标题栏的外观和感觉?
- pandas - 聚合后如何将熊猫数据框转换为单个索引?