首先,我完全超出了我的专业领域,所以请耐心等待。
我开发了一个流体动力引擎,有5个公开的参数(比如A,B,C,D,E)。当你给这个引擎这5个参数时,它会变魔术并给出一个'Z‘值。
我想写一个脚本,可以探索A-E的哪些组合给出了最低(或接近最低)的Z值。
我知道优化算法是存在的,但从我搜索的所有例子来看,它们都使用了一些函数。
所以我猜我的函数应该是最小化Z?但是A-E要去哪里呢?
发布于 2021-04-27 06:00:56
不是一个真正的答案,而是一些问题和想法,可能会帮助你思考解决这个问题的最佳方法。我们不了解这些参数需要探索的值范围有多大,或者Z如何表现,所以这是非常模糊的……
如果你看一下给定A...E的Z值,Z的值是因为参数值的微小变化而跳跃很多,还是Z值的变化相当平稳?
如果Z值不太稳定,您可以尝试某种梯度下降方法,使用计算出的某些参数值的Z值来近似梯度-假设将'A‘的值从1更改为2比其他参数中类似大小的更改提供了更好的Z值变化,然后尝试其他A值,同时保持其他参数不变,直到您找到给出最佳Z值的A值。然后尝试更改其他参数值,以查看哪个参数值下降最快,并尝试为该参数找到更好的值。重复这个过程,直到你找不到任何改进,你会找到一个(局部)最小值。然后,您可以从参数空间中的不同位置开始,然后重试-您可能会找到几个局部最小值,并可能只选择其中最好的一个。不能证明是最优的,但可能足够好。当然,如果Z足够平滑,你可以变得更聪明,使用共轭梯度,牛顿-拉夫森或类似的东西。
如果Z值非常不稳定,那么您可能只需要对A...E的可能组合进行一些采样,以获得Z值并选择您能找到的最佳组合。同样,您可能会以某种系统方式(例如,参数空间中的网格上的点)或完全随机,或两者的组合来执行此操作。
如果你发现有一些好的解决方案的“簇”具有相似的参数值,那么也许某种本地搜索会有所帮助--这个想法是,在已知好的解决方案的本地邻域中通常有一个更好的解决方案。因此,也许可以尝试从已知的解决方案中扰动一下参数值,看看这是否可以导致更好的解决方案-无论是通过某种梯度下降方法还是通过随机采样。
不幸的是,如果您的Z计算很复杂,那么任何使用它作为黑盒的方法都可能会很慢,因为它将需要多次重新计算。
发布于 2021-04-26 09:58:43
您可以使用遗传算法,其中您的染色体由您必须优化的变量的5个候选值形成,以最小化Z,并且您的优化/适应度“函数”是模拟本身输出的Z。
其他可行的替代方案是粒子群优化算法或蚁群优化算法。对于这类优化问题,所有这些都是可用的算法。
https://stackoverflow.com/questions/67259907
复制相似问题