多objective优化但函数方程未知?
Multi-objective optimization but the function equation is unknown?
首先,我完全不在我的专业领域,所以请耐心等待。
我开发了一个带有 5 个公开参数(比如 A、B、C、D、E)的流体动力引擎。当你给这个引擎这 5 个参数时,它会变魔术并给出一个值 'Z'.
我想编写一个脚本来探索哪些 A-E 组合给出最低(或接近最低)的 Z 值。
我知道存在优化算法,但从我搜索的所有示例来看,它们使用了一些函数。
所以我想我的函数只是最小化 Z?但是A-E去哪儿了?
您可以使用遗传算法,其中您的染色体由您必须优化的变量的 5 个候选值组成,以最小化 Z,并且您的 optimization/fitness“函数”是模拟本身输出 Z .
其他可行的替代方案是粒子群优化算法或蚁群优化。所有这些都是可用于此类优化问题的算法。
不是真正的答案,而是一些问题和想法,可能会帮助您思考解决此问题的最佳方法。我们不了解需要为这些参数探索多大的值范围,或者 Z 的行为方式,所以这是非常模糊的...
如果您查看给定 A...E 值的 Z 值,Z 值是否会因参数值的微小变化而跳动很多,或者 Z 值是否变化相当平稳?
如果 Z 值不太敏感,您可以尝试某种梯度下降方法,使用 Z 的计算值对某些参数值来近似梯度 - 假设将 'A' 的值从 1 更改为到 2 比其他参数的类似大小变化更好地改变 Z 值,然后尝试 A 的其他值,同时保持其他参数固定,直到找到提供最佳 Z 值的 A 值。然后尝试更改其他参数值以查看哪个参数下降最陡,并尝试为该参数找到更好的值。重复这个过程,直到你找不到任何改进,你就会找到一个(局部)最小值。然后,您可以从参数 space 的不同位置开始,然后重试 - 您可能会发现几个局部最小值,并可能只选择其中最好的一个。不能证明是最佳的,但可能已经足够好了。当然,如果 Z 足够平滑,您可以变得聪明并使用诸如共轭梯度、Newton-Raphson 或类似的东西。
如果 Z 值非常不稳定,那么您可能需要对 A...E 的可能组合进行一些抽样以获得 Z 值并选择您能找到的最佳值。同样,您可能会以某种系统的方式(例如参数 space 中的网格上的点)或完全随机地执行此操作,或两者结合。
如果您发现有 'clusters' 个具有相似参数值的好的解决方案,那么也许某种局部搜索会有所帮助 - 这个想法是在一个已知的好解决方案。因此,也许可以尝试从已知解决方案中稍微扰动您的参数值,看看是否可以通过某种梯度下降法或随机抽样得出更好的解决方案。
不幸的是,如果您的 Z 计算很复杂,那么使用它作为黑盒的任何方法都可能很慢,因为它需要重新计算很多次。
首先,我完全不在我的专业领域,所以请耐心等待。
我开发了一个带有 5 个公开参数(比如 A、B、C、D、E)的流体动力引擎。当你给这个引擎这 5 个参数时,它会变魔术并给出一个值 'Z'.
我想编写一个脚本来探索哪些 A-E 组合给出最低(或接近最低)的 Z 值。
我知道存在优化算法,但从我搜索的所有示例来看,它们使用了一些函数。
所以我想我的函数只是最小化 Z?但是A-E去哪儿了?
您可以使用遗传算法,其中您的染色体由您必须优化的变量的 5 个候选值组成,以最小化 Z,并且您的 optimization/fitness“函数”是模拟本身输出 Z .
其他可行的替代方案是粒子群优化算法或蚁群优化。所有这些都是可用于此类优化问题的算法。
不是真正的答案,而是一些问题和想法,可能会帮助您思考解决此问题的最佳方法。我们不了解需要为这些参数探索多大的值范围,或者 Z 的行为方式,所以这是非常模糊的...
如果您查看给定 A...E 值的 Z 值,Z 值是否会因参数值的微小变化而跳动很多,或者 Z 值是否变化相当平稳?
如果 Z 值不太敏感,您可以尝试某种梯度下降方法,使用 Z 的计算值对某些参数值来近似梯度 - 假设将 'A' 的值从 1 更改为到 2 比其他参数的类似大小变化更好地改变 Z 值,然后尝试 A 的其他值,同时保持其他参数固定,直到找到提供最佳 Z 值的 A 值。然后尝试更改其他参数值以查看哪个参数下降最陡,并尝试为该参数找到更好的值。重复这个过程,直到你找不到任何改进,你就会找到一个(局部)最小值。然后,您可以从参数 space 的不同位置开始,然后重试 - 您可能会发现几个局部最小值,并可能只选择其中最好的一个。不能证明是最佳的,但可能已经足够好了。当然,如果 Z 足够平滑,您可以变得聪明并使用诸如共轭梯度、Newton-Raphson 或类似的东西。
如果 Z 值非常不稳定,那么您可能需要对 A...E 的可能组合进行一些抽样以获得 Z 值并选择您能找到的最佳值。同样,您可能会以某种系统的方式(例如参数 space 中的网格上的点)或完全随机地执行此操作,或两者结合。
如果您发现有 'clusters' 个具有相似参数值的好的解决方案,那么也许某种局部搜索会有所帮助 - 这个想法是在一个已知的好解决方案。因此,也许可以尝试从已知解决方案中稍微扰动您的参数值,看看是否可以通过某种梯度下降法或随机抽样得出更好的解决方案。
不幸的是,如果您的 Z 计算很复杂,那么使用它作为黑盒的任何方法都可能很慢,因为它需要重新计算很多次。