Есть несколько способов решения этой проблемы, но я подозреваю, что ни один из них не сделает именно то, что вы ищете.
Когда у вас есть более одной цели, и если вы конкурируете, то существует компромисс.Вам нужно выбрать баланс, который вы предпочитаете, между f1
и f2
.
Многоцелевая оптимизация, о которой вы упомянули, предоставляет вам оптимальный по Парето набор решений.Эти решения будут так называемыми недоминированными, ни одно решение в наборе не будет лучше, чем другое, с точки зрения f1
и f2
.Каждое решение будет представлять различный компромисс между этими значениями.Вы должны посмотреть на полученный набор и решить, какой конкретный компромисс лучше всего подходит для вашего конкретного приложения.
Как вы уже обнаружили, вы также можете выполнить взвешенную сумму целей, преобразовав ее вединственная объективная проблема.Тем не менее, это требует, чтобы вы знали желаемый компромисс между целями и взвешивали их соответственно.Если у вас есть какое-то базовое решение, которое вы пытаетесь улучшить, вы можете использовать его для нормализации своей функции.Например, f = f1/f10 + f2/f20
даст равномерный баланс для улучшения f1
и f2
относительно вашего первоначального дизайна.
Третий вариант - преобразовать одну цель в ограничение.Например, если вы будете довольны любым решением, например, с f1 < c
, вы можете установить это как ограничение и затем использовать только f2
в качестве цели.
Каждый из этих методов требует, чтобы Вы определяете компромисс или некоторую удовлетворительную стоимость для f1
и f2
.Никакие алгоритмы оптимизации не могут придумать такой баланс для вас.