2

我正在使用模拟退火来解决密码分析问题,但我遇到了难题。我一辈子都无法让我的概率函数正确运行,它要么过于频繁地采用更差的解决方案(所以我在 0.03 和 0.2 的分数附近反弹)或者它不经常采用它(所以我被困在0.35)。我环顾了互联网,但我只遇到了问题涉及找到最小值的示例......我的问题需要找到最大值,最差分数是 0,最好是 1。

我需要关于温度的建议以及我应该使用什么概率函数。

4

1 回答 1

2

维基百科上的模拟退火文章提供了一些关于如何初始化和降低 SA 温度的一般指导。这些参数的有效选择通常是非常特定于问题的,并且可能需要通过繁琐的反复试验来确定。

通常,优化算法搜索目标函数的最小值。如果您想在最大化问题上使用这样的算法,请让优化器最小化您的目标函数的否定。例如,假设您要为其找到最大值的目标函数是f(x)=score。然后,您应该请求优化器最小化 -f(x), ie -score(或者,正如您在上面的评论中指出的那样,1-score)。

网上有很多模拟退火和其他全局优化算法,例如,参见优化软件决策树上的这个列表。不幸的是,这些代码通常不是用 C# 编写的,但如果这些代码是用 Fortran 或 C 编写的,那么通过P/Invoke与这些代码交互通常相当容易。

如果您不要求优化器一定要找到全局最优,这里还列出了一些无导数优化。这些代码中至少有一个在 C# 版本中可用,即BOBYQA(事实上,这个算法已被我改编为 C# :-)。

于 2013-03-14T17:04:04.960 回答