Я предполагаю, что из вашего вопроса у вас есть какая-то функция F(metabolites)
, которая возвращает spectrum
, но у вас нет обратной функции F'(spectrum)
для возврата metabolites
.Пространство поиска metabolites
велико, поэтому вместо грубой силы вы хотите попробовать приблизительный метод (например, генетический алгоритм), который сделает более эффективный случайный поиск.
Чтобы применить любой такойПриблизительным методом вам нужно будет определить функцию оценки, которая сравнивает сходство между целевым спектром и пробным спектром.Чем плавнее эта функция, тем лучше будет работать поиск.Если он может дать только true / false, это будет чисто случайный поиск, и вам будет лучше с грубой силой.
С учетом функции F
и вашего счета (он же фитнес) все, что вам нужно сделатьСоздает совокупность возможных комбинаций метаболитов, пропускает их через F
, оценивает все полученные спектры, а затем использует кроссовер и мутацию для создания новой совокупности, которая объединяет лучших кандидатов.Выбор способа скрещивания и мутации обычно зависит от конкретной области, поскольку вы можете значительно ускорить процесс, избегая создания бессмысленных геномов.Лучшая частота мутаций будет очень мала, но также потребует настройки вашего домена.
Не зная о вашем домене, я не могу сказать, как должен выглядеть отдельный член вашего населения, но это может простобыть списком метаболитов (который позволяет упорядочивать и дублировать, если это интересно) или цепочкой логических значений по всем возможным метаболитам (что имеет преимущество в том, что он является инвариантом порядка и дает очевидные возможности для кроссовера и мутации).Недостаток струны заключается в том, что отфильтровывать бессмысленные гены может быть более затратным (например, может не иметь смысла иметь только 1 метаболит или более 1000).Быстрее избежать создания чепухи, чем просто присвоить ей низкую пригодность.
Существуют и другие приблизительные методы, если у вас есть F
и ваша функция подсчета очков.Самым простым, вероятно, является Имитация отжига .Другой, который я не пробовал, - это Алгоритм пчел , который, по-видимому, представляет собой многостартовый имитируемый отжиг с усилием, взвешенным по пригодности (что-то среднее между SA и GA).