Оптимизаторы с лобовым подходом





Оптимизатор с лобовым подходом определяет оптимальное решение путем систематического перебора всех потенциальных вариантов, т.е. сочетаний правил, параметров или того и другого вместе. Поскольку требуется проверить все варианты, оптимизация может быть чрезвычайно медленной, и, тем медленнее она идет, чем больше комбинаций подлежит рассмотрению. Таким образом, оптимизация с лобовым подходом подвержена действию правил комбинаторного взрыва. Насколько же медленна оптимизация с лобовым подходом? Рассмотрим случай, когда у нас есть четыре параметра и каждый из них может принимать одно из 50 значений. Лобовая оптимизация потребует перебрать в тестах 504 (около б миллионов) сочетаний параметров для поиска одного идеального; если (как, например, характерно для TradeStation) каждый тест займет 1,62 с, то весь процесс займет около 4 месяцев. Этот подход не очень практичен, особенно при большом количестве параметров и их значений, а также в том случае, если, кроме оптимизации, у вас есть и другие интересы в этой жизни. Тем не менее оптимизация с лобовым подходом полезна и эффективна; при правильном использовании она всегда находит самый лучший вариант, так что лобовой подход предпочтителен для задач, где количество комбинаций можно перебрать за несколько минут, а не за месяцы и годы.
Для оптимизации с лобовым подходом не требуется длинных программ, обычно используются простые циклы. Параметры изменяются от начального до конечного значения с определенным шагом при помощи оператора For loop (С, C++, Бейсик, Pascal/Delphi) или Do loop (FORTRAN). Оптимизатор с лобовым подходом для двух параметров, написанный на современном диалекте Бейсика, может выглядеть примерно так:

BestFitness = - 1.0E30
For Parml = Parm1Start To Parm1Stop By Parm1lncr
For Parm2 = Parm2Start To Parm2Stop2 By Parm2Incr
RunSystem (Parm1, Parm2, GlobalData)
CurrentFitness = CalcFitness (GlobalData)
WriteProgressLine (GlobalData)
If CurrentFitness > BestFitness Then
CurrentFitness = BestFitness
BestParm1 = Parm1
BestParm2 = Parm2
End If
Next Parm2
Next Parm1

Поскольку оптимизаторы с лобовым подходом концептуально просты и легки в программировании, их часто встраивают в более продвинутые программные пакеты для трейдеров.
Как пример практической оптимизации с лобовым подходом рассмотрим систему, основанную на пересечении двух скользящих средних, реализованную при помощи TradeStation.

Содержание раздела