construct
construct copied to clipboard
Implement MCMC (Markov Chain Monte Carlo) algorithm
Нужно реализовать алгоритм MCMC на популяции. Для этого нужно ввести конфиг orgMCMCPeriod, который будет запускать одну итерацию алгоритма. Он состоит в следующем:
- при наступлении периода нужно отсортировать все организмы по их мутагенезу (кол-во мутаций за время. думаю можно взять период мутаций и их процент)
- пройти по всем отсортированным организмам и брать пары по индексам 1,2; 2,3; ...
- для каждой пары вычислить вероятность обмена мутагенезом: смотри формулу в левом нижнем углу доски. Где, mi и mi+1 - это мутагенез, Fi и Fi+1 - фитнесс (нужно попробовать с другими параметрами, например скорость нахождения энергии)
- mi < mi+1, Fi+1 < Fi, bi = 1/mi, bi+1 = 1/mi+1. p (вероятность обмена) = min(1, e^(-(bi+1 - bi)*(Fi+1 - Fi)))
- вызываем
Math.random() <= pтогда меняем параметры мутагенеза - применяем этот алгоритм ко всем парам организмов в популяции
Так же, для успешной работы алгоритма, нужно чтобы в популяции всегда были организмы с низким и высоким мутагенезом. Для этого нужно ввести другой конфиг orgUpdateMutationsPeriod или что-то похожее. При наступлении этого периода нужно искусственно вводить мутагенез организмам по какому-то распределению.