我正在使用模拟退火来解决密码分析问题而且我遇到了一堵砖墙。我不能为我的生活让我的概率函数正常运行,它要么经常采取更糟糕的解决方案(所以我在0.03和0.2的分数附近反弹)或者它不经常采取它(所以我被困在0.35)。我浏览过互联网,但我只看到问题涉及找到MINIMUM值的例子....我的问题需要找到MAXIMUM值,最差得分是0,最好是1。
我需要关于温度的建议以及我应该使用的概率函数。
答案 0 :(得分:2)
Wikipedia上的模拟退火文章提供了有关如何初始化和降低SA温度的一般指导。有效选择这些参数通常非常具体问题,可能需要通过繁琐的反复试验来识别。
通常,优化算法会搜索目标函数的最小值。如果要在最大化问题上使用此类算法,请要求优化程序最小化目标函数的否定。例如,假设您要查找最大值的目标函数是f(x)=score
。然后,您应该请求优化程序最小化 -f(x)
,即-score
(或者,正如您在上面的评论中指出的那样,1-score
)。
网上有很多模拟退火和其他全局优化算法,请参阅优化软件决策树上的this列表。不幸的是,这些代码通常不是用C#编写的,但如果代码是用Fortran或C编写的,通常很容易通过 P / Invoke 与这些代码连接。
如果您不要求优化器必须找到全局最优,那么也会列出一些无衍生优化器here。这些代码中至少有一个是C#版本,即BOBYQA(实际上,这个算法已由我改编为C#: - )。