Генетический алгоритм. Шаг 2. Матмодель |
Автор megabax | |
31.01.2011 г. | |
Генетический алгоритм. Шаг 2. МатмодельИ так, приступим к созданию матмодели. Как я уже писал в предыдущей статье, все будет вертится вокруг параметров Health (Здоровье) и Rang (ранговый потенциал). И так, у нас имеется популяция роботов в количестве N. Что бы компьютер не подвис, нам нужно ограничить количество одновременно эмулируемых роботов. Пусть это будет Nmax. Тогда, если N>Nmax то контейнер должен удалить из системы N-Nmax роботов. Для этого ему необходимо отсортировать их по Health и "убить" самых слабых. Теперь нужно решить еще вот такие вопросы: "Каким образом заработанный роботом профит, просадка и нестабильность графика будут влиять на Health?", "Сколько запросов на спаривание должен послать робот-самец в зависимости от Health?", "Как определить ранговый потенциал?" и "И как будет передавать потомству генетический материал". И так, давайте по порядку. Как управлять параметром Health? Давайте сначала поставим цель. Пусть мы хотим достигнуть доходности 100% годовых. Идеальный график доходности - экспонента: Исходя из желаемой доходности определим норму доходности на за период - извлечем из 2 корень степени количество периодов в году. Для месяца это будет 5,95%. Если робот выполняет норму доходности, то он получает "питание" и может жить. Если нет - то его "паек" будет урезан. Сначала робот "голодает", затем у него начинает уменьшаться Health. Если робот перевыполняет план, то он получает больше питания, и у него начинаются "жировые отложения". Возникает вопрос, а нужно ли робота поощрять за "жир"? С одной стороны, чем больше прибыль, тем лучше. С другой, хотя большой профит - это хорошо, но это отклонение от идеального графика, нестабильность. Поэтому, поощрять перевыполнения плана сильно не будем. Наше поощрение будет состоять только в том, что в случае голода "жирный" робот дольше проживет. Кстати, немного наказать за нестабильность, даже за хорошую, робота все же нужно (наряду с поощрением): "жирный" робот будет получать большие удары по Health в случае просадки, чем его собраться, точно выполняющие норму прибыли. Просадка (убыток) явление крайне нежелательно, поэтому, если робот допустит это, то у него сразу же отнимается часть Health, не будем даже ждать, когда он "проголодается". Сколько Health будем отнимать, выясним, когда будем писать программу, экспериментальным путем. Сейчас лишь решим, что "отнимание" будет пропорционально допущенному убытку. Теперь перейдем к спариванию. Думаю, что бы определить, с каким количество "самок" будет спариваться робот, будет определяться путем умножения Health на коэффициент, который мы так же выясним эмпирически. Какую "самку" выбрать для спаривания? В целях упрощения задачи, "самец" выбирает самку по рандому (случайно). А вот уже "самка" выбирает партнера исходя из рангового потенциала. Как его определить? Думаю, на него не сколько должен влиять высокий Health, сколько способность робота сохранять этот параметр стабильно высоким длительное время. Значит, каждое увеличение здоровья должно поднимать и ранговый потенциал. А вот его падение снижать Rang гораздо сильнее, чем повышает повышение. Если Health не меняется, то ранговый потенциал тоже должен немного расти, при чем тем быстрее, чем выше Health. Допустим, сначала Health был 100%. Затем стало 105%. А потом упало до 100%. Потом снова поднялось до 105%. А у другого робота Health был 100%, затем 102%, потом 103%, затем 105%. У последнего при таком алгоритме ранг будет выше. И это правильно, потому что если стабильно повышение Health говорит о том, что робот исправно выполняет норму прибыли и его график доходности стабильный, что соответствует нашей цели. Теперь осталось определиться с самими генами. Для этого лучше всего взять уже готовый стандартный генетический алгоритм. И в него пихать всю информацию о том, как робот будет совершать сделки. Поэтому в следующий раз мы займется разработкой механизма биржевой торговли для наших роботов. |
|
Последнее обновление ( 01.08.2011 г. ) |