Современная электронная библиотека ModernLib.Net

Энциклопедия торговых стратегий

ModernLib.Net / Ценные бумаги, инвестиции / Донна Маккормик / Энциклопедия торговых стратегий - Чтение (Ознакомительный отрывок) (стр. 3)
Автор: Донна Маккормик
Жанр: Ценные бумаги, инвестиции

 

 


На этом заканчивается обсуждение отчетов об эффективности, доступных с использованием большинства симуляторов. Сейчас мы рассмотрим другой тип отчетов, предлагаемых симуляторами: отчет для каждой сделки.


Отчеты для каждой сделки

Примеры отчетов для каждой сделки были созданы с использованием симуляторов TradeStation (табл. 2–3) и C-Trader toolkit (табл. 2–4). Оба отчета описывают упоминавшуюся ранее систему пересечения скользящей средней. Так как рассматривался период с сотнями сделок и полный отчет слишком длинный, из таблиц удалены большие объемы текста, помеченные многоточиями. Поскольку данные отчеты представлены только как иллюстрации, такие пропуски вполне допустимы.

В отличие от отчета об эффективности, дающего общий обзор поведения торговой системы, детальный отчет, или отчет для каждой сделки, рассматривает в подробностях каждую из сделок, проведенную с моделируемым счетом. Минимальный отчет сопровождает каждую из сделок, включая даты входа и выхода (и время, если используются внутридневные данные), цены входа и выхода, позиции (длинные или короткие, количество контрактов) и прибыль или убыток от каждой сделки. Более обширный отчет для каждой сделки также будет включать информацию по виду использованного приказа (стоп-приказ, лимитный или рыночный приказ), по какой цене торгового дня приказ был исполнен (в начале, при закрытии или посередине), количество дней в каждой сделке, состояние счета на начало каждой сделки, максимальные благоприятные и неблагоприятные движения за каждую сделку и состояние счета при выходе из каждой сделки.

Как и отчеты об эффективности, отчеты для каждой сделки могут быть представлены по-разному и могут основываться на различных определениях вычисляемых показателей.

Если отчет об эффективности обеспечивает обзор всего «леса», то отчет о каждой сделке заостряет внимание на отдельных «деревьях»: в хорошем отчете каждая сделка рассматривается детально. Каковы были максимальные отрицательные переоценки открытой позиции, какова была бы прибыль при идеальном выходе и какова была «настоящая» прибыль (или убыток) моделируемой сделки, была ли торговля достаточно последовательной, были ли новые сделки лучше или хуже более старых, как можно использовать опыт худших сделок для улучшения системы – вот вопросы, на которые нельзя ответить при обзоре только общей эффективности системы. Кроме того, отчет по каждой сделке может быть дополнительно обработан в виде таблицы, например для построения гистограмм (Sweeney, 1993). Гистограммы могут показать, какая часть потенциальных прибылей фиксируется при использовании данной стратегии выхода, и полезны при определении целей прибыли. Кроме того, тщательное изучение лучших и худших сделок может дать результаты, полезные для улучшения системы.

<p>Эффективность симулятора</p>

Торговые симуляторы могут сильно различаться по таким показателям, как мощность, емкость и скорость. Скорость важна при выполнении многих тестов или проведении сложных оптимизаций, например генетических. Скорость также важна при разработке систем для портфельной торговли или при использовании длинных внутридневных серий данных с тысячами сделок и сотнями тысяч числовых данных. В некоторых случаях от скорости симулятора зависит сама возможность проведения анализа: ряд задач требует поистине огромного объема расчетов, недоступного для «медленных» программ. Емкость симуляторов определяет ограничения объема задач (количество баров данных, которое может загружаться или объем кода самой системы). Мощность симулятора – показатель, определяющий, как сложные тесты и задания могут выполняться на базах данных цен товаров или на целых портфелях, что важно для серьезной профессиональной торговли. Достаточно мощный симулятор требуется, например, для использования многих торговых моделей, приведенных в этой книге.


Скорость

Наиболее важный фактор, влияющий на скорость работы системы, – природа используемого языка: скриптовый или программный, т. е. определение, является ли программа скриптом или используется в интерпретаторе. Современные компиляторы языков общего назначения, таких как С++, FORTRAN и Pascal/Delphi, переводят написанную пользователем программу в высокоэффективный машинный код, пригодный для прямого исполнения процессором; это делает пакеты с использованием таких языков и компиляторов весьма быстрыми. С другой стороны, собственные интерпретируемые языки, такие как Visual Basic for Applications и Easy Language, должны переводиться и подаваться в процессор построчно при исполнении сложного, насыщенного циклами исходного кода. Каков же возможный выигрыш в скорости для компилируемого языка по сравнению с интерпретируемым? Мы слышали о системах, которые после перевода с собственного языка на С++ стали работать в 50 раз быстрее!


Емкость

Если скорость в основном зависит от работы с языком (интерпретируемым или компилируемым), то емкость главным образом от используемого 16– или 32-битного программного обеспечения. Старые 16-битные программы часто зависят от предела в 64 кбайт, т. е. практически для тестирования системы может быть загружено не более 15 000 баров данных (около 4 дней тиковых или 7 недель 5-минутных данных S&P 500). Кроме того, если у системы код большого объема, будьте готовы получить сообщение, что программа с ней не может справиться. Современные продукты, написанные на FORTRAN или С++, работают с соответствующими компиляторами, что позволяет, например, загрузить для тестирования всю историю тиков S&P 500 c появления индекса в 1983 г., если, конечно, у компьютера достаточно памяти. Кроме того, практически нет ограничений на количество сделок, принимаемых системой, или на сложность и размер самой системы. Все современные компиляторы для FORTRAN, С++, Pascal/Delphi – полностью 32-битные программы, работающие под 32-битными операционными системами, такими как Windows 95, Windows NT или LINUX/UNIX. Любой симулятор, работающий на основе таких компиляторов, способен работать с огромными объемами данных без труда. Поскольку большинство программных пакетов постоянно совершенствуется, проблема емкости становится все менее и менее принципиальной.


Мощность

Различия в мощности симуляторов главным образом зависят от языка программирования. Для начала рассмотрим язык, но не в аспекте скорости компилируемых и интерпретируемых языков, а в аспекте его возможностей. Можно ли изящно и обстоятельно запрограммировать самую сложную торговую идею? Как правило, примитивные языки не дают всех возможностей, необходимых для кодирования наиболее сложных торговых стратегий. К сожалению, наиболее мощные языки сложнее всего изучать. Но если человеку удалось овладеть таким языком, как С++, возможным становится практически все. Ваш текстовый процессор, программа работы с таблицами, броузер и сама операционная система, скорее всего, были исходно написаны на С++ или его предшественнике – Си. Такие языки, как С++ и Object Pascal (основа Borland Delphi), расширяемы и могут легко быть приведены в соответствие с требованиями разработки торговых систем с помощью использования библиотек и дополнительных компонентов. Языки Visual Basic и Easy Language, хотя и не обладают мощностью многоцелевых объектно-ориентированных языков вроде С++ и Object Pascal, более легки в изучении и имеют большинство необходимых возможностей. Гораздо слабее и не вполне достаточны для разработчика продвинутых систем макроязыки, встроенные в ряд популярных программ построения графиков, например MetaStock. Как правило, чем мощнее используемый язык, тем мощнее симулятор.

Вопросы оформления также влияют на мощность симулятора, особенно важна модульность и расширяемость. Симуляторы, использующие С++ или Delphi (Object Pascal) как основной язык, чрезвычайно расширяемы и модульны, поскольку таковы сами языки, спроектированные «снизу вверх». Библиотеки классов позволяют определять новые типы данных и операторов. Компоненты могут обеспечивать функции в готовых блоках, например управление базами данных или построение графиков. Даже «старинные» библиотеки, такие как Numerical Algorithms Group Library, International Mathematics and Statistics Library и Numerical Recipes Library, могут обеспечить самые разнообразные потребности. Модули, называемые User Functions могут быть написаны на Easy Language, а функции, написанные на других языках (включая C++), могут быть вызваны, если они записаны в виде DLL (динамической библиотеки ссылок). Макроязыки, с другой стороны, не столь гибки, что сильно лимитирует их эффективность для разработки продвинутых систем. С нашей точки зрения, возможность использования модулей, написанных на другом языке, абсолютно необходима: у разных языков разные «акценты», и даже при использовании мощного языка вроде С++ имеет порой смысл обратиться к модулям, созданным на другом языке, например таком, как Prolog (язык, разработанный для написания экспертных систем).

Еще одно важное свойство симуляторов, не связанное с языками программирования, – способность симулятора работать не только с индивидуальными финансовыми инструментами, но и с портфелями. Многие продукты не имеют возможности выполнять оптимизацию целых портфелей, хотя порой это достижимо при помощи дополнительных модулей. С другой стороны, хорошо организованный симулятор, как правило, позволяет моделировать торговлю портфелем различных финансовых инструментов.

<p>Надежность симуляторов</p>

Разные торговые симуляторы имеют разную степень надежности и достоверности. Не существует компьютерных программ, полностью гарантированных от ошибок, даже если ее производитель – знаменитая фирма мирового уровня. Кроме того, проблемы возникают при принятии решений в состоянии неустойчивого равновесия – когда в пределах одного и того же бара возникают условия для исполнения различных приказов. Некоторые из этих состояний, например так называемый прыгающий тик (Ruggiero, 1998), могут привести к тому, что система будет казаться лучшей на свете, в то время, как, по сути, она сможет разорить любого. Считается предпочтительным, чтобы симулятор выбирал худший вариант развития событий в неоднозначных ситуациях; таким образом, при начале реальной торговли вероятность приятных сюрпризов будет выше, чем неприятных. Все это сводится к тому, что при выборе симулятора следует выбирать хорошо проверенный, с историей надежной работы и четким описанием того, как программа трактует неоднозначные состояния. Кроме того, обязательно изучите недостатки симулятора и способы их обходить.

<p>Выбор правильного симулятора</p>

Если вы серьезно хотите заниматься разработкой продвинутых торговых систем, торговать сильно диверсифицированными портфелями, проводить тестирование индивидуальных контрактов или опционов, вам нужно собраться с силами для изучения программирования – вам нужен симулятор, созданный с помощью языков программирования общего назначения, таких как С++ или Object Pascal. Такие симуляторы имеют открытую архитектуру, позволяющую использовать множество дополнений и библиотек: библиотеки по техническому анализу, например от FM Labs (609-261-7357) и Scientific Consultant Services (516-696-3333); библиотеки общих числовых алгоритмов, например от Numerical Recipes (800-872-7423), Numerical Algorithms Group (NAG) (44-1865-511-245) и International Mathematics and Statistics Library (IMSL), в которых хорошо освещена статистика, линейная алгебра, спектральный анализ, дифференциальные уравнения и другие математические приложения. Продвинутые симуляторы с использованием общих языков программирования также доступны целому миру компонентов и графических средств управления, покрывающих все аспекты от сложного построения графиков и представления данных до продвинутого управления базами данных, и при этом совместимы с C++ Builder и Delphi, а также с Visual Basic и Visual C++.

Если же вам нужно нечто менее трудоемкое, выбирайте полные интегрированные решения. Убедитесь, что язык симулятора позволяет использовать процедуры, вызываемые по необходимости из DLL. Остерегайтесь продуктов, нацеленных в основном на построение графиков и с ограниченными возможностями программирования, если вы собираетесь разрабатывать, тестировать на исторических данных и использовать в торговле механические торговые системы, значительно отличающиеся от традиционных индикаторов.

<p>Симуляторы, использованные в этой книге</p>

Мы предпочитаем использовать симуляторы, основанные на практике современного объектно-ориентированного программирования. Одна из причин такого выбора состоит в том, что объектное ориентирование упрощает создание нужного количества моделируемых счетов, каким бы оно ни было. Это в особенности полезно при моделировании торговой системы, управляющей целым портфелем товаров или акций, как это сделано в большинстве тестов в данной книге. Объектно-ориентированные симуляторы также хороши для построения адаптивных самооптимизирующихся систем, в которых иногда требуется использовать внутреннее моделирование. Кроме того, такие программы позволяют достаточно просто создавать метасистемы (системы, принимающие решения на основе графиков изменения капитала других систем). Например, метасистемами можно считать модели распределения активов, поскольку они динамически меняют распределение средств между отдельными торговыми системами или счетами. Хороший объектно-ориентированный симулятор может генерировать графики изменения капитала портфелей и другую информацию для создания и тестирования на исторических данных систем распределения активов, работающих на основе множественных торговых систем. Из этих соображений, а также в силу привычки большинство тестов в этой книге проведены с использованием C-Trader tookit. Для того чтобы почерпнуть полезные знания из этой книги, не требуются познания в С++ и программировании. Логика любой системы или элемента системы будет подробно рассматриваться в тексте.

Глава 3. Оптимизаторы и оптимизация

Прекрасно разрабатывать торговые системы, не задумываясь об оптимизации. Но в реальности создание надежной системы – путь проб и ошибок, на котором какие-либо формы оптимизации неизбежны. Оптимизатор присутствует всегда – если не на поверхности, то в глубине процесса.

Оптимизатор как таковой – это программа или алгоритм, пытающийся найти лучшее из возможных решений задачи; оптимизация – процесс поиска, подбора этого решения. Оптимизатор может быть отдельной программой, возможно, выполненной в виде класса С++, объекта Delphi или функции ActiveX. Мощные продвинутые оптимизаторы часто создаются в виде компонентов, встраиваемых в программы, которые будет разрабатывать пользователь. Менее сложные оптимизаторы, например встречаемые в программах построения графиков высокого уровня, – обычно простые алгоритмы, занимающие несколько строчек программного кода. Поскольку любое решение, приводящее к оптимизации, является оптимизатором, «оптимизация» не обязательно связывается с компьютерами – оптимизатором может быть и человек, занятый решением задачи! Надо сказать, что человеческий мозг – одна из наилучших эвристических систем на земле!

<p>Что делают оптимизаторы</p>

Оптимизаторы существуют для поиска лучшего возможного решения задачи. Что под этим понимается? Прежде чем ответить на этот вопрос, давайте сначала проясним, что же является решением. В торговле на бирже под решением понимается некий набор правил торговли и, возможно, системных параметров.

У всех торговых систем есть не менее двух правил (правило входа и правило выхода), и у большинства имеется один или несколько параметров. Правила содержат логику системы и обычно имеют вид команд типа «если-то» на языке, на котором написана торговая система. Параметры определяют поведение описанной в правилах логики; они могут включать длины скользящих средних, важности связей в нейронной сети, пороги сравнений, уровни защитных остановок и цели фиксации прибыли и т. д. Простая система пересечения скользящей средней, использованная как пример в предыдущей главе, имеет два правила: одно – для приказа на покупку, другое – для приказа на продажу. У нее также был один параметр – длина скользящего среднего. Правила и параметры полностью определяют систему и ее поведение. Для получения лучшего эффекта от торговой системы может потребоваться изменение параметров и формулировок правил.

Нет сомнения, что одни сочетания правил и параметров, которые определяют системы, работают хорошо, а другие – плохо; т. е. решения бывают разного качества. Хорошее качество модели или решения, измеренное относительно некоего стандарта, называется пригодностью. Противоположность пригодности, т. е. показатель неадекватности решения, называется расходом.

На практике пригодность определяется функцией пригодности – блоком программы, который рассчитывает показатель относительной «привлекательности» решения. Функция может быть запрограммирована для определения пригодности именно так, как пожелает трейдер: например, пригодность можно определять как общую прибыль за вычетом максимального падения капитала. Функция расходов устроена аналогично, но чем выше ее значение, тем хуже работает система. Сумма квадратов ошибок, часто вычисляемая при использовании систем с нейронными сетями или линейной регрессией, может служить примером функции расходов.

Теперь можно определить наилучшее возможное решение задачи: это решение, имеющее максимальную пригодность или минимальный расход. Оптимизаторы пытаются найти лучшее решение проблемы с помощью поиска максимума функции пригодности или минимума функции расхода.

Лучшее возможное решение задачи может быть найдено разнообразными способами. В некоторых случаях задача может быть решена простым методом проб и ошибок, особенно если поиск решения не полностью автоматизирован, а проводится «вручную». В других случаях могут потребоваться сложные процедуры и алгоритмы. Например, симуляция процесса эволюции (в генетическом оптимизаторе) – очень мощный метод поиска качественных решений для сложных задач. В некоторых случаях лучшее решение – аналитическая (вычислительная) процедура, например метод сопряженных градиентов. Аналитическая оптимизация – эффективный подход для задач с гладкими (дифференцируемыми) функциями пригодности, например задач, встречающихся при обучении нейронных сетей или разработке множественных моделей линейной регрессии.

<p>Как используются оптимизаторы</p>

Оптимизаторы – замечательные инструменты, применимые множеством способов. Они помогают определить форму самолетов, сконструировать автомобили и даже выбрать маршрут доставки почты. Трейдеры в некоторых случаях используют оптимизаторы для определения комбинаций правил, ведущих к выгодной торговле. Во втором разделе мы покажем, как генетический оптимизатор может создавать выгодные модели для правил входа. Чаще всего трейдеры обращаются к оптимизаторам для поиска наиболее подходящих параметров системы; практически любые оптимизаторы, за исключением разве что аналитических, могут привлекаться для этой цели. Различные виды оптимизаторов, включая мощные генетические алгоритмы, полезны для обучения систем с нейронными сетями или нечеткой логикой. Должным образом подобранные стратегии оптимизации позволяют решать проблемы распределения активов. Иногда кажется, что единственный предел применения оптимизаторов – фантазия пользователя, но в этом кроется опасность: мощность и привлекательность инструмента часто приводят к злоупотреблению оптимизацией. Далее рассмотрим правильное и ошибочное применение оптимизаторов.

<p>Виды оптимизаторов</p>

Существует много видов оптимизаторов, каждый со своими преимуществами и недостатками, сильными и слабыми сторонами. Оптимизаторы можно классифицировать по таким критериям, как автоматический или ручной, простой или сложный, специальный или общего назначения, аналитический или стохастический. Все оптимизаторы, вне зависимости от вида, эффективности и надежности, ведут поиск лучшего из многих потенциальных решений формально поставленной задачи.


Скрытые оптимизаторы

Бывает, что нельзя кликнуть мышкой на кнопку с надписью «Оптимизировать». Нет команды, которую можно было бы отдать программе – да нет ни самой программы, ни компьютера вообще. Значит ли это, что оптимизации не происходит? Нет. Даже при отсутствии видимого оптимизатора и признаков оптимизации процесс идет сам по себе – это называется скрытой оптимизацией. Все происходит таким образом: трейдер испытывает набор правил, основанный на некоторых идеях, касающихся рынка. Результаты системы неудовлетворительны, и трейдер перерабатывает идеи, меняет правила и снова тестирует систему, получая лучший результат. Повторив свои действия несколько раз, он получает систему, которой можно доверить реальную торговлю. Можно ли считать эту систему оптимизированной? Поскольку никакие правила или параметры не подвергались модификации с помощью компьютерных программ, кажется, что трейдер с успехом разработал неоптимизированную систему. Но при этом испытывалось более одного варианта параметров, что привело к выбору оптимального решения – следовательно, система все-таки была оптимизирована! Любая форма решения задачи, где рассматриваются множественные варианты, из которых выбирается один, де-факто может считаться оптимизацией. Мозг трейдера, использующий мысленные алгоритмы решения задач, например эвристические алгоритмы проб и ошибок, является мощнейшим оптимизатором. Это означает, что оптимизация присутствует всегда и всегда работает; другого выхода просто не существует!


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

Оптимизатор с лобовым подходом определяет оптимальное решение путем систематического перебора всех потенциальных вариантов, т. е. сочетаний правил, параметров или того и другого вместе. Поскольку требуется проверить все варианты, оптимизация может быть чрезвычайно медленной, и тем медленнее она идет, чем больше комбинаций подлежит рассмотрению. Таким образом, оптимизация с лобовым подходом подвержена действию правил «комбинаторного взрыва». Насколько же медленна оптимизация с лобовым подходом? Рассмотрим случай, когда у нас есть четыре параметра и каждый из них может принимать одно из 50 значений. Лобовая оптимизация потребует перебрать в тестах 504 (около 6 миллионов) сочетаний параметров для поиска одного идеального; если (как, например, характерно для TradeStation) каждый тест займет 1,62 с, то весь процесс займет около 4 месяцев. Этот подход не очень практичен, особенно при большом количестве параметров и их значений, а также в том случае, если, кроме оптимизации, у вас есть и другие интересы в этой жизни. Тем не менее оптимизация с лобовым подходом полезна и эффективна; при правильном использовании она всегда находит самый лучший вариант, так что лобовой подход предпочтителен для задач, где количество комбинаций можно перебрать за несколько минут, а не за месяцы и годы.

Для оптимизации с лобовым подходом не требуется длинных программ, обычно используются простые циклы. Параметры изменяются от начального до конечного значения с определенным шагом при помощи оператора For loop (C, C++, Бейсик, Pascal/Delphi) или Do loop (FORTRAN). Оптимизатор с лобовым подходом для двух параметров, написанный на современном диалекте Бейсика, может выглядеть примерно так:

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

Как пример практической оптимизации с лобовым подходом рассмотрим систему, основанную на пересечении двух скользящих средних, реализованную при помощи TradeStation. Система оптимизировалась по показателю общей прибыли (это единственный показатель, который TradeStation может оптимизировать без дополнительных модулей). Ниже приведен код для торговой системы на двух скользящих средних:

Система была оптимизирована изменением периода первой скользящей средней (LenA) от 2 до 10 с шагом в 2. Период второй скользящей средней (LenB) оптимизировался от 2 до 50 с тем же шагом. Шаг был принят более 1, чтобы испытывалось менее 200 сочетаний параметров (TradeStation может хранить данные не более чем о 200 оптимизационных тестах). Поскольку были исследованы не все возможные сочетания параметров, оптимизация не была проведена идеально; лучшее значение могло оказаться пропущенным при поиске. Таким образом, оптимизация проходила в 125 тестов, что заняло 3 мин 24 с времени для обработки данных за 5 лет исторических данных на конец дня на компьютере с процессором Intel 486 частотой 66 МГц. Полученные результаты были загружены в таблицу Excel и сортировались по общей прибыли. В табл. 3–1 приведены различные показатели эффективности для 25 лучших вариантов.

В таблице: Lena означает период короткой скользящей средней, LenB – период длинной скользящей средней, ЧИСТ. – чистую прибыль, Д.ПРИБ. – чистую прибыль для длинных позиций, К.ПРИБ. – чистую прибыль для коротких позиций, Ф.ПРИБ. – фактор прибыли, ДОХ – общую (не годовую) доходность счета, МаксПК – максимальное падение капитала, СДЕЛ– общее количество совершенных сделок, ПРИБ% – процент прибыльных сделок.

Поскольку оптимизация – проблема поиска и нахождения решений, то порой найденные решения оказываются неожиданными, как случилось и в данном примере. Привычная трейдерская мудрость гласит: «Тренд – твой друг». При этом если вторая скользящая средняя имеет период меньше первого, то наиболее выгодные сделки в табл. 1–3 совершены против тренда. Эти выгодные контртрендовые сделки могли быть не обнаружены, если бы для поиска не использовалась оптимизационная процедура.


Оптимизация под управлением пользователя

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

При оптимизации под управлением пользователя применяются те же самые инструменты, что и при оптимизации с лобовым подходом. Вместо единственной оптимизации по всем возможным наборам параметров проводится несколько частичных оптимизаций, каждая из которых состоит всего из нескольких тестов. Например, в каждой оптимизации будет изменяться только один параметр, или же все параметры будут протестированы с большим шагом, создавая грубую «сетку результатов». После каждой частичной оптимизации результаты анализируются, и затем проводится следующая частичная оптимизация. Таким образом, процесс приводит к обнаружению желаемого решения.

Достичь успеха в оптимизации под управлением пользователя можно только при наличии серьезных знаний и опыта в проведении подобных исследований. При соответствующем навыке и опыте оптимизация под управлением пользователя может быть чрезвычайно эффективной и гораздо более быстрой, чем оптимизация с лобовым подходом. Скорость и эффективность – результат сочетания расчетов с разумом: зоны, где высока вероятность успеха, можно исследовать тщательно, а зоны без потенциальных результатов можно отсеять, сэкономив время.

Оптимизация под управлением пользователя наиболее уместна, если другими методами уже установлены приблизительные значения, если проблема знакома или хорошо понятна или если требуется оптимизировать небольшое количество параметров. Оптимизация под управлением пользователя – замечательный способ «отшлифовать» имеющееся решение, а также полезный способ определения чувствительности имеющихся моделей к изменениям правил и параметров.


Генетические оптимизаторы

Представьте себе нечто, способное решить все проблемы, связанные с созданием человека – нечто, представляющее собой вершину всех методов оптимизации и решения задач. Что это такое? Известный процесс эволюции. Генетические оптимизаторы пытаются использовать часть этой невероятной способности к решению задач при помощи грубой симуляции эволюционного процесса. По параметрам общей эффективности и размаха решаемых программ никакой многоцелевой оптимизатор не превосходит хорошо написанный генетический оптимизатор.

Генетические оптимизаторы являются стохастическими в том смысле, что они используют в работе случайные числа. Может показаться невероятным, что бросание кубиков помогает решать задачи, но при правильном подходе это так! Кроме случайности генетические оптимизаторы используют отбор и комбинирование. Продуманная интеграция случая, отбора и комбинации – причина успешной работы генетических оптимизаторов. Полное обсуждение генетических алгоритмов, служащих основой для генетических оптимизаторов, приведено во втором разделе книги.

Генетические оптимизаторы могут иметь множество ценных характеристик, например скорость (особенно при наличии риска «комбинаторного взрыва»). Генетический оптимизатор работает на несколько порядков быстрее, чем оптимизатор с лобовым подходом, особенно при наличии множества правил или значений параметров. Это происходит потому, что, как и при оптимизации под управлением пользователя, идет фокусировка на важных участках пространства решений, а тупики пропускаются. В противоположность оптимизации под управлением пользователя селективный поиск достигается без вмешательства человека.

Генетические оптимизаторы могут быстро решать сложные задачи и более устойчивы, чем другие подходы, к эффектам локальных максимумов (или минимумов) на поверхности значений функции пригодности (или затрат). Вычислительные методы плохи тем, что всегда ведут к ближайшей вершине или впадине, не обращая внимания на более высокие вершины или впадины, которые могут существовать в других местах. При этом хороший генетический оптимизатор часто находит лучшее глобальное решение – великолепный результат при сложной форме поверхности.


  • Страницы:
    1, 2, 3, 4, 5, 6