Мне пришло в голову, что использование случайного числа для выбора родителейкак азартная рулетка может оказаться эффективным. Позвольте мне объяснить это на примере поиска максимального значения функции. Пример показан ниже:
1.Представьте, что мы уже сгенерировали n случайных особей и вычислили их значение функции. Мы назвали отдельный элемент 'j' Xj, а имя его функционального значения - f(Xj). И мы находим и называем максимальное значение функции maxValue.
2. Ясно, что пригодность отдельного j равна f(Xj)/maxValue. Мы можем назвать его g(Xj).И затем мы вычисляем всю приспособленность особей.
3.Следующим шагом является поиск родителей. (Мы отказываемся от особи, значения приспособленности которой меньше 0). Классическим способом является игра в рулетку. Шанс выбора Xjи Xk равен g(Xj)*g(Xk)/[g(X1)+g(X2)+...+g(Xn)]^2.
Моя идея такова:
1.выбрать двух случайных отдельных Xj и Xk
2.генерировать случайное число rn в диапазоне от 0 до 1.
3.если rn меньше, чем g(Xj) и g(Xk)(приспособленность Xj и Xk), то они способны воспроизводиться. Затем кроссовер и мутировать.
4.оцените, достаточно ли мы создали дочерних особей, если да, то закончите.
иначе повторите 1-3.
Шанс выбора Xj и Xk равен g(Xj)*g(Xk)/n^2, что похоже на азартную рулетку. Рассмотрим что оба знаменателя двух шансов имеют постоянную величину, они в определенном смысле равны.
double randomNumToJudge=Math.random();//generate a random number to judge with the fitness
int randomMother=(int)(Math.random()*1000);
int randomFather=(int)(Math.random()*1000);//random generate parents
if((randomNumToJudge
Подробнее здесь: [url]https://stackoverflow.com/questions/53967728/is-this-way-to-select-parent-like-gambling-roulette-workable[/url]
Мне пришло в голову, что использование [b]случайного числа[/b] для выбора родителейкак азартная рулетка может оказаться эффективным. Позвольте мне объяснить это на примере поиска максимального значения функции. Пример показан ниже:
[list] [*]1.Представьте, что мы уже сгенерировали n случайных особей и вычислили их значение функции. Мы назвали отдельный элемент 'j' Xj, а имя его функционального значения - f(Xj). И мы находим и называем максимальное значение функции maxValue. [*]2. Ясно, что пригодность отдельного j равна f(Xj)/maxValue. Мы можем назвать его g(Xj).И затем мы вычисляем всю приспособленность особей. [*]3.Следующим шагом является поиск родителей. (Мы отказываемся от особи, значения приспособленности которой меньше 0). Классическим способом является игра в рулетку. Шанс выбора Xjи Xk равен g(Xj)*g(Xk)/[g(X1)+g(X2)+...+g(Xn)]^2. [/list]
Моя идея такова:
[list] [*]1.выбрать двух случайных отдельных Xj и Xk [*]2.генерировать случайное число rn в диапазоне от 0 до 1. [*]3.если rn меньше, чем g(Xj) и g(Xk)(приспособленность Xj и Xk), то они способны воспроизводиться. Затем кроссовер и мутировать. [*]4.оцените, достаточно ли мы создали дочерних особей, если да, то закончите. иначе повторите 1-3. [/list]
Шанс выбора Xj и Xk равен g(Xj)*g(Xk)/n^2, что похоже на азартную рулетку. Рассмотрим что оба знаменателя двух шансов имеют постоянную величину, они в определенном смысле равны.
[code] double randomNumToJudge=Math.random();//generate a random number to judge with the fitness int randomMother=(int)(Math.random()*1000); int randomFather=(int)(Math.random()*1000);//random generate parents if((randomNumToJudge