
Вы упускаете торговые возможности:
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Регистрация
Вход
Вы принимаете политику сайта и условия использования
Если у вас нет учетной записи, зарегистрируйтесь
Предлагаю размер популяции вычислять:
Огромное спасибо за статью! Если бы не она - то я никогда не узнал что такое генетические методы :)
Но есть один вопрос! Когда делаем проверку хромосом по базе – в случае совпадения – от индекса хромосомы из базы отнимется единица. Зачем? А что если индекс равен нулю?
Где я ошибаюсь???
Предлагаю размер популяции вычислять:
Не буду оспаривать компетентность приведённого источника, однако вынужден не согласится.
Целесообразность применения ГА в задачах оптимизации заключена в снижении необходимого количества запусков ФФ для определения оптимума в сравнении с прямым перебором.
Если следовать рекомендации
ChromosomeCount=GeneCount*11;
то для задачи с 1000 аргументами потребуется размер популяции в 11000 особей! А это 11000 запусков ФФ только на 1 эпохе! С таким же успехом можно использовать случайное генерирование генов и результат не намного уступит в нахождении оптимума. Приведенный источник делает "ставку" на то, что в большой популяции будет достаточно генетического материала для дальнейшего развития популяции в сторону улучшения на каждой эпохе. Я же стараюсь добиться того же самого, но за счет игры вероятностями генетическими операторами без тотального увеличения запусков ФФ.
Огромное спасибо за статью! Если бы не она - то я никогда не узнал что такое генетические методы :)
Но есть один вопрос! Когда делаем проверку хромосом по базе – в случае совпадения – от индекса хромосомы из базы отнимется единица. Зачем? А что если индекс равен нулю?
Где я ошибаюсь???
Проверка по базе осуществляется только в случае, когда в базе есть хоть одна хромосома. Вы привели не весь участок кода поиска по базе.
Поэтому случай, когда в базе нет хромосом, но проверка по пазе осуществляется - невозможен.
Проверка по базе осуществляется только в случае, когда в базе есть хоть одна хромосома. Вы привели не весь участок кода поиска по базе.
Поэтому случай, когда в базе нет хромосом, но проверка по пазе осуществляется - невозможен.
Спасибо за такой оперативный ответ! Я имел ввиду не совсем то о чем вы говорите!
1) Предположим, что в базе действительно есть одна хромосома (ChrCountInHistory = 1 - т.е. размерность массива равна единице) - тогда её индекс в базе равен нулю! (ChrCountInHistory по умолчанию равен нулю - индекс элемента в массиве равен нулю).
А мы от этого индекса отнимаем единицу:
к тому же перебор начинается с Ch1=0
2) Мы сравниваем с HistoryHromosomes[Ge][Ch1], а присваиваем HistoryHromosomes[0][Ch1-1]
Вы правы, спасибо.
Нужно так:
Вы правы, спасибо.
Нужно так:
Хмм..
Теперь "Array out of range" на HistoryHromosomes[0][Ch1], хотя вроде бы всё правильно...
joo:
Вы правы, спасибо.
Не за что! Главное чтобы заработало теперь ещё лучше чем раньше :)
joo:
Хмм..
Теперь "Array out of range" на HistoryHromosomes[0][Ch1], хотя вроде бы всё правильно...
Трудно сказать почему - у нас разный для анализа код. Может быть дело в переменной "position" - в статье её аналог это "chromos". Код который в статье проглядел наверное раз 10 - так и не смог понять где косяк :( Позже проверю на тех примерах, которые в статье - может что-то проясниться.
P.S. : а оправдывает себя использования банка памяти, если переменная состоит из ~150 значений. А в истории 100000 особей. Может в таком случае быстрее будет посчитать, чем все это проверить (перебрать)? Не проверяли?
P.S. : а оправдывает себя использования банка памяти, если переменная состоит из ~150 значений. А в истории 100000 особей. Может в таком случае быстрее будет посчитать, чем все это проверить (перебрать)? Не проверяли?
Всё зависит от времени необходимого для вычисления ФФ. Если ФФ просто какая то математическая функция - то банк не целесообразен. Но если же в ФФ используются прогоны по истории (обучение нейронки и др.) и другие ресурсопрожорливые задачи, то банк необходим и способен существенно снизить время оптимизации.
Ну и от точности генов зависит. Чем "грубее" гены, тем чаще будут попадаться повторы, и тем целесообразнее использование банка хромосом.
....
:)
Всё же, ошибки нет, Вы меня здорово сбили с толку. Вот, накидал скрипт проверочный, побалуйтесь с ним, станет всё понятно.
здесь хоть и сравнивается хромосома с положением Ch1, но на верхнем цикле присваиваться +1, поэтому и вычитаю потом -1.
Согласен, кривовато, можно и красивше заделать.
Вот, собственно, скриптик для проверки: