Решение одной объективной оптимизации с использованием многоцелевого алгоритма
Я хочу использовать многоцелевой эволюционный алгоритм для решения одной задачи объективной оптимизации. Это технически правильно и как это можно сделать?
1 ответ
Многоцелевые алгоритмы обычно работают путем сравнения показателей пригодности. Но когда результаты фитнеса являются многоцелевыми, как вы можете их сравнить? Следовательно, магия часто заключается в том, как алгоритм сортирует показатели пригодности. С одной целью эта магия может быть потеряна при попытке оптимизации с использованием многоцелевого алгоритма, но, тем не менее, она, вероятно, все еще будет работать достаточно хорошо.
Поскольку вы оптимизируете только одну цель, вы можете избежать использования генетических алгоритмов в самом простом виде. Для примера, обратитесь к моему ответу в алгоритме AI для оптимизации / прогнозирования многомерного решения.
Позвольте мне добавить кое-что к предыдущему ответу. Многокритериальная оптимизация - это обобщение одноцелевой оптимизации. Это означает, что оптимизация с одной целью является ее подмножеством. Область исследований в области многоцелевой оптимизации направлена на решение проблемы наличия нескольких значений, что подразумевает не скаляр, а вектор в целевом пространстве, который будет использоваться для оценки производительности. Каждый алгоритм многокритериальной оптимизации должен учитывать это, чтобы работать.
Очевидно, что для одноцелевой оптимизации концепция доминирования в объективном пространстве сохраняется. При двунаправленной оптимизации (предполагающей минимизацию) мы говорим, что[3, 5]
преобладают [2, 4]
(потому что он лучше в обоих целях) и равнодушен к [4, 2]
(один раз лучше и еще раз хуже). При одноцелевой оптимизации мы в основном сравниваем просто список с одним элементом, что аналогично сравнению просто скаляра. Мы просто говорим, что 3 преобладает над 5.
Следовательно, вы, как правило, также можете запускать многокритериальные алгоритмы оптимизации для одноцелевой задачи. Однако вы можете найти более эффективные одноцелевые алгоритмы, которые сходятся быстрее.
Например, вы можете использовать хорошо известный алгоритм NSGA-II для оптимизации одноцелевой функции с помощью pymoo, многоцелевой среды оптимизации на Python.
Отказ от ответственности: я являюсь основным разработчиком pymoo.
В приведенном ниже исходном коде используется NSGA-II (многокритериальный алгоритм) для получения оптимального решения для функции Химмельблау (однокритериальная тестовая задача):
from pymoo.algorithms.nsga2 import NSGA2
from pymoo.factory import get_problem
from pymoo.optimize import minimize
problem = get_problem("himmelblau")
algorithm = NSGA2(pop_size=20)
res = minimize(problem,
algorithm,
seed=1,
verbose=True)
print(res.F)
который находит F=0.00034225
в 2000 функциональных оценках.
Однако, если вы используете Hooke and Jeeves Pattern Search
вы получите оптимум намного быстрее:
from pymoo.algorithms.so_pattern_search import PatternSearch
from pymoo.factory import get_problem
from pymoo.optimize import minimize
problem = get_problem("himmelblau")
algorithm = PatternSearch()
res = minimize(problem,
algorithm,
seed=1,
verbose=True)
print(res.F)
Найденный F=4.62182083e-18
всего в 224 оценках.