如果您有 3 个输入值 XX、YY 和 ZZ,则您正在搜索 3 维空间。您要做的是应用优化算法或启发式算法。您对算法的选择是关键,这是您的时间和计算机时间之间的成本效益。我猜你只想做一次。
无论您使用哪种方法,您都需要了解问题,这意味着了解您的算法如何随着不同的输入值而变化。有些解决方案有一个很好的最小值,很容易找到(例如使用牛顿法),有些则没有。
我建议从简单开始。最基本的方法之一就是进行迭代搜索。它很慢,但它有效。您需要确保您的迭代步长不会太大,这样您就不会错过一些甜蜜点。
For XX = XXmin to XXmax
For YY = YYmin to YYmax
For ZZ = ZZmin to ZZmax
result = GetRootNodeValue(XX, YY, ZZ)
If result < best_result then
print result, XX, YY, ZZ
best_result = result
End if
End For
End For
End For
下面是另一种方法,它是一种随机优化方法(使用随机点收敛到最佳解决方案),它的结果在大多数情况下都是合理的。我已经成功地使用了它,它擅长收敛到最小值。如果没有明确的全局最小值,这很好用。您必须为您的问题配置参数。
' How long to search for, a larger value will result in long search time
max_depth = 20000
' Initial values
x0 = initial XX value
y0 = initial YY value
z0 = initial ZZ value
' These are the delta values, how far should the default values range
dx = 5
dy = 5
dz = 5
' Set this at a large value (assuming the best result is a small number)
best_result = inf
' Loop for a long time
For i = 1 To max_depth
' New random values near the best result
xx = x0 + dx * (Rnd() - 0.5) * (Rnd() - 0.5)
yy = y0 + dy * (Rnd() - 0.5) * (Rnd() - 0.5)
zz = y0 + dy * (Rnd() - 0.5) * (Rnd() - 0.5)
' Do the test
result = GetRootNodeValue(xx, yy, zz)
' We have found the best solution so far
If result < best_result Then
x0 = xx
y0 = yy
z0 = zz
best_result = result
End If
Print progress
Next i
有许多优化算法可供选择。以上是一些非常简单的方法,但它们可能不是最适合您的问题。