我正在使用模拟退火来解决密码分析问题,但遇到了麻烦。我一生无法获得正确的概率函数,它要么需要更糟糕的解决方案(因此我在0.03和0.2的分数附近反弹),要么就用不了太多(因此我陷入困境) 0.35)。我环顾了互联网,但仅遇到了涉及发现MINIMUM值的问题的示例。...我的问题需要找到MAXIMUM值,最差的分数是0,最好的分数是1。

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

最佳答案

Wikipedia上的“模拟退火”文章提供了有关如何初始化和降低SA温度的一些常规指导。这些参数的有效选择通常是非常特定于问题的,可能需要通过乏味的反复试验来确定。

通常,优化算法会搜索目标函数的最小值。如果您想按原样使用此类算法来解决您的最大化问题,请优化器将对目标函数的求反最小化。例如,假设您要为其找到最大值的目标函数是f(x)=score。然后,您应该请求优化器最小化-f(x),即-score(或者,正如您在上面的注释中所指出的,1-score)。

在线上有很多模拟退火和其他全局优化算法,例如,请参见优化软件决策树上的this列表。不幸的是,这些代码通常不是用C#编写的,但是如果代码是用Fortran或C编写的,则通常可以很容易地通过P / Invoke与这些代码进行交互。

如果您不要求优化器必须找到全局最优值,则here中还会列出一些无导数的优化器。这些代码中至少有一个在C#版本中可用,即BOBYQA(实际上,我已经将该算法改编为C::-)。

07-27 13:58