Целевое программирование является ветвью многокритериальной оптимизации , которая, в свою очередь, является ветвью многокритериального анализа решений (MCDA). Его можно рассматривать как расширение или обобщение линейного программирования для обработки нескольких, обычно конфликтующих объективных мер. Каждой из этих мер задается цель или целевое значение, которое должно быть достигнуто. Отклонения от этих целей измеряются как выше, так и ниже цели. Нежелательные отклонения от этого набора целевых значений затем минимизируются в функции достижения. Это может быть вектор или взвешенная сумма в зависимости от используемого варианта целевого программирования. Поскольку удовлетворение цели считается удовлетворением лица(лиц), принимающего(их) решения, предполагается базовая философия удовлетворения . Целевое программирование используется для выполнения трех типов анализа:
Целевое программирование впервые было использовано Чарнесом, Купером и Фергюсоном в 1955 году [1], хотя само название впервые появилось в тексте Чарнеса и Купера 1961 года. [2] Затем последовали основополагающие работы Ли [3] , Игницио [4], Игницио и Кавалье [5] и Ромеро [6] . Шнидерджанс приводит библиографию большого количества статей до 1995 года, касающихся целевого программирования [7], а Джонс и Тамиз дают аннотированную библиографию периода 1990-2000 годов. [8] Недавний учебник Джонса и Тамиза [9] дает всесторонний обзор современного состояния целевого программирования.
Первым инженерным применением целевого программирования, предложенным Игницио в 1962 году, стала разработка и размещение антенн, используемых на второй ступени ракеты Сатурн V. Она использовалась для запуска космической капсулы «Аполлон», которая высадила первых людей на Луне.
Первоначальные формулировки целевого программирования упорядочивали нежелательные отклонения в ряд уровней приоритета, причем минимизация отклонения на более высоком уровне приоритета была бесконечно важнее любых отклонений на более низких уровнях приоритета. Это известно как лексикографическое или упреждающее целевое программирование. Игницио [4] дает алгоритм, показывающий, как лексикографическая целевая программа может быть решена как ряд линейных программ. Лексикографическое целевое программирование используется, когда существует четкий приоритетный порядок среди целей, которые должны быть достигнуты.
Если лицо, принимающее решение, больше заинтересовано в прямом сравнении целей, то следует использовать взвешенное или неупреждающее программирование целей. В этом случае все нежелательные отклонения умножаются на веса, отражающие их относительную важность, и складываются в единую сумму для формирования функции достижения. Отклонения, измеренные в разных единицах, не могут быть суммированы напрямую из-за явления несоизмеримости .
Следовательно, каждое нежелательное отклонение умножается на константу нормализации, чтобы обеспечить прямое сравнение. Популярными вариантами констант нормализации являются целевое значение соответствующей цели (следовательно, превращая все отклонения в проценты) или диапазон соответствующей цели (между наилучшими и наихудшими возможными значениями, следовательно, отображая все отклонения в диапазон от нуля до единицы). [6] Для лиц, принимающих решения, более заинтересованных в получении баланса между конкурирующими целями, используется программирование целей Чебышева . Представленный Флавеллом в 1976 году, [10] этот вариант стремится минимизировать максимальное нежелательное отклонение, а не сумму отклонений. При этом используется метрика расстояния Чебышева .
Главной силой целевого программирования является его простота и удобство использования. Это объясняет большое количество приложений целевого программирования во многих и разнообразных областях. Линейные целевые программы могут быть решены с использованием программного обеспечения линейного программирования как одна линейная программа или, в случае лексикографического варианта, как серия связанных линейных программ.
Следовательно, целевое программирование может обрабатывать относительно большое количество переменных, ограничений и задач. Обсуждаемым недостатком является способность целевого программирования выдавать решения, которые не являются эффективными по Парето . Это нарушает фундаментальную концепцию теории принятия решений , согласно которой ни один рациональный принимающий решения человек не выберет сознательно решение, которое не является эффективным по Парето. Однако существуют методы [6] [11] [12], позволяющие обнаружить, когда это происходит, и спроецировать решение на эффективное по Парето решение соответствующим образом.
Установка соответствующих весов в модели программирования целей — еще одна область, которая вызвала споры, и некоторые авторы [13] предлагают использовать для этой цели процесс аналитической иерархии или интерактивные методы [14] . Кроме того, веса целевых функций можно рассчитать на основе их предпочтений с использованием подхода порядкового приоритета . [15]