Приветствую! Я, Ложкинс Алексей, консультант и разработчик оптимизационных решений и математических моделей для бизнеса. Это первая в цикле работ обучающая статья, часть личного образовательного проекта «Make optimization simple». Цель проекта – продемонстрировать доступность технологий и показать на примерах, что моделировать можно без глубокого математического фундамента.
Из статьи вы узнаете об основных компонентах математической оптимизационной задачи на примере классической задачи о назначениях, в частности, распределение машин такси на заказы. Далее, я покажу, как реализовать программный прототип математической модели посредством Python и библиотеки PuLP, а также продемонстрирую, как получить оптимальное решение задачи всего в одной строке кода без реализации специальных алгоритмов.
Материал статьи предназначен
- для базового погружения в математическое моделирование и оптимизацию;
- для демонстрации доступности технологий и возможностей моделировать, решать оптимизационные задачи без порога входа и специальной подготовки (мат./тех. образования).
Математическая оптимизация
Математическая оптимизация — это мощный метод, используемый для поиска наилучшего решения задачи, отвечающего определенным критериям и удовлетворяющего набору ограничений. Она включает в себя четыре основных компонента:
Как составить портрет целевой аудитории: САМЫЙ ПРОСТОЙ СПОСОБ! Просто о сложном
- Целевая функция — это математическое выражение, объект оптимизации. В зависимости от целей оптимизации выделяют два критерия: задача максимизации и задача минимизации целевой функции;
- Ограничения — это условия, которые должны быть выполнены для того, чтобы решение было осуществимым. Они ограничивают возможные значения переменных и обычно выражаются в виде неравенств или равенств;
- Решающие переменные — это неизвестные величины, которые мы хотим определить в результате решения оптимизационной задачи. Они используются для формулирования целевой функции и ограничений. Моделируют различные варианты выбора или действий, которые могут быть предприняты для достижения желаемого результата;
- Метод оптимизации — это алгоритмы, используемые для нахождения оптимального решения задачи. Мы сконцентрируем наше внимание на задачах смешанного линейного программирования (MILP), для которых существуют стандартные методы их решения. Кроме того, есть упакованные программные пакеты с этими методами, что повышает доступность мат. моделирования.
Комбинация этих четырех компонентов — это то, что составляет задачу математической оптимизации. Тщательно сформулировав целевую функцию, переменные для принятия решения и ограничения, а также выбрав подходящий метод оптимизации, мы можем найти наилучшее решение для широкого спектра реальных проблем.
Постановка задачи
Рассмотрим типичную питерскую ситуацию в пятницу вечером. Иван, Михаил и Александр запланировали пойти в бар. Одновременно заказывают такси от своего дома до бара, используя один и тот же агрегатор такси одинакового класса (например, комфорт). Рядом оказываются свободными ровно три машины с разной удаленностью от потенциальных пассажиров. Кроме этого, действуют следующие вполне реалистичные условия: пассажир может ехать только на одной машине, одна машина может взять не более одного заказа (пассажира).
Как составить портрет целевой аудитории и найти целевые запросы в интернете — Семинар 1 часть 2
Задача: назначить клиентам машины таким образом, чтобы все клиенты добрались до бара на такси, каждая машина перевезла не более одного пассажира и общие затраты на перевозку пассажиров были минимальны.
Построение модели
Чтобы решить поставленную выше задачу, мы будем использовать линейное программирование. Оно представляет собой математических методов, используемых для оптимизации линейной целевой функции с учетом линейных ограничений. Линейное программирование имеет множество реальных применений, включая планирование производства, оптимизацию транспортировки и распределение ресурсов.
Построение программного прототипа линейной модели будем реализовывать посредством программного пакета PuLP, который предоставляет среду для инициализации самой математической модели и позволяет подключать сторонние пакеты (коммерческие или open source) для решения оптимизационных задач. Чтобы использовать PuLP для решения задачи с назначениями, нам сначала нужно будет установить библиотеку. Вы можете установить PuLP с помощью pip:
pip install pulp
Индексы и входные данные
Введем следующие обозначения:
C — список клиентов: Иван, Александр и Михаил;
T — список такси: желтое, зеленое, синее;
c ∈ C — индекс и множество клиентов, клиент c содержится во множестве C;
t ∈ T — индекс и множество такси, машина t содержится во множестве T.
Запишем эти множества в виде списков Python:
# Инициализируем множества клиентов и множество такси. Используем англоязычные названия C = [«Ivan», «Aleksander», «Mikhail»] # имена клиентов T = [«yellow», «green», «blue»] # цвета машин
Целевая функция рассматриваемой задачи — минимизация затрат. Разберемся в структуре затрат.
Общие затраты = постоянные затраты + переменные затраты.
Под постоянными затратами будем понимать затраты на перевозку пассажира от его местоположения до бара. Они не зависят от того, какая из трех машин будет выполнять заказ (уровень сервиса одинаковый). В свою очередь, переменные затраты — это затраты на подачу машины клиенту.
В зависимости от клиента эти затраты могут отличаться: разное расстояние и разное прогнозное время в пути до клиента. Постоянные затраты не влияют на целевую функцию, т.к. они не зависят от назначения, поэтому будем рассматривать только переменные затраты. Ниже представлена матрица переменных затрат.

Для каждой комбинации клиента c (строка) и машины t (столбец) сопоставлены затраты ect в рублях. Воспользуемся словарем в Python для инициализации матрицы затрат, где по ключу (c, t) получим размер переменных затрат назначения.
# Матрица переменных затрат E =
Инициализация модели
Импортируем библиотеку PuLP:
import pulp
Прежде чем создавать переменные и ограничения, необходимо инициализировать класс модели. В дальнейшем ограничения и целевая функция будут определяться в привязке к модели. В качестве аргументов передаем название модели «TaxiAssignmentProblem» и класс оптимизационной задачи, в нашем случае — минимизация затрат: pulp.LpMinimize . Модель может содержать только одну оптимизационную задачу.
# Инициализация модели model = pulp.LpProblem(«TaxiAssignmentProblem», pulp.LpMinimize)
Инициализация переменных
Модель инициализирована, теперь можем начать запись нашей модели. Сначала определим набор решающих переменных. Нам нужно выяснить, какую машину назначить какому клиенту.
Определим для каждой возможной связки клиент-машина переменную, которая может принимать значение 1, если выбрана связка назначений, 0 — в противном случае. Таким образом, у нас есть 9 переменных для принятия решения.
Например: если переменная для связки Aleksander-green равна 1, следовательно, Александр поедет на зеленой машине. Если значение переменной равно 0, то Александр не поедет на зеленой машине.
Добавление переменных в модель pulp возможно через метод LpVariable , где в качестве аргументов передаем название переменной, нижнюю и верхнюю границы принимаемых значений (0 и 1 в нашем случае), тип переменной (в нашем случае — бинарная).
Комментарий: для переменных, которые могут принимать значения 0 или 1, в pulp выделен отдельный тип — бинарные переменные.
Переменные запишем в словарь, аналогичный словарю E . Назовем переменные xct, где c ∈ C — клиент, а t ∈ T — машина.
# Инициализация переменных X = <> # Словарь для хранения ссылок на переменные for (client, car) in E: var_name = «x_» + client + «_» + car # Название переменной X[client, car] = pulp.LpVariable(var_name, cat=pulp.LpBinary) # Эквивалентный способ задания переменных через целочисленный тип # X[client, car] = pulp.LpVariable(var_name, lowBound=0, upBound=1, cat=»Integer») # Задание переменных без цикла # X = pulp.LpVariable.dicts(«x», E.keys(), 0, 1, pulp.LpBinary)
Целевая функция
Целевая функция состоит в том, чтобы минимизировать переменные затраты. Для каждой переменной xct мы ставим в соответствие размер затрат ect, на который возрастут общие затраты, если xct = 1. Например, если желтая машина будет назначена Ивану xIvan,yellow = 1, то затраты вырастут на eIvan,yellow = 15 рублей. Это условие можно записать как произведение затрат на переменную: ect xct.
Суммируем все возможные произведения ect xct, получим функцию общих затрат. В принятых нами обозначениях она будет иметь следующий вид:
В более лаконичной форме с помощью символа суммы ∑ целевую функцию можно записать как
Метод LpProblem.setObjective() добавляет целевую функцию в модель. В качестве аргументов передается сама целевая функция и «направленность» оптимизации (минимизация / максимизация). Для нашей задачи определим целевую функцию следующим образом:
# Построение целевой функции # 1. Список произведений затрат на соответствующую переменную lst_mult = [E[key] * var for key, var in X.items()] # 2. Суммируем произведения obj_expression = pulp.lpSum(lst_mult) # Встроенный в pulp метод # obj_expression = sum(lst_mult) # Python сумма # 3. Добавляем в модель model.setObjective(obj_expression) # Альтернативный способ инициализации целевой функции # model += obj_expression
Ограничения
В нашей задаче два основных ограничения:
- Все клиенты должны попасть в бар;
- Одна машина не может перевозить более одного пассажира.
Оба этих ограничения можно записать в математическом виде и передать в модель. Для этого воспользуемся ранее введенными переменными.
Ограничение 1: Все клиенты должны попасть в бар
Рассмотрим клиента Ивана. В бар он должен попасть на одной из трех машин: желтой, зеленой или синей. С каждым вариантом назначения машины Ивану связана бинарная переменная: xIvan,yellow, xIvan,green и xIvan,blue. Условие можно переформулировать как: ровно одна машина должна быть назначена Ивану.
В случае Александра и Михаила строим аналогичные ограничения, но с учетом соответствующих им переменных:
Введенные ограничения можно записать в более лаконичной форме с использованием символа суммы ∑ и символа повторения для каждого элемента множества ∀ («Для любого. »).
Добавление ограничений в PuLP незамысловатое, используется сочетание символов += :
model += expression, expression_name
Ограничению можно привязать название или оставить поле пустым. Само выражение для нашего ограничения состоит из операции сложения переменных, тип ограничения == , а значение правой части ограничения 1 .
# Ограничение: Все клиенты должны попасть в бар (Client Satisfaction Constraint) for c in C: # Создаем ограничение для каждого клиента # Название ограничения constr_name = f»_sat_constr» # Список возможных машин для клиента lst_vars = [X[c, t] for t in T] # Добавление ограничений в модель model += pulp.lpSum(lst_vars) == 1, constr_name
Ограничение 2: Одна машина не может перевозить более одного пассажира.
Рассмотрим желтую машину. Она может взять Ивана, Александра, Михаила или никого. С каждым вариантом назначения желтой машины клиенту у нас связана бинарная переменная: xIvan,yellow, xAleksander,yellow и xMikhail,yellow. Ограничение запишется в следующем виде:
Заметим, что данное ограничение позволяет всем переменным присвоить значений 0, что будет означать отсутствие назначений на желтую машину.
Для остальных машин имеем аналогичные ограничения:
Эти ограничения можно записать в более короткой форме с учетом ранее введенных обозначений:
Процесс добавления ограничений «назначение машины не более чем на одного пассажира» не отличается от добавления в модель PuLP предыдущего ограничения:
# Ограничение: Одна машина не может перевозить более одного пассажира (Taxi Passengers Limitation Constraint) for t in T: # Создаем ограничение для каждой машины # Название ограничения constr_name = f»_tpl_constr» # Список возможных клиентов для машины t lst_vars = [X[c, t] for c in C] # Добавление ограничений в модель model += pulp.lpSum(lst_vars)
Поиск оптимального решения
Прежде чем переходить к решению оптимизационной задачи, посмотрим на полную математическую модель нашей задачи. Существует достаточно распространённый формат записи задач Линейного программирования в формат .lp, удобный для чтения пользователем. В PuLP для сохранения модели в формате .lp есть метод LpProblem.writeLP() , где в качестве аргументов передается название файла:
# Запись модели в файл model.writeLP(«TaxiAssignmentProblem.lp»)
Файл можно открыть обычным блокнотом. Здесь можно увидеть целевую функцию, ограничения с привязкой к их названию и типы переменных.
* TaxiAssignmentProblem * Minimize OBJ: 12 x_Aleksander_blue + 21 x_Aleksander_green + 9 x_Aleksander_yellow + 21 x_Ivan_blue + 24 x_Ivan_green + 15 x_Ivan_yellow + 15 x_Mikhail_blue + 12 x_Mikhail_green + 18 x_Mikhail_yellow Subject To Aleksander_sat_constr: x_Aleksander_blue + x_Aleksander_green + x_Aleksander_yellow = 1 Ivan_sat_constr: x_Ivan_blue + x_Ivan_green + x_Ivan_yellow = 1 Mikhail_sat_constr: x_Mikhail_blue + x_Mikhail_green + x_Mikhail_yellow = 1 blue_tpl_constr: x_Aleksander_blue + x_Ivan_blue + x_Mikhail_blue
Поиск оптимального решения в PuLP запускается с помощью метода LpProblem.solve() :
# Поиск оптимального решения задачи model.solve() # Проверяем статус модели print(pulp.LpStatus[model.status])
Теперь давайте извлечем оптимальное значение целевой функции, используя метод PuLP value(LpProblem.objective) и оптимальные значения переменных LpVariable.varValue .
# Значение целевой функции после решения задачи obj_value = pulp.value(model.objective) obj_value = int(obj_value) # Преобразование в целочисленное значение print(f»Минимальные переменные затраты для выполнения всех заказов = руб.») # Извлечение значений переменных for (client, taxi), var in X.items(): var_value = var.varValue # Извлечение значения переменной var_value = int(var_value) # Преобразование в целочисленное значение if var_value > 0: # Выводим оптимальные назначения машин клиентам print(f»- Клиенту назначена машина , затраты на подачу = руб.»)
Минимальные переменные затраты для выполнения всех заказов = 39 руб.
- Клиенту Ivan назначена машина yellow, затраты на подачу = 15 руб.
- Клиенту Aleksander назначена машина blue, затраты на подачу = 12 руб.
- Клиенту Mikhail назначена машина green, затраты на подачу = 12 руб.
Предлагаю самостоятельно с помощью ручного перебора убедиться в том, что более оптимального решения при указанных ограничениях не получить.
Расширение задачи
Рассмотренная выше задача максимально упрощена для простого погружения в проблематику математического моделирования и возможностей решения задач оптимизации.
С целью закрепления материала предлагаю рассмотреть и попробовать добавить следующие ограничения:
- Добавить четвертую машину в модель (например, «red»);
- Добавить время ожидания в исходные данные для каждого назначения. Добавить в модель ограничение лимита ожидания для каждого клиента (сколько по времени клиент готов ждать);
- Добавить параметр выручки за выполнение заказа. Скорректировать целевую функцию и изменить ограничение обязательного выполнения заказа на неравенство (Ограничение 1: Все клиенты должны попасть в бар);
- Добавление нескольких клиентов в модель.
Ссылки
- Ссылка на Jupyter Notebook здесь;
- Документация Python библиотеки PuLP;
- Примеры мат.моделей для решения некоторых задач;
- Задача: Белки, Жиры и Углеводы — оптимизируем рацион питания;
- Задача коммивояжёра с использованием разных пакетов (в том числе PuLP);
- В основе структуры статьи лежит материал от сюда;
P.S. Направляйте оптимизационные задачи, которые хотелось бы увидеть в разборе.
P.S.S. Есть на примете статьи с моделями в PuLP или ORtools? Присылайте, дополню статью ссылками.
- задача о назначениях
- задача оптимизации
- математическое моделирование
- исследование операций
- принятие решений
- целочисленное программирование
- линейное программирование
Источник: habr.com
Как написать целевую функцию
Решение оптимизационных задач управления методом линейного программирования
Ранее я описал, как принимать решения с учетом ограничивающих факторов. Цель таких решений – определить ассортимент продукции (производственный план), максимально увеличивающий прибыль компании.
Решение заключалось в том, чтобы распределить ресурсы между продуктами согласно маржинальной прибыли, полученной на единицу ограниченных ресурсов, при соблюдении любых других ограничений, таких как максимальный или минимальный спрос на отдельные виды продукции. [1] Если ограничивающий фактор один (например, дефицитный станок), решение может быть найдено с применением простых формул (см. ссылку в начале статьи). Если же ограничивающих факторов несколько, применяется метод линейного программирования.
Линейное программирование – это название, данное комбинации инструментов используемых в науке об управлении. Этот метод решает проблему распределения ограниченных ресурсов между конкурирующими видами деятельности с тем, чтобы максимизировать или минимизировать некоторые численные величины, такие как маржинальная прибыль или расходы. В бизнесе он может использоваться в таких областях как планирование производства для максимального увеличения прибыли, подбор комплектующих для минимизации затрат, выбор портфеля инвестиций для максимизации доходности, оптимизация перевозок товаров в целях сокращения расстояний, распределение персонала с целью максимально увеличить эффективность работы и составление графика работ в целях экономии времени. Скачать заметку в формате Word, рисунки в формате Excel Линейное программирование предусматривает построение математической модели рассматриваемой задачи. После чего решение может быть найдено графически (рассмотрено ниже), с использованием Excel (будет рассмотрено отдельно) или специализированных компьютерных программ. [2] Пожалуй, построение математической модели – наиболее сложная часть линейного программирования, требующая перевода рассматриваемой задачи в систему переменных величин, уравнений и неравенств – процесс, в конечном итоге зависящий от навыков, опыта, способностей и интуиции составителя модели. Рассмотрим пример построения математической модели линейного программирования
Николай Кузнецов управляет небольшим механическим заводом. В будущем месяце он планирует изготавливать два продукта (А и В), по которым удельная маржинальная прибыль оценивается в 2500 и 3500 руб., соответственно. Изготовление обоих продуктов требует затрат на машинную обработку, сырье и труд (рис. 1).
На изготовление каждой единицы продукта А отводится 3 часа машинной обработки, 16 единиц сырья и 6 единиц труда. Соответствующие требования к единице продукта В составляют 10, 4 и 6. Николай прогнозирует, что в следующем месяце он может предоставить 330 часов машинной обработки, 400 единиц сырья и 240 единиц труда.
Технология производственного процесса такова, что не менее 12 единиц продукта В необходимо изготавливать в каждый конкретный месяц. Рис. 1. Использование и предоставление ресурсов Николай хочет построить модель с тем, чтобы определить количество единиц продуктов А и В, которые он доложен производить в следующем месяце для максимизации маржинальной прибыли. Линейная модель может быть построена в четыре этапа. Этап 1. Определение переменных Существует целевая переменная (обозначим её Z), которую необходимо оптимизировать, то есть максимизировать или минимизировать (например, прибыль, выручка или расходы). Николай стремится максимизировать маржинальную прибыль, следовательно, целевая переменная:
Z = суммарная маржинальная прибыль (в рублях), полученная в следующем месяце в результате производства продуктов А и В. Существует ряд неизвестных искомых переменных (обозначим их х1, х2, х3 и пр.), чьи значения необходимо определить для получения оптимальной величины целевой функции, которая, в нашем случае является суммарной маржинальной прибылью. Эта маржинальная прибыль зависит от количества произведенных продуктов А и В. Значения этих величин необходимо рассчитать, и поэтому они представляют собой искомые переменные в модели.
Итак, обозначим: х1 = количество единиц продукта А, произведенных в следующем месяце. х2 = количество единиц продукта В, произведенных в следующем месяце. Очень важно четко определить все переменные величины; особое внимание уделите единицам измерения и периоду времени, к которому относятся переменные. Этап. 2. Построение целевой функции Целевая функция – это линейное уравнение, которое должно быть или максимизировано или минимизировано. Оно содержит целевую переменную, выраженную с помощью искомых переменных, то есть Z выраженную через х1, х2… в виде линейного уравнения.
В нашем примере каждый изготовленный продукт А приносит 2500 руб. маржинальной прибыли, а при изготовлении х1 единиц продукта А, маржинальная прибыль составит 2500 * х1. Аналогично маржинальная прибыль от изготовления х2 единиц продукта В составит 3500 * х2.
Таким образом, суммарная маржинальная прибыль, полученная в следующем месяце за счет производства х1 единиц продукта А и х2 единиц продукта В, то есть, целевая переменная Z составит: Николай стремится максимизировать этот показатель. Таким образом, целевая функция в нашей модели: Максимизировать Z = 2500 * х1 + 3500 *х2 Этап.
3. Определение ограничений Ограничения – это система линейных уравнений и/или неравенств, которые ограничивают величины искомых переменных. Они математически отражают доступность ресурсов, технологические факторы, условия маркетинга и иные требования. Ограничения могут быть трех видов: «меньше или равно», «больше или равно», «строго равно».
В нашем примере для производства продуктов А и В необходимо время машинной обработки, сырье и труд, и доступность этих ресурсов ограничена. Объемы производства этих двух продуктов (то есть значения х1 их2) будут, таким образом, ограничены тем, что количество ресурсов, необходимых в производственном процессе, не может превышать имеющееся в наличии.
Рассмотрим ситуацию со временем машинной обработки. Изготовление каждой единицы продукта А требует трех часов машинной обработки, и если изготовлено х1, единиц, то будет потрачено З * х1, часов этого ресурса. Изготовление каждой единицы продукта В требует 10 часов и, следовательно, если произведено х2 продуктов, то потребуется 10 * х2 часов. Таким образом, общий объем машинного времени, необходимого для производства х1 единиц продукта А и х2 единиц продукта В, составляет 3 * х1 + 10 * х2. Это общее значение машинного времени не может превышать 330 часов. Математически это записывается следующим образом: Аналогичные соображения применяются к сырью и труду, что позволяет записать еще два ограничения:
Наконец следует отметить, что существует условие, согласно которому должно быть изготовлено не менее 12 единиц продукта В: Этап 4. Запись условий неотрицательности Искомые переменные не могут быть отрицательными числами, что необходимо записать в виде неравенств х1 ≥ 0 и х2 ≥ 0. В нашем примере второе условия является избыточным, так как выше было определено, что х2 не может быть меньше 12. Полная модель линейного программирования для производственной задачи Николая может быть записана в виде: Максимизировать: Z = 2500 * х1 + 3500 *х2 При условии, что: 3 * х1 + 10 * х2 ≤ 330 Рассмотрим графический метод решения задачи линейного программирования.
Этот метод подходит только для задач с двумя искомыми переменными. Модель, построенная выше, будет использована для демонстрации метода. Оси на графике представляют собой две искомые переменные (рис. 2). Не имеет значения, какую переменную отложить вдоль, какой оси. Важно выбрать масштаб, который в конечном итоге позволит построить наглядную диаграмму.
Поскольку обе переменные должны быть неотрицательными, рисуется только I-й квадрант. Рис. 2. Оси графика линейного программирования Рассмотрим, например, первое ограничение: 3 * х1 + 10 * х2 ≤ 330. Это неравенство описывает область, лежащую ниже прямой: 3 * х1 + 10 * х2 = 330. Эта прямая пересекает ось х1 при значении х2 = 0, то есть уравнение выглядит так: 3 * х1 + 10 * 0 = 330, а его решение: х1 = 330 / 3 = 110 Аналогично вычисляем точки пересечения с осями х1 и х2 для всех условий-ограничений:
| Область допустимых значений | Граница допустимых значений | Пересечение с осью х1 | Пересечение с осью х2 |
| 3 * х1 + 10 * х2 ≤ 330 | 3 * х1 + 10 * х2 = 330 | х1 = 110; х2 = 0 | х1 = 0; х2 = 33 |
| 16 * х1 + 4 * х2 ≤ 400 | 16 * х1 + 4 * х2 = 400 | х1 = 25; х2 = 0 | х1 = 0; х2 = 100 |
| 6 * х1 + 6 * х2 ≤ 240 | 6 * х1 + 6 * х2 = 240 | х1 = 40; х2 = 0 | х1 = 0; х2 = 40 |
| х2 ≥ 12 | х2 = 12 | не пересекает; идет параллельно оси х1 | х1 = 0; х2 = 12 |
Графически первое ограничение отражено на рис. 3. Рис. 3. Построение области допустимых решений для первого ограничения
Любая точка в пределах выделенного треугольника или на его границах будет соответствовать этому ограничению. Такие точки называются допустимыми, а точки за пределами треугольника называются недопустимыми. Аналогично отражаем на графике остальные ограничения (рис. 4).
Значения х1 и х2 на или внутри заштрихованной области ABCDE будут соответствовать всем ограничениям модели. Такая область называется областью допустимых решений. Рис. 4. Область допустимых решений для модели в целом Теперь в области допустимых решений необходимо определить значения х1 и х2, которые максимизируют Z. Для этого в уравнении целевой функции: разделим (или умножим) коэффициенты перед х1 и х2 на одно и тоже число, так чтобы получившиеся значения попали в диапазон, отражаемый на графике; в нашем случае такой диапазон – от 0 до 120; поэтому коэффициенты можно разделить на 100 (или 50): затем присвоим Z значение равное произведению коэффициентов перед х1 и х2 (25 * 35 = 875): и, наконец, найдем точки пересечения прямой с осями х1 и х2:
| Уравнение целевой функции | Пересечение с осью х1 | Пересечение с осью х2 |
| 875 = 25х1 + 35х2 | х1 = 35; х2 = 0 | х1 = 0; х2 = 25 |
Нанесем это целевое уравнение на график аналогично ограничениям (рис. 5): Рис. 5. Нанесение целевой функции (черная пунктирная линия) на область допустимых решений Значение Z постоянно на всем протяжении линии целевой функции.
Чтобы найти значения х1 и х2, которые максимизируют Z, нужно параллельно переносить линию целевой функции к такой точке в границах области допустимых решений, которая расположена на максимальном удалении от исходной линии целевой функции вверх и вправо, то есть к точке С (рис. 6). Рис.
6. Линия целевой функции достигла максимума в пределах области допустимых решений (в точке С) Можно сделать вывод, что оптимальное решение будет находиться в одной из крайних точек области принятия решения. В какой именно, будет зависеть от угла наклона целевой функции и от того, какую задачу мы решаем: максимизации или минимизации.
Таким образом, не обязательно чертить целевую функцию – все, что необходимо, это определить значения х1 и х2 в каждой из крайних точек путем считывания с диаграммы или путем решения соответствующей пары уравнений. Найденные значения х1 и х2 затем подставляются в целевую функцию для расчета соответствующей величины Z. Оптимальным решением является то, при котором получена максимальная величина Z при решении задачи максимизации, и минимальная – при решении задачи минимизации. Определим, например значения х1 и х2 в точке С. Заметим, что точка С находится на пересечении линий: 3х1 + 10х2 = 330 и 6х1 + 6х2 = 240. Решение этой системы уравнений дает: х1 = 10, х2 = 30. Результаты расчета для всех вершин области допустимых решений приведены в таблице:
| Точка | Значение х1 | Значение х2 | Z = 2500х1 + 3500х2 |
| А | 22 | 12 | 97 000 |
| В | 20 | 20 | 120 000 |
| С | 10 | 30 | 130 000 |
| D | 33 | 115 500 | |
| E | 12 | 42 000 |
- Начертите на графике две оси, представляющие собою два параметра решения; нарисуйте только I-й квадрант.
- Определите координаты точек пересечения всех граничных условий с осями, подставляя в уравнения граничных условий поочередно значения х1 = 0 и х2 = 0.
- Нанести линии ограничений модели на график.
- Определите на графике область (называемую допустимой областью принятия решения), которая соответствует всем ограничениям. Если такая область отсутствует, значит, модель не имеет решения.
- Определите значения искомых переменных в крайних точках области принятия решения, и в каждом случае рассчитайте соответствующее значение целевой переменной Z.
- Для задач максимизации решение – точка, в которой Z максимально, для задач минимизации, решение – точка, в которой Z минимально.
5 комментариев для “Решение оптимизационных задач управления методом линейного программирования”
Пожалуйста, помогите, не могу определить ограничения в задаче и построить ОДР.
Инвестор, располагающий суммой в 300 тыс. ден. ед., может вложить свой капитал в акции автомобильного концерна А и строительного предприятия В. Чтобы уменьшить риск, акций А должно быть приобретено по крайней мере в два раза больше, чем акций В, причем последних можно купить не более чем на 100 тыс. ден. ед.
Дивиденды по акциям А составляют 8% в год, по акциям В – 10%. Какую максимальную прибыль можно получить в первый год?
Построить экономико-математическую модель задачи, дать необходимые комментарии к ее элементам и получить решение графическим методом. Что произойдет, если решать задачу на минимум и почему?
Сижу с этой задачей уже неделю.
Надя, я уже решал эту задачку. См. комментарий
Источник: poisk2.ru
Целевой маркетинг — что это такое? стратегии, план продвижения продукта
![]()
16 573
Автор статьи: Анна Громова
Усилия компании, направленные на поиск и определение узкого круга потребителей имеют четкое экономическое определение – целевой маркетинг. От правильного подхода к рынку, выбора стратегии и составления плана действий, зависит дальнейшее продвижении продукта и, соответственно, конечный финансовый результат. Базовые знания об эффективных маркетинговых методиках помогут создать положительный имидж товара и достигнуть успеха в максимально сжатые сроки.

Что это такое
Ряд мероприятий, направленных на выделение из общего количества потребителей отдельных групп, которых гарантированно заинтересует определенный продукт, называется целевой маркетинг.
Перечень включает аналитическую оценку, сегментирование рынка и составление плана. В совокупности все действия преследуют единственную цель – эффективное продвижение коммерческого продукта.
Выбор целевого рынка (таргетирование) осуществляется по принципу STP:
- сегментирование (Segmentation)
- определение целевой аудитории (Targeting)
- позиционирование (Positioning)
Отличное понимание своих потенциальных покупателей становится базой для создания маркетинговых стратегий и тактик – ценообразование, дизайн продвигаемого продукта, особенности рекламной кампании. Кроме того, таргетирование дает более точные данные о коммерческом поведении потребителей, что помогает проводить анализ, прогнозировать и совершенствовать рыночные стратегии.
Сегментация рынка
Рынки в маркетинге обычно делятся на два основных типа:
- потребительский — состоит из отдельных лиц или домохозяйств, которые покупают товары для личного потребления и не намерены перепродавать эти товары с целью получения прибыли.
- деловой — состоит из людей или организаций, которые покупают товары для определенных целей: перепродажа, использования при производстве других товаров или услуг, применение в повседневных деловых операциях.
Подходы к сегментации будут различаться в зависимости от того, является ли общий доступный рынок потребительским или деловым.
Хотя существует много разных способов сегментирования рынка, чаще всего применяются:
- географические — местоположение, климат, регион;
- демографические — возраст, пол, материальное, семейное положение, образование, религиозные убеждения и т.д.;
- психологические – отношения между полов, ценности, убеждения, интересы и образ жизни;
- поведенческие — регулярность использования продукта, степень лояльности, статус пользователя, готовность к покупке.
В процессе сегментации разрабатываются подробные профили для каждого рыночного участка, в которых описывается сходство и отличия между потребителями разных групп. Если обобщить, то вся информация в профилях касается продукта – привычки потребителей, склонность к покупкам, предпочтительные бренды, лояльность к аналогичным товарам или услугам.
Процесс имеет ряд преимуществ:
- Определить сегменты, которые наиболее привлекательны для бизнеса;
- Предоставляет количественные данные о потребителях, для более объективной оценки привлекательности сегмента;
- Помогает адаптировать продукт или услугу к потребностям покупателей;
- Влияет на эффективное распределение ресурсов компании.
После профилирования проводится подробный анализ рынка, чтобы определить один или несколько сегментов, которые заслуживают дальнейшего изучения.
Стратегии сегментирования
Целевой маркетинг состоит из трех основных стратегий сегментации:
Недифференцированный или массовый целевой маркетинг
Метод используется для охвата как можно большего числа людей для проведения рекламной кампании. Пример – рекламный ролик одного продукта, транслируемый на телевидении несколько недель/месяцев.
Дифференцированный целевой маркетинг
Практика, при которой различные сообщения рекламируются для привлечения определенных групп людей на целевом рынке. Метод требует ощутимых материальных вложений, поскольку предполагает каждый раз новые идеи, разработки, презентации продукта и т.д.
Концентрированный целевой маркетинг (нишевый)
Усилия компании направлены на определенный аспект или группу потребителей. Это значит, что используются все ресурсы и навыки в одной конкретной нише. Является одной из самых успешных маркетинговых стратегий, поскольку определяет ключевую категорию, на которой следует сосредоточиться. Это позволяет компаниям иметь конкурентное преимущество перед другими крупными фирмами, ориентированными на ту же группу потребителей. В результате генерируется более высокая прибыль.
Например, продвижение магазина нижнего белья для женщин от 18 до 45 лет или товары для рептилий.

Приемы целевого маркетинга
Для достижения успеха в целевом маркетинге экономистами разработана программа из пяти шагов:
- Составить маркетинговый план – оценка текущего состояния компании, какие ниши планируется осваивать, процент потенциальной конкуренции. Включает такие важные элементы, как целевой рынок, интересы потребителей и доступные ресурсы.
- Сфокусировать программу на целевую аудиторию. Предложить уникальный продукт, который оправдает ожидания покупателей.
- Изучение конкуренции в сегменте рынка. Сосредоточиться на самой малоосвоенной нише или создать отличную рекламную кампанию, не имеющую аналогов, с целью формирования положительного имиджа продукта.
- Продвижение, основанное на экспертизе ниши. Главная ставка делается на опытных сотрудников, которые могут не просто предложить оригинальную идею рекламной кампании, а раздвинуть границы ниши. Тем самым создается совершенно новый сегмент, в котором продукт успешно продается.
- Слияние небольших сегментов рынка. Компания, возможно, нашла свою потенциальную нишу, но не может продать свой продукт/услугу, в силу отсутствия инструментов, ресурсов для продвижения. Тогда применяется слияние с другой организацией, которая необходимым опытом, информацией для проведения целевого маркетинга.
В целом, целевой маркетинг — это отличная стратегия для малого и среднего бизнеса, поскольку не требует больших затрат и может быть применен сразу после определения рыночного сегмента (ниши).
Выбор целевого рынка
Ключевым моментом при выборе целевых рынков является ответ на вопрос: достаточно ли отличаются потребности клиентов для обеспечения сегментации и таргетирования?
В случае если спрос на определенный продукт относительно одинаков, компания может принять решение использовать недифференцированный подход.
С другой стороны, когда потребности клиентов различаются по сегментам, тогда необходим дифференцированный целевой маркетинг. Анализ сегментации может выявить, что ни один из сегментов не предоставляет реальных возможностей, и фирма принимает решение не выходить на рынок.
С точки зрения оценки рынков, только три показателя привлекательности сегмента имеют объективное значение:
- Критерий расстояния: бизнес пытается определить основную географическую зону охвата, выявляя людей, которые живут на заранее определенном расстоянии. Для розничного продавца или поставщика услуг расстояние может составлять около 5 км. Для внутреннего туристического направления — 300 км. Этот метод широко используется в розничной торговле.
- Критерий продаж: используя этот метод, бизнес распределяет свои ресурсы для целевых рынков на основе исторических моделей продаж. Особенно полезно применять в сочетании с показателями торговли. Недостатком является то, что не учитывается дополнительный рыночный потенциал.
- Методы определения интересов: первичное исследование, обычно в форме опросов, выявляет людей, которые не приобрели продукт или услугу, но настроены позитивно и проявляют некоторый интерес к совершению покупки в краткосрочной перспективе.
Коэффициент цепочки и методы индексации также пользуются популярностью для выбора целевого рынка.
Но требуют углубленных экономических знаний и привлечения специалистов, что в свою очередь, влияет на стоимость продвижения продукта.
Разработка плана
После того, как сегментирование выполнено, выбраны целевые рынки и разработана стратегия позиционирования, можно начинать формировать маркетинговый комплекс с учетом потребностей, желаний и мотивации целевой аудитории. Основными элементами процесса являются:
- продукт — предлагаемый товар или услуга, с учетом его особенностей и преимуществ для потребителей, а также, как он позиционируется на рынке (высокого или низкого качества);
- цена — включает в себя как денежные, так и психологические затраты, такие как сочетание стоимости, способов оплаты и других связанных с этим усилий на приобретение;
- место — как продукт физически достигает потребителя, в частности, где продается услуга или товар, каналы распространения и т.д.;
- продвижение – передача информации потребителям, включает в себя рекламу, связи с общественностью, клиентами, стимулирование сбыта и любые другие виды деятельности для общения с целевыми рынками.
В классической работе Э. Джерома Маккарти «Базовый маркетинг: управленческий подход» подробно описаны четыре элемента целевого маркетинга, которые считаются основой для эффективного продвижения товаров и услуг. Книга должна стать практическим пособием любому предпринимателю, желающему вывести свой бизнес на новый уровень.
Риски
Целевой маркетинг предполагает комплексное изучение всех рисков до начала производственной деятельности. Например, детально анализируется государственные нормы и стандарты (ГОСТЫ) для продукта, планируемого к выпуску.
Затраты на лицензии, сертификаты обязательно включаются не только в себестоимость товара, но и в смету рекламной кампании.
Также составляется прогноз на действия компаний-конкурентов – какие возможные меры они смогут предпринять для поддержания своего продукта в выбранном рыночном сегменте. Это может быть снижение стоимости, проведение акций, увеличение ассортимента и т.д. Альтернативный вариант – ниша свободна и на первый взгляд не нуждается в анализе.
Но так будет только до получения первой значимой прибыли. Успешный опыт быстро перенимается. Примеров можно привести тысячи, от маникюрного бизнеса до бутиков, работающих с избранным контингентом.
Именно поэтому, изучить риски и предупредить их негативное влияние, можно только путем тщательного анализа всех аспектов выбранного вида деятельности.

Плюсы и минусы
Целевой маркетинг – необходимая мера, которая повышает шансы бизнеса на процветание в долгосрочной перспективе.
Но, как и у любой экономической стратегии, существуют свои достоинства и недостатки, которые необходимо учитывать перед разработкой плана действий.
- наработка ценного опыта продвижения продукта;
- защищенность от конкуренции (условная);
- четкое знание потребностей потребителей;
- относительно небольшие расходы на рекламную кампанию.
- целевой маркетинг в целом уязвим, в силу множества факторов, влияющих на составление правильного плана;
- отдельный сегмент рынка трудно осваивать;
- коммуникация с клиентами должна быть постоянной;
- невозможность точно предугадать действия конкурентов.
Вывод
Целевой маркетинг представляет собой полезный инструмент, с помощью которого можно нарисовать подробную картину «своей» аудитории. Полное понимание демографии, интересов, проблем, потребностей будущих клиентов – залог создания эффективной стратегии, при которой покупатели охотно вступят в коммерческие отношения. Биографии успешных бизнесменов, переживших взлеты и падения, однозначно указывают на то, что полагаться на одну интуицию не стоит. Только системный подход, которым и является целевой маркетинг, может обеспечить развитие компании.
Если у вас уже есть личный опыт сегментирования рынка, поделитесь своими успехами в комментариях! Возможно, это станет отличной мотивацией для сомневающихся предпринимателей.
Источник: dvayarda.ru