Эволюционный алгоритм без целевой функции
В настоящее время я пытаюсь найти хорошие параметры для моей программы (около 16 параметров и выполнение программы занимает около минуты). Эволюционные алгоритмы казались хорошей идеей, и я хотел посмотреть, как они работают.
К сожалению, у меня нет хорошей фитнес-функции, потому что дисперсия моей целевой функции очень высока (я не могу запустить ее достаточно часто, не дожидаясь 2016 года). Однако я могу вычислить, какой набор параметров лучше (проверить две конфигурации друг против друга). Знаете ли вы, есть ли эволюционные алгоритмы, которые используют только эту информацию? Есть ли другие методы оптимизации, более подходящие? Для этого проекта я использую C++ и MATLAB.
// Обновление: большое спасибо за ответы. Оба выглядят многообещающе, но мне понадобится несколько дней, чтобы оценить их. Извините за задержку.
2 ответа
Если ваш парный тест дает правильный полный порядок, то есть если a >= b, а b >= c подразумевает a >= c и некоторые другие условия. Тогда, может быть, вы можете построить цель ранжирования на лету и использовать CMA-ES для ее оптимизации. CMA-ES является эволюционным алгоритмом и инвариантен к сохраняющему порядок преобразованию значения функции и сохраняющему угол преобразованию входных данных. Кроме того, поскольку это метод второго порядка, его сходимость очень быстрая по сравнению с другими эвристиками поиска без производных, особенно в задачах с большими измерениями, где случайный поиск, такой как генетические алгоритмы, занимает вечность.
Если вы можете сравнивать решения попарно, тогда может подойти какой-то подход к выбору турниров. Статья в Википедии описывает использование его для генетического алгоритма, но его легко применить к эволюционному алгоритму. То, что вы делаете, - это постоянно выбираете небольшой набор решений от населения и проводите турниры среди них. Для простоты размер турнира мог бы быть степенью 2. Если это было 8, тогда пара случайным образом восходит на 8 и сравнивает их, выбирая 4 победителей. Соедините их и выберите 2 победителей. В последнем туре - выберите победителя турнира. Это решение затем может быть видоизменено 1 или более раз, чтобы предоставить элемент (ы) для следующего поколения.