文章 "种群优化算法:模拟退火(SA)。第 1 部分"

 

新文章 种群优化算法:模拟退火(SA)。第 1 部分已发布:

模拟退火算法是受到金属退火工艺启发的一种元启发式算法。在本文中,我们将对算法进行全面分析,并揭示围绕这种广为人知的优化方法的一些常见信仰和神话。本文的第二部分将研究自定义模拟各向同性退火(SIA)算法。

模拟退火算法由 Scott Kirkpatrick、George Gelatt 和 Mario Vecchi 于 1983 年开发。在研究高温下液体和固体的性质时,发现金属转变为液态,颗粒随机分布,而能量最小的状态是在初始温度足够高、冷却时间足够长的条件下实现的。如果不满足此条件,那么材料将发现自身处于具有非最小能量的亚稳态 — 这称为硬化,它是由材料的急剧冷却造成。在这种情况下,原子结构不具备对称性(各向异性状态,或晶格内材料的性质不均匀)。 

在缓慢的退火过程中,材料也变成固态,但具有组织化的原子和对称性,故此拟议使用该过程开发一种优化算法,该算法可以在复杂问题中找到全局最优。该算法也被提议作为解决组合优化问题的方法。 

因此,该算法的主要思路是基于金属退火过程的数学模拟。在退火过程中,为了均匀分布其内能,将金属加热到高温后缓慢冷却,令金属分子移动,并有序进入更稳定的状态,同时释放金属中的内应力,去除晶间缺陷。术语“退火”也与热力学自由能有关,热力学自由能是材料的一个属性,取决于其状态。 

模拟退火优化算法使用类似的过程。该算法应用了类似于加热和冷却材料的操作。该算法从初始解开始工作,该初始解可以是随机的,也可从以前的迭代中获得。然后,它应用操作来更改解的状态(可以是随机的、或受控的),从而获得新状态,即使它比当前状态更差。做出更差决策的概率由“冷却”函数决定,该函数降低了随着时间的推移做出更差决策的概率,允许算法暂时“跳出”局部最优值,并在搜索空间的其它地方寻找更好的解。

作者:Andrey Dik

 
这是一本很好的优化算法参考书,谢谢!
 
fxsaber #:
关于优化算法的一本很好的参考书,谢谢!

谢谢

 
兄弟,内容很精彩,我喜欢你用如此简洁的方式表达算法,同时又很容易阅读。

我想问你一个与测试目标函数有关的小问题。我们如何才能创建一个目标函数,返回专家顾问在当前设置下的历史盈利或亏损情况,这样我们就能优化专家参数以获取利润。希望我的问题表达清楚了。
 
Gamuchirai Zororo Ndawana #:
兄弟的内容非常精彩,我喜欢你用如此紧凑的方式表达算法,同时又易于阅读。

我想问你一个与测试目标函数有关的小问题。我们如何才能创建一个目标函数,返回专家顾问在当前设置下的历史盈利或亏损情况,这样我们就能优化专家参数以获取利润。希望我的问题表达清楚了。

如果您不介意从 fxsaber 处挖掘一些隐秘的源代码,那么请查看fxsaber 博客中发布的实现方法(可能需要语言翻译)。

Optimization - самостоятельная оптимизация торгового советника.
Optimization - самостоятельная оптимизация торгового советника.
  • 2024.03.26
  • www.mql5.com
После появления своего тикового тестера логичным продолжением было применить его на множестве алгоритмов оптимизации . Другими словами, научиться оптимизировать торговые советники самостоятельно - без
 
Gamuchirai Zororo Ndawana #:
精彩的内容,我喜欢你以如此紧凑的方式阐述算法,同时又易于阅读。

我想问您一个与测试目标函数有关的问题。我们怎样才能创建一个目标函数,返回 EA 在当前设置下的历史利润或亏损,从而优化 EA 参数以获取利润。我希望我已经清楚地表达了问题。

感谢您的赞誉,很高兴您喜欢这篇文章。希望@Stanislav Korotky 的评论对您有所帮助。

TesterStatistics () 可能有助于编译自定义拟合函数,供 OnTester () 使用。

 

是否有示例说明如何在 EA 中实现这些算法?

谢谢。

 
SergioTForex #:

是否有示例说明如何在 EA 中实现这些算法?

请提供示例。

https://www.mql5.com/zh/articles/14183
Использование алгоритмов оптимизации для настройки параметров советника "на лету"
Использование алгоритмов оптимизации для настройки параметров советника "на лету"
  • www.mql5.com
В статье рассматриваются практические аспекты использования алгоритмов оптимизации для поиска наилучших параметров советников "на лету", виртуализация торговых операций и логики советника. Данная статья может быть использована как своеобразная инструкция для внедрения алгоритмов оптимизации в торгового советника.
 

正如有人正确指出的那样,退火法的主要优势在于实施简单。因此,该算法的种群修改正需要并行化。

我记得作者说过在 MQL5 中编写并行算法很容易,但我还没有在他的文章中看到证实。如果我说错了,请指正。

PS.我指的是标准优化器中实现的普通并行化,而不是启动多个程序实例的技巧。当然,是通过 MQL5 实现,而不是使用外部 dll

 
Aleksey Nikolayev 外部 dll。

如果你需要代码级的并行化,OpenCL 已被广泛使用--请查看 Gizlyk 有关神经网络的文章 和他的教科书

如果需要在整个程序层面进行优化和并行化,就像在标准优化器中一样,可以参考Booster 的例子,它将 EA 实例并行化为代理(使用纯 MQL5,不使用外部 dll)。

MQL5 不支持为 C# 中的单独函数创建三元组以及其他形式的代码并行化。

Нейросети в алготрейдинге — практическое пособие по использованию машинного обучения в алгоритмическом трейдинге
Нейросети в алготрейдинге — практическое пособие по использованию машинного обучения в алгоритмическом трейдинге
  • www.mql5.com
В эпоху цифровых технологий и искусственного интеллекта алгоритмическая торговля преобразует финансовые рынки, предлагая новые стратегии для...
 
Andrey Dik #:
MQL5 不支持为 C# 中的单独函数创建三元组以及其他形式的代码并行化。
正是如此。
Andrey Dik#
OpenCL 的应用

无论是编码还是后续实际使用都极为不便的技术。例如,标准优化器不使用 OpenCL 就很好地证实了这一点。

Andrey Dik#:
Booster 为例

如果需要进行多次优化(优化次数不确定,每次优化的参数集也可能不确定),这种方法就很难适用。例如,可能是集合 MO 模型。