Я нахожу проблему с методом getDate () / setDate () в том, что он слишком легко превращает все в миллисекунды, и мне иногда сложно следовать синтаксису.
Вместо этого мне нравится отрабатывать тот факт, что 1 день = 86 400 000 миллисекунд.
Итак, для вашего конкретного вопроса:
today = new Date()
days = 86400000 //number of milliseconds in a day
fiveDaysAgo = new Date(today - (5*days))
Работает как шарм.
Я все время использую этот метод для расчета 30/60/365 дней.
Вы можете легко экстраполировать это, чтобы создать единицы времени для месяцев, лет и т. Д.
Однажды я запрограммировал генетический алгоритм, я включил эти значения в значения для изменения, в основном, как вы сказали, используя GA для настройки. Это сработало на удивление хорошо, особенно с учетом того, что я обнаружил, что полезно, чтобы эти значения изменялись в процессе вычисления.
Я считаю, что полезно думать об этих проблемах как об ландшафте, где вы пытаетесь найти самую низкую точку.
Такие методы, как генетические алгоритмы, используются, когда ландшафт слишком велик, чтобы просто проверить все точки, а «форма» ландшафта такова, что такие методы, как градиентный спуск, заставят вас застрять в локальных минимумах.
Хорошим примером является функция Растригина ( ссылка на изображение ):
(источник: scientific-computing.com )
:
Ваш выбор:
Размер поколения:
Скорость мутации:
Так что это действительно зависит от вашего собственного конкретного пространства поиска. Поэкспериментируйте с параметрами и постарайтесь найти оптимальное сочетание. Согласен, использование другого ГА для оптимизации параметров не решит проблему.
Это непросто.
Почему? Из-за теоремы об отсутствии бесплатного обеда . По сути, это означает, что не существует общего алгоритма поиска, который бы хорошо работал для всех проблем.
Лучшее, что вы можете сделать, это настроить поиск для конкретного проблемное пространство. Вам придется вручную настроить параметры, чтобы они соответствовали вашему решению. Извините.
Использование GA для поиска параметров GA становится сложным. Как найти оптимальные параметры для вашего поиска GAGA? Другой ГА ...?
На самом деле не существует автоматического способа сделать это для данного набора данных. Если бы они были, они бы не раскрывали эти параметры. Использование второго ГА для настройки параметров первого ГА опасно - используете ли вы третий ГА для настройки параметров второго? Даже если вы это сделаете, это все равно рецепт переобучения.
Я бы посоветовал поиграть с параметрами и посмотреть, как они влияют на распределение вашей популяции в каждом поколении, сколько поколений нужно, чтобы прийти к приемлемому ответу. и т.д. Если у вас слишком много мутаций, ваша популяция никогда не стабилизируется. Слишком мало, и вы получите однородность.
Это грязный секрет ГА, что их настройка - это искусство, а не наука.
Как все говорили, однозначного ответа нет. Хотя есть некоторая тенденция использовать скорость кроссовера на уровне 0,7-0,9 и мутацию на уровне 0,1-0,3, это действительно зависит. Зависит от проблемы, может зависеть от фитнес-функции и определенно зависит от самого генетического алгоритма. Существует множество вариаций ГА, оптимальные параметры для одной и той же задачи могут отличаться.
Что касается использования ГА для настройки параметров целевого ГА, то есть такие подходы, но, как уже указывалось, как настроить параметры первого ГА? Имейте в виду, что, возможно, скорость мутаций должна быть выше вначале, а затем она должна снижаться, а скорость кроссинговера должна увеличиваться. Это вопрос разведки или эксплуатации. Существуют подходы, позволяющие сделать GA более адаптивным и позволять ему изменять свои параметры по мере поиска решения. Нечеткие контроллеры иногда используются для управления параметрами GA. Есть и другие подходы.
Если вы хотите узнать об этом больше, купите книги или просмотрите научные исследования.
Если вам нужно настроить свой собственный GA без обширных исследований, попробуйте одни значения из других, и поэкспериментируйте с ними.