Могу ли я запустить GA для оптимизации вейвлет-преобразования?
Я выполняю вейвлет-преобразование (cmor) для оценки затухания и частот, которые существуют в сигнале. Cmor имеет 2 параметра, которые я могу изменить, чтобы получить более точные результаты. центральная частота (Fc) и частота полосы пропускания (Fb). Если я создаю сигнал с несколькими частотами и затуханием, я могу измерить погрешность моей оценки (рис. 2). но в действительности у меня есть сигнал, и я не знаю его частоты и затухания, поэтому я не могу измерить ошибку. Поэтому один из моих друзей предложил мне восстановить сигнал и найти ошибку, измерив разницу между исходным и восстановленным сигнал e(t)=|x(t)−x^(t)|. поэтому мой вопрос:
Кто-нибудь знает лучшую функцию, чтобы найти ошибку между восстановленным и исходным сигналом, а не e(t)=|x(t)−x^(t)|.
я могу использовать GA для поиска Fb и Fc? или ты знаешь лучший метод поиска?
Надеюсь, что эта картина показывает, что я имею в виду, фактический случай последний. другие для объяснений
заранее спасибо
1 ответ
Вы говорите, что не знаете ошибку до тех пор, пока не запустите вейвлет-преобразование, но это нормально. Вы просто запускаете вейвлет-преобразование для каждого индивидуума, который производит GA. Те люди с более низкими ошибками считаются более здоровыми и выживают с большей вероятностью. Это может быть очень медленно, но концептуально, по крайней мере, это идея.
Давайте определим тип данных хромосомы, содержащий закодированную пару значений, одно для частоты, а другое для параметра демпфирования. Не беспокойтесь о том, как их кодируют сейчас, просто предположите, что это массив из двух двойных, если хотите. Все, что важно, это то, что у вас есть способ получить значения из хромосомы. Сейчас я просто буду ссылаться на них по имени, но вы можете представить их в двоичном виде, в виде массива значений типа double и т. Д. Другой член типа Chromosome - это двойное хранение его пригодности.
Очевидно, что мы можем генерировать случайные значения частоты и демпфирования, поэтому давайте создадим, скажем, 100 случайных хромосом. Мы еще не знаем, как настроить их, но это нормально. Сначала установите его на ноль. Чтобы установить реальное значение пригодности, нам нужно будет выполнить вейвлет-преобразование один раз для каждой из наших 100 настроек параметров.
for Chromosome chr in population
chr.fitness = run_wavelet_transform(chr.frequency, chr.damping)
end
Теперь у нас есть 100 возможных вейвлет-преобразований, каждое с вычисленной ошибкой, хранящихся в нашем наборе с именем population
, Осталось отобрать более подходящих членов населения, развести их и позволить более подходящим членам населения и потомству выжить в следующем поколении.
while not done
offspring = new_population()
while count(offspring) < N
parent1, parent2 = select_parents(population)
child1, child2 = do_crossover(parent1, parent2)
mutate(child1)
mutate(child2)
child1.fitness = run_wavelet_transform(child1.frequency, child1.damping)
child2.fitness = run_wavelet_transform(child2.frequency, child2.damping)
offspring.add(child1)
offspring.add(child2)
end while
population = merge(population, offspring)
end while
Есть множество разных способов сделать отдельные шаги, такие как select_parents
, do_crossover
, mutate
, а также merge
здесь, но базовая структура ГА остается почти такой же. Вам просто нужно запустить новую вейвлет-декомпозицию для каждого нового потомства.