Как составить математическую модель задачи оптимизации

Уровень сложности
Простой

Время на прочтение
11 мин

Количество просмотров 3K

Приветствую! Я, Ложкинс Алексей, консультант и разработчик оптимизационных решений и математических моделей для бизнеса. Это первая в цикле работ обучающая статья, часть личного образовательного проекта «Make optimization simple». Цель проекта – продемонстрировать доступность технологий и показать на примерах, что моделировать можно без глубокого математического фундамента.

Из статьи вы узнаете об основных компонентах математической оптимизационной задачи на примере классической задачи о назначениях, в частности, распределение машин такси на заказы. Далее, я покажу, как реализовать программный прототип математической модели посредством Python и библиотеки PuLP, а также продемонстрирую, как получить оптимальное решение задачи всего в одной строке кода без реализации специальных алгоритмов.

Материал статьи предназначен

  • для базового погружения в математическое моделирование и оптимизацию;

  • для демонстрации доступности технологий и возможностей моделировать, решать оптимизационные задачи без порога входа и специальной подготовки (мат./тех. образования).

Математическая оптимизация

Математическая оптимизация — это мощный метод, используемый для поиска наилучшего решения задачи, отвечающего определенным критериям и удовлетворяющего набору ограничений. Она включает в себя четыре основных компонента:

  1. Целевая функция — это математическое выражение, объект оптимизации. В зависимости от целей оптимизации выделяют два критерия: задача максимизации и задача минимизации целевой функции;

  2. Ограничения — это условия, которые должны быть выполнены для того, чтобы решение было осуществимым. Они ограничивают возможные значения переменных и обычно выражаются в виде неравенств или равенств;

  3. Решающие переменные — это неизвестные величины, которые мы хотим определить в результате решения оптимизационной задачи. Они используются для формулирования целевой функции и ограничений. Моделируют различные варианты выбора или действий, которые могут быть предприняты для достижения желаемого результата;

  4. Метод оптимизации — это алгоритмы, используемые для нахождения оптимального решения задачи. Мы сконцентрируем наше внимание на задачах смешанного линейного программирования (MILP), для которых существуют стандартные методы их решения. Кроме того, есть упакованные программные пакеты с этими методами, что повышает доступность мат. моделирования.

Комбинация этих четырех компонентов — это то, что составляет задачу математической оптимизации. Тщательно сформулировав целевую функцию, переменные для принятия решения и ограничения, а также выбрав подходящий метод оптимизации, мы можем найти наилучшее решение для широкого спектра реальных проблем.

Постановка задачи

Рассмотрим типичную питерскую ситуацию в пятницу вечером. Иван, Михаил и Александр запланировали пойти в бар. Одновременно заказывают такси от своего дома до бара, используя один и тот же агрегатор такси одинакового класса (например, комфорт). Рядом оказываются свободными ровно три машины с разной удаленностью от потенциальных пассажиров. Кроме этого, действуют следующие вполне реалистичные условия: пассажир может ехать только на одной машине, одна машина может взять не более одного заказа (пассажира).

Задача: назначить клиентам машины таким образом, чтобы все клиенты добрались до бара на такси, каждая машина перевезла не более одного пассажира и общие затраты на перевозку пассажиров были минимальны.

Построение модели

Чтобы решить поставленную выше задачу, мы будем использовать линейное программирование. Оно представляет собой математических методов, используемых для оптимизации линейной целевой функции с учетом линейных ограничений. Линейное программирование имеет множество реальных применений, включая планирование производства, оптимизацию транспортировки и распределение ресурсов.

Построение программного прототипа линейной модели будем реализовывать посредством программного пакета 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 = {
    ("Ivan", "yellow"): 15,
    ("Ivan", "green"): 24,
    ("Ivan", "blue"): 21,
    ("Aleksander", "yellow"): 9,
    ("Aleksander", "green"): 21,
    ("Aleksander", "blue"): 12,
    ("Mikhail", "yellow"): 18,
    ("Mikhail", "green"): 12,
    ("Mikhail", "blue"): 15,
}

Инициализация модели

Импортируем библиотеку 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, получим функцию общих затрат. В принятых нами обозначениях она будет иметь следующий вид: 

begin{equation}  min quad 15x_{text{Ivan,yellow}} + 24x_{text{Ivan,green}} + 21x_{text{Ivan,blue}} +   end{equation}begin{equation}  9x_{text{Aleksander,yellow}} + 21x_{text{Aleksander,green}} + 12x_{text{Aleksander,blue}} +   end{equation}begin{equation}18x_{text{Mikhail,yellow}} + 12x_{text{Mikhail,green}} + 15x_{text{Mikhail,blue}}.  end{equation}

В более лаконичной форме с помощью символа суммы ∑ целевую функцию можно записать как 

min sum_{c in C}sum_{t in T} e_{ct}x_{ct}

Метод 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. Все клиенты должны попасть в бар;

  2. Одна машина не может перевозить более одного пассажира.

Оба этих ограничения можно записать в математическом виде и передать в модель. Для этого воспользуемся ранее введенными переменными.

Ограничение 1: Все клиенты должны попасть в бар

Рассмотрим клиента Ивана. В бар он должен попасть на одной из трех машин: желтой, зеленой или синей. С каждым вариантом назначения машины Ивану связана бинарная переменная: xIvan,yellowxIvan,green и xIvan,blue. Условие можно переформулировать как: ровно одна машина должна быть назначена Ивану.

begin{equation}  x_{text{Ivan,yellow}} + x_{text{Ivan,green}} + x_{text{Ivan,blue}} = 1  end{equation}

В случае Александра и Михаила строим аналогичные ограничения, но с учетом соответствующих им переменных:

begin{equation}  x_{text{Aleksander,yellow}} + x_{text{Aleksander,green}} + x_{text{Aleksander,blue}} = 1  end{equation}begin{equation}  x_{text{Mikhail,yellow}} + x_{text{Mikhail,green}} + x_{text{Mikhail,blue}} = 1  end{equation}

Введенные ограничения можно записать в более лаконичной форме с использованием символа суммы ∑ и символа повторения для каждого элемента множества ∀ («Для любого…»).

begin{equation}  sum_{t} x_{ct} = 1, quad forall c in C.  end{equation}

Добавление ограничений в PuLP незамысловатое, используется сочетание символов +=

model += expression, expression_name

Ограничению можно привязать название или оставить поле пустым. Само выражение для нашего ограничения состоит из операции сложения переменных, тип ограничения ==, а значение правой части ограничения 1

# Ограничение: Все клиенты должны попасть в бар (Client Satisfaction Constraint)

for c in C:  # Создаем ограничение для каждого клиента
  # Название ограничения
  constr_name = f"{c}_sat_constr"  

  # Список возможных машин для клиента
  lst_vars = [X[c, t] for t in T]  

  # Добавление ограничений в модель 
  model += pulp.lpSum(lst_vars) == 1, constr_name 

Ограничение 2: Одна машина не может перевозить более одного пассажира.

Рассмотрим желтую машину. Она может взять Ивана, Александра, Михаила или никого. С каждым вариантом назначения желтой машины клиенту у нас связана бинарная переменная: xIvan,yellowxAleksander,yellow и xMikhail,yellow. Ограничение запишется в следующем виде: 

begin{equation}  x_{text{Ivan,yellow}} + x_{text{Aleksander,yellow}} + x_{text{Mikhail,yellow}} le 1  end{equation}

Заметим, что данное ограничение позволяет всем переменным присвоить значений 0, что будет означать отсутствие назначений на желтую машину. 

Для остальных машин имеем аналогичные ограничения: 

begin{equation}  x_{text{Ivan,green}} + x_{text{Aleksander,green}} + x_{text{Mikhail,green}} le 1  end{equation}begin{equation}  x_{text{Ivan,blue}} + x_{text{Aleksander,blue}} + x_{text{Mikhail,blue}} le 1  end{equation}

Эти ограничения можно записать в более короткой форме с учетом ранее введенных обозначений: 

begin{equation}  sum_{c in C} x_{ct} le 1, quad t in T.  end{equation}

Процесс добавления ограничений «назначение машины не более чем на одного пассажира» не отличается от добавления в модель PuLP предыдущего ограничения:

# Ограничение: Одна машина не может перевозить более одного пассажира (Taxi Passengers Limitation Constraint)

for t in T:  # Создаем ограничение для каждой машины
  # Название ограничения
  constr_name = f"{t}_tpl_constr"  

  # Список возможных клиентов для машины t
  lst_vars = [X[c, t] for c in C]  

  # Добавление ограничений в модель 
  model += pulp.lpSum(lst_vars) <= 1, constr_name 

Поиск оптимального решения

Прежде чем переходить к решению оптимизационной задачи, посмотрим на полную математическую модель нашей задачи. Существует достаточно распространённый формат записи задач Линейного программирования в формат .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 <= 1
green_tpl_constr: x_Aleksander_green + x_Ivan_green + x_Mikhail_green <= 1
yellow_tpl_constr: x_Aleksander_yellow + x_Ivan_yellow + x_Mikhail_yellow <= 1
Binaries
x_Aleksander_blue
x_Aleksander_green
x_Aleksander_yellow
x_Ivan_blue
x_Ivan_green
x_Ivan_yellow
x_Mikhail_blue
x_Mikhail_green
x_Mikhail_yellow
End

Поиск оптимального решения в 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"Минимальные переменные затраты для выполнения всех заказов = {obj_value} руб.")

# Извлечение значений переменных 
for (client, taxi), var in X.items():
  var_value =  var.varValue  # Извлечение значения переменной
  var_value = int(var_value)  # Преобразование в целочисленное значение

  if var_value > 0:  # Выводим оптимальные назначения машин клиентам
    print(f"- Клиенту {client} назначена машина {taxi}, затраты на подачу = {E[client, taxi]} руб.")

Минимальные переменные затраты для выполнения всех заказов = 39 руб.

  • Клиенту Ivan назначена машина yellow, затраты на подачу = 15 руб.

  • Клиенту Aleksander назначена машина blue, затраты на подачу = 12 руб.

  • Клиенту Mikhail назначена машина green, затраты на подачу = 12 руб.

Предлагаю самостоятельно с помощью ручного перебора убедиться в том, что более оптимального решения при указанных ограничениях не получить.

Расширение задачи

Рассмотренная выше задача максимально упрощена для простого погружения в проблематику математического моделирования и возможностей решения задач оптимизации.

С целью закрепления материала предлагаю рассмотреть и попробовать добавить следующие ограничения:

  1. Добавить четвертую машину в модель (например, «red»);

  2. Добавить время ожидания в исходные данные для каждого назначения. Добавить в модель ограничение лимита ожидания для каждого клиента (сколько по времени клиент готов ждать);

  3. Добавить параметр выручки за выполнение заказа. Скорректировать целевую функцию и изменить ограничение обязательного выполнения заказа на неравенство (Ограничение 1: Все клиенты должны попасть в бар);

  4. Добавление нескольких клиентов в модель.

Заключение

Резюмирую содержание обучающего материала: построили математическую модель назначения машин агрегатора такси на заказы клиентов. Для этого сформировали список решающих переменных, целевую функцию минимизации затрат и набор из двух типов ограничений. Разработали программный прототип на базе Python пакета PuLP и решили оптимизационную задачу встроенным в PuLP решателем.

Ссылки

  • Ссылка на Jupyter Notebook здесь;

  • Документация Python библиотеки PuLP;

  • Примеры мат.моделей для решения некоторых задач;

  • Задача: Белки, Жиры и Углеводы — оптимизируем рацион питания; 

  • Задача коммивояжёра с использованием разных пакетов (в том числе PuLP); 

  • В основе структуры статьи лежит материал от сюда;

P.S. Направляйте оптимизационные задачи, которые хотелось бы увидеть в разборе.

P.S.S. Есть на примете статьи с моделями в PuLP или ORtools? Присылайте, дополню статью ссылками.

построения математических моделей задач оптимизации, а также методы их решения.

Но прежде рассмотрим, что представляет собой математическая модель задачи оптимизации, и введем ряд понятий и определений, используемых в этих задачах.

8.1.1.Математическая модель задачи оптимизации

^Задача оптимизации обычно сводится к отысканию наименьшего или наибольшего значения некоторой функции, которую принято называть целевой функцией (или функцией

Z=Z(xu х2, х3,….х„).

(8.1)

В качестве целевой функции могут быть приняты, например: минимальный вес конструкции, максимальный объем выпуска продукции; минимальная стоимость перевозок груза; максимальная прибыль и т.д.

Параметры хь х2, х3,….х„, — переменные величины, которые могут изменяться непрерывно или дискретно и должны однозначно определять целевую функцию. Они называются

управляемыми (или проектными) параметрами.

Количество и параметров х,- (i=,2,…n), определяет размерность (сложность) задачи.

Область, определяемая всеми проектными параметрами, называется пространством проектирования. Это пространство обычно не столь велико, как может показаться, так как в практических задачах ограничено рядом условий, связанных с физической сущностью задачи (это могут быть законы природы, механики, экономики, права, наличие необходимых материалов и ресурсов и т.п.). Управление строительством или техническое проектирование всегда ведется в условиях жестких ограничений на материальные, энергетические, временные и прочие виды ресурсов.

Выражения, описывающие эти условия, называются ограничениями задачи. Ограничения делятся на две группы:

ограничения -равенства:

h{x 1, хъ хз, ….хп)=0

(/=1,2,…*),

(8.2)

— и ограничения-неравенства:

gj(xh хъ х3|….*„)<или>0

(/=1,2,…/).

(8.3)

Значения управляемых параметров, при которых выполняются ограничения (8.2)-(8.3), называются допустимыми решениями задачи.

Допустимое решение X * (х, ,х 2

х п ) , дающее

экстремум функции цели (8.1), называется оптимальным решением.

Оптимальное решение (если оно вообще существует) не обязательно единственно. Возможны случаи, когда имеется

бесчисленное множество оптимальных решений.

Считается, что математическая модель задачи оптимизации построена, если определены управляемые параметры, построена целевая функция (8.1) и записаны

ограничения задачи (8.2) — (8.3).

Для записи математической модели задачи оптимизации в общем виде часто используется следующая символика [20]:

наити

Z(X) -> min(max), X е Q

(8.1*)

при ограничениях: Q,: hj ( X ) = 0

(/ = 1, * ) ,

( 8.2*)

g j ( x ) < о

0 = й ) ,

(8.3*)

где Z ( X ) — целевая функция, зависящая от вектора управляемых

параметров X ; Q — допустимое множество, заданное ограничениями на управляемые параметры.

Решение задачи оптимизации состоит в нахождении значений управляемых параметров х ь х2, х3…..х,„ удовлетворяющих заданным ограничениям и обращающим в максимум или минимум целевую функцию.

Решение может находиться либо внутри области, либо на границе. Если целевая функция непрерывна, а множество

замкнуто, не пустое и ограниченное, то решение задачи (8.1) — (8.3) существует.

8.1.2. Необходимые и достаточные условия экстремума функции

Выбор метода решения задачи оптимизации зависит от свойств целевой функции и той информации о ней, которая может считаться доступной в процессе решения задачи. Наиболее просты с математической точки зрения случаи, когда целевая функция формулируется в терминах непрерывных параметров и задается аналитической формулой. А если при этом она еще является и дифференцируемой, то для ее исследования (поиска точек локального экстремума, определения направления ее возрастания и убывания) может быть использована производная.

,

Локальный экстремум — это точка X пространства проектирования, в которой целевая функция имеет наибольшее или наименьшее значение по сравнению с ее значениями в других точках ближайшей окрестности.

Необходимым

признаком

локального

экстремума

_„*

всех частных

функции в точке X

является равенство нулю

производных в этой точке [33]:

dZ{X*) Л

/0 „ч

——= 0, (г= 1,2,…,«).

(8.4)

дх,

__ *

Точка X при выполнении необходимого условия называется стационарной точкой.

d2Z

d2Z

дх2

дх,дх2

d2Z

d2Z

(8.6)

d2Z

d2Z

дхпдх]

дхпдх2

Если она определена положительно, то в точке X

функция Z(X) имеет безусловный минимум, если определена

отриг(ательно безусловный максимум. Эти условия являются

достаточными условиями экстремума функции.

, *

В остальных случаях точка X является седловой точкой. На практике проверка характера стационарной точки проводится в простых случаях, когда известно, что функция непрерывна и не менее чем дважды дифференцируема.

Поиск максимума целевой функции ( Z(x) —> max ) всегда можно заменить на поиск минимума этой же функции, но взятой с обратным знаком (-Z(x) —>min ) (рис.8.3).

/ Т max

х

V i min г=-2^

Рис.8.3. Максимум и минимум функции

Если целевая функция задана аналитически, то для вычисления градиента можно получить явные формулы. В тех случаях, когда никакой формулы для целевой функции нет, а имеется лишь возможность определить ее значение в любой точке рассматриваемой области (с помощью расчетов, в результате эксперимента и т.п.), частные производные в нужных точках приходится вычислять приближенно, заменяя их соответствующими разностными отношениями [19]:

Аннотация:
Цель работы: научиться использовать табличный процессор Excel для решения задач оптимизации.
Содержание работы:
Создание математической модели задачи линейного прграммирования.
Создание формы для ввода условий задачи, ввод в неё исходных данных и зависимостей из математической модели.
Ввод целевой ячейки, изменяемых ячеек и ограничений в окно Поиск решения.
Задание параметров поиска и решение задачи.
Порядок выполнения работы:
Изучить методические указания.
Выполнить задания.
Оформить отчет и ответить на контрольные вопросы.

МЕТОДИЧЕСКИЕ УКАЗАНИЯ

К классу задач линейного программирования (ЛП) относятся такие задачи однокритериальной оптимизации, в которых переменные являются непрерывными и неотрицательными, целевая функция является линейной функцией своих аргументов, а ограничения могут быть представлены в форме линейных неравенств и равенств.

Задача линейного программирования в общем случае формулируется следующим образом:

Определить максимум (минимум) целевой функции Fmax(min) при заданной системе ограничений (2) и граничных условий (3):

$$F_{max(min)}=a_{1}cdot x_{1}+a_{2}cdot x_{2}+...+a_{n}cdot x_{n}eqno(1)$$$$left{
begin{aligned}
b_{11}cdot x_{1}+b_{12}cdot x_{2}+...+b_{1n}cdot x_{n}leq c_{1}\
b_{21}cdot x_{1}+b_{22}cdot x_{2}+...+b_{2n}cdot x_{n}leq c_{2}\
ldots quadquadquadquadquadquadquadquad\
b_{n1}cdot x_{1}+b_{n2}cdot x_{2}+...+b_{nn}cdot x_{n}leq c_{n}
end{aligned}
right.eqno(2)
$$$$x_{i}geq 0,quad i=1,...,neqno(3)$$

Надстройка Поиск решения является инструментом оптимизации. С помощью этой надстройки можно найти оптимальное или заданное значение некоторой ячейки путем подбора значений нескольких ячеек, удовлетворив нескольким граничным условиям.

Целевая ячейка – это ячейка, для которой нужно найти максимальное, минимальное или заданное значения.

Изменяемые ячейки – это ячейки, от которых зависит значение целевой ячейки. Целевая ячейка должна содержать формулу, прямо или косвенно зависящую от изменяемых ячеек. Поиск решения подбирает значения изменяемых ячеек до тех пор, пока не будет найдено решение.

Ограничение – это условие, накладываемое на некоторую ячейку. Ограничения могут быть наложены на любые ячейки таблицы, включая целевую ячейку и изменяемые ячейки.

Чтобы запустить процедуру поиска решения, надо:

  1. В меню Данные выбрать команду Поиск решения. Откроется диалоговое окно Поиск решения (рис. 12.
    рис.
    12.11).

Диалоговое окно Поиск решения

Рис.
12.1.
Диалоговое окно Поиск решения

  1. В поле Установить целевую ячейку ввести ссылку на ячейку, в которой нужно получить максимальное, минимальное или заданное значения.
  2. В поле Изменяя ячейки ввести ссылки на изменяемые ячейки. (Если щелкнуть по кнопке Предположить, то Поиск решения самостоятельно определит изменяемые ячейки).
  3. Для задания ограничений щелкнуть по кнопке Добавить.
  4. В открывшемся диалоговом окне следует: (рис. 12.2
    рис.
    12.2)
  • в поле Ссылка на ячейку ввести ссылку на ячейку, содержащую формулу, которая определяет ограничение; формула должна прямо или косвенно зависеть от одной или нескольких изменяемых ячеек;
  • во втором поле выбрать оператор ограничения (>,<,= и т.д.);
  • в поле Ограничение ввести значение ограничения.
  1. Для задания следующего ограничения щелкнуть по кнопке Добавить и повторить операции пункта 5.
  2. Когда все ограничения будут заданы, щелкнуть по кнопке ОК, чтобы вернуться в диалоговое окно Поиск решения.

Диалоговое окно Добавление ограничения

Рис.
12.2.
Диалоговое окно Добавление ограничения

  1. Изменять и удалять ограничения можно с помощью кнопок Изменить и Удалить.
  2. С помощью кнопки Параметры можно задать: максимальное время решения; предельное число итераций; относительную погрешность; допустимое отклонение; сходимость; метод поиска.

Если известно, что решаемая задача линейная (т.е. зависимости между переменными линейны), то следует включить режим Линейная модель: процесс решения значительно ускорится.

Для возврата в диалоговое окно Поиск решения щелкнуть по кнопке ОК.

Для инициализации процедуры поиска решения щелкнуть по кнопке Выполнить. Полученные результаты будут выведены на рабочий лист.

После завершения процедуры решения в диалоговом окне Результаты поиска решения можно выполнить один из следующих вариантов:

  • сохранить найденное решение или восстановить исходные значения на рабочем листе;
  • сохранить параметры поиска решения в виде модели;
  • сохранить решение в виде сценария;
  • просмотреть любой из встроенных отчетов.

Текущие установочные параметры для поиска решения можно сохранить в виде модели. Для этого надо в диалоговом окне Параметры поиска решения щелкнуть по кнопке Сохранить модель и указать на рабочем листе область для сохранения модели (можно указать только верхнюю ячейку области).

При сохранении модели запоминаются целевая ячейка, изменяемые ячейки, ограничения и параметры поиска решения.

Чтобы впоследствии загрузить модель, надо щелкнуть по кнопке Загрузить модель в диалоговом окне Параметры поиска решения. (Диалоговое окно Параметры поиска решения открывается при щелчке по кнопке Параметры в диалоговом окне команды Сервис > Поиск решения).

Найденные решения (значения изменяемых ячеек) можно сохранить в качестве сценария. Для этого нужно:

  1. В диалоговом окне Результаты поиска решения выбрать Сохранить сценарий.
  2. В поле Название сценария ввести имя сценария. Просмотреть сценарии можно с помощью команды Данные > Работа с данными > Анализ что-если > Диспетчер сценариев > Сценарии.

С помощью программы Поиск решения можно создать три типа отчетов по результатам, полученным при успешном завершении процедуры решения.

Каждый отчет создается на отдельном листе текущей рабочей книги.

Для создания отчета надо в диалоговом окне Результаты поиска решения выбрать нужный тип отчета в поле Тип отчета. Можно выбрать сразу несколько типов (при выделении нескольких строк используется клавиша <Ctrl>).

Типы отчетов:

  • Результаты – отчет содержит целевую ячейку, список изменяемых ячеек, их исходные и конечные значения, ограничения и сведения о них.
  • Устойчивость – отчет содержит сведения о степени зависимости модели от изменений величин, входящих в формулы, применяемые в задаче (формулы модели и формулы ограничений).
  • Пределы – выводится целевая ячейка и ее значение, а также список изменяемых ячеек, их значений, нижних и верхних пределов и целевых результатов.

Рассмотрим применение процессора Excel для решения ЗЛП на примерах.

Задача 1. Планирование производства

Модель линейного программирования дает возможность определить наиболее выгодную производственную программу выпуска нескольких видов продукции при заданных ограничениях на ресурсы.

МП выпускает товары х1234, получая от реализации каждого прибыль в 60,70,120,130 руб. соответственно. Затраты на производство приведены в таблице.

Затраты х1 х2 x3 х4 Всего
Трудовые 1 1 1 1 16
Сырьевые 6 5 4 1 110
Финансы 4 6 10 13 100

Определить:

  1. Максимум прибыли в зависимости от оптимального распределения затрат.
  2. Минимум ресурсов, необходимых для получения максимальной прибыли.

Решение задачи средствами Excel состоит из 4 этапов:

  1. Создание математической модели задачи ЛП.
  2. Создание формы для ввода условий задачи, ввод в неё исходных данных и зависимостей из математической модели.
  3. Ввод данных из формы в окно Excel Поиск решения из меню Данные.
  4. Задание параметров поиска и решение задачи.

Создание математической модели задачи

Составим математическую модель процесса по описанию задачи:

$60x_{1}+70x_{2}+120x_{3}+130x_{4}=F_{max}$ — целевая функция прибыли.

Ограничения модели:

$$left{
begin{aligned}
x_{1}+x_{2}+x_{3}+x_{4}leq 16\
6x_{1}+5x_{2}+4x_{3}+x_{4}leq 110\
4x_{1}+6x_{2}+10x_{3}+13x_{4}leq 100
end{aligned}
right.
$$

$x_{i}geq 0)$ — граничные условия модели, так как количество производимых товаров не может быть отрицательной величиной.

Для решения данной задачи c помощью программы MS Excel создадим новую книгу с именем Линейное программирование и изменим имя ее первого рабочего листа на Задача о производстве.

Создание формы

  • Составление формы в виде:
  • Запись в ячейки В3:Е3 коэффициентов целевой функции F (1), в В4:Е6 коэффициентов из системы ограничений (2) и в ячейки Н4:Н6 – свободных членов из системы (2).
  • Ввод формул с помощью fx – Мастера функций.

Для ввода формулы в целевую ячейку (целевой функции): щелкнуть левой клавишей мыши по ячейке F3, затем по значку Мастера функций fx на панели инструментов, в появившемся окне «Мастер функций, Шаг 1» выбрать категорию «Математические», далее выбрать функцию СУММПРОИЗВ, нажать клавишу ОК, в окне «Мастер функций Шаг 2» в поле Массив 1 ввести с клавиатуры В2:Е2 (ячейки, в которых будут варьироваться х1..х4), в поле Массив 2 ввести В3:Е3 (коэффициенты целевой функции ЦФ).

Примечание. Можно вводить В2:Е2 не с клавиатуры, а поставить курсор в окно Массив 1, а затем протащить курсор при нажатой левой клавише мыши по ячейкам В2:Е2, имена ячеек сами запишутся в окно. Аналогично поступить с полем Массив 2.

Нажать клавишу ОК, в ячейку F3 запишется формула 60х1+70х2+120х3+ 130х4 в виде СУММПРОИЗВ(В2:Е2;В3:Е3).

Чтобы не вводить формулы в другие ячейки, необходимо изменить тип адресации для ячеек В2:Е2 с относительной на абсолютную $B$2:$E$2, установив курсор перед нужным адресом B2 и нажав функциональную клавишу F4, затем повторить эти действия для адреса E2. Формула примет следующий вид:

СУММПРОИЗВ($В$2:$Е$2;В3:Е3)

После внесенных изменений необходимо скопировать формулу в ячейки F4:F6 c помощью маркера заполнения. Для этого необходимо выделить ячейку F3, содержащую нужную формулу, установить указатель мыши на черный квадратик в правом нижнем углу ячейки (он примет форму черного крестика) и протащить с помощью левой кнопки мыши на весь требуемый диапазон.

В результате копирования мы увидим следующие формулы:

  • в ячейке F4 – СУММПРОИЗВ($В$2:$Е$2;В4:Е4),
  • в ячейке F5 – СУММПРОИЗВ($В$2:$Е$2;В5:Е5),
  • в ячейке F6 – СУММПРОИЗВ($В$2:$Е$2;В6:Е6).

Заполнение окна Поиск решения

Выбрать в пункте меню Данные команду Поиск решения, поставить курсор в поле целевой функции, выделить ячейку F3 в форме (или ввести F3 с клавиатуры), поставить переключатель в положение «Максимальному значению» (см. рис. 12.1
рис.
12.1). В поле «Изменяя ячейки» ввести $В$2:$Е$2(с клавиатуры или протащив мышью).

Нажать клавишу «Добавить», в окне «Добавление ограничения» в поле «Ссылка на ячейку» ввести F4, выбрать через «стрелка вниз» знак «$leq$«, в поле справа ввести Н4 (рис. 12.
рис.
12.2).

Аналогично через «Добавить» ввести $F5leq5$, $F6leqH6$ для системы ограничений (2), а также $B2geq0$, $C2geq0$, $D2geq0$ и $Е2geq0$.

Также необходимо добавить ограничения для получения целочисленных величин по количеству товаров: B2=цел, C2=цел, D2=цел и Е2=цел.

После ввода последнего граничного условия вместо «Добавить» нажать клавишу ОК, появится окно «Поиск решения».

Для изменения или удаления ограничений и граничных условий используются клавиши Изменить, Удалить.

Параметры поиска

В окне «Поиск решения» нажать клавишу «Параметры», выбрать по умолчанию Максимальное время – 100 с, число итераций – 100 (для большинства задач это количество просчётов подходит с большим запасом), установить флажок в строке «Линейная модель», нажать ОК, в появившемся окне Поиск Решения нажать Выполнить (рис. 12.
рис.
12.3).

Диалоговое окно Параметры поиска решения

Рис.
12.3.
Диалоговое окно Параметры поиска решения

Результаты поиска решения с таблицей результатов:

Таким образом оптимальный план Х(Х1234)=(10,0,6,0) при минимальном использовании ресурсов

  • Трудовые – 16 (У1)
  • Сырьевые – 84 (У2)
  • Финансы – 100 (У3)

даёт максимум прибыли F в 1320 руб.

Вывод: Максимальная прибыль F в 1320 руб. получается при выпуске только товаров Х1 и Х3 в количестве 10 и 6 штук соответственно, товары Х3 и Х4 выпускать не нужно (это приведёт к снижению прибыли). Трудовые (У1) и финансовые (У3) ресурсы используются полностью, по сырьевым ресурсам (У2) есть запас в 110-84=26 ед.

Кроме того, это означает, что изменение трудовых (y1) и финансовых (y3) ресурсов приведёт к изменению прибыли F, а изменение сырьевых ресурсов (y2) – нет.

Разности между плановыми ресурсами и использованными являются двойственными переменными y1, y2 и y3 сопряжённой задачи линейного программирования. В данном случае y1=y3=0, а y2=26 ед. Таким образом, ресурс y2 можно уменьшить на 26 ед., тогда план по сырью тоже будет оптимальным.

Задача 2. Задача об оптимальной диете

Имеется n видов продуктов питания, в которых содержится m типов питательных веществ (белки, жиры, углеводы). В одной весовой единице продукта i-го типа $(i in {1, 2, ..., n})$ содержится аi единиц питательного вещества j-го вида $(j in {1, 2, ..., m})$. Известна минимальная суточная потребность b j (j in {1,2,…, т}) человека в каждом из видов питательных веществ. Задана калорийность сi одной весовой единицы i-го продукта (i принадлежит {1, 2, …, n}).

Требуется определить оптимальный состав рациона продуктов, такой, чтобы каждое питательное вещество содержалось в нем в необходимом количестве, обеспечивающем суточную потребность человека, и при этом суммарная калорийность рациона была минимальной.

Ведем в рассмотрение следующие переменные: х – весовое количество продукта питания i-го типа в суточном рационе.

Тогда в общем случае математическая постановка задачи об оптимальной диете может быть сформулирована следующим образом:

$$c_{1}x_{1}+c_{2}c_{2}+...+c_{n}x_{n}rightarrow minlimits_{xinDelta_{beta}}eqno(4)$$

где множество допустимых альтернатив $Delta_{beta}$ формируется следующей системой ограничений типа неравенств:

$$left{
begin{aligned}
a_{11} x_{1}+a_{12} x_{2}+...+a_{1n} x_{n}geq b_{1}\
a_{21} x_{1}+a_{22} x_{2}+...+a_{2n} x_{n}geq b_{2}\
ldots quadquadquadquadquadquadquadquad\
a_{m1} x_{1}+a_{m2} x_{2}+...+a_{mn} x_{n}geq b_{m}
end{aligned}
right.eqno(5)
$$$$x_{1},x_{2},...,x_{n}geq 0, quad eqno(6)$$

Для решения задачи об оптимальной диете с помощью программы MS Excel необходимо задать конкретные значения параметрам исходной задачи.

Для определенности предположим, что в качестве исходных типов продуктов рассматриваются: хлеб, мясо, сыр, бананы, огурцы, помидоры, виноград (n = 7), а в качестве питательных веществ рассматриваются белки, жиры, углеводы (m = 3).

Калорийность одной весовой единицы каждого из продуктов следующая:с1 = 2060,с2= 2430,с3= 3600,с4= 890,с5= 140,с6= 230, с7 = 650. Содержание питательных веществ в каждом из продуктов может быть задано в форме нижеприведенной таблицы.

Минимальная суточная потребность в питательных веществах следующая: в белках b 1 = 100, в жирах b 2= 70, в углеводах b3 = 400.

Для решения данной задачи c помощью программы MS Excel создадим новую книгу с именем Линейное программирование и изменим имя ее второго рабочего листа на Задача о диете.

Таблица
1.
Содержание питательных веществ в продуктах питания

Продукты/питательные вещества Хлеб ржаной Мясо баранина Сыр «Российский» Банан Огурцы Помидоры Виноград
Белки 61 220 230 15 8 11 6
Жиры 12 172 290 1 1 2 2
Углеводы 420 0 0 212 26 38 155

Создание математической модели задачи

Составим математическую модель процесса по описанию задачи:

$2060x_{1}+2430x_{2}+3600x_{3}+890x_{4}+140x_{5}+230x_{6}+650x_{7}=F_{min}$ – целевая функция (суммарная калорийность продуктов).

Ограничения модели:

$$left{
begin{aligned}
61x_{1}+220x_{2}+230x_{3}+15x_{4}+8x_{5}+11x_{6}+2x_{7}geq 100\
12x_{1}+172x_{2}+290x_{3}+x_{4}+x_{5}+2x_{6}+6x_{7}geq 70\
420x_{1}+212x_{4}+26x_{5}+38x_{6}+155x_{7}geq 400
end{aligned}
right.
$$

$x_{1},x_{2},...,x_{7}geq 0, quad$ – граничные условия

Создание формы

Для решения поставленной задачи выполним следующие подготовительные действия:

  1. Внесем необходимые надписи в ячейки A1:I1, A2:A7, B4, I4, J4.
  2. В ячейки ВЗ:НЗ введем значения коэффициентов целевой функции: с1 = 2060, с2 = 2430, с3 = 3600, с4 = 890, с5 = 140, с6 = 230, с7 = 650.
  3. В ячейку I2 введем формулу: =СУММПРОИЗВ( b2:Н2;B3:H3), которая представляет целевую функцию (4).
  4. В ячейки В5:Н7 введем значения коэффициентов ограничений, взятых из таблицы.

Исходные данные для решения задачи об оптимальной диете

Рис.
12.4.
Исходные данные для решения задачи об оптимальной диете

  1. В ячейки J5:J7 введем значения правых частей ограничений, соответствующих минимальной суточной потребности в питательных веществах: в белках b 1=100, жирах b 2= 70 и углеводах b3 = 400.
  2. В ячейку I5 введем формулу: =СУММПРОИЗВ($B$2:$H$2;В5:Н5), которая представляет левую часть первого ограничения (5).
  3. Скопируем формулу, введенную в ячейку I5, в ячейки I6 и I7.
  4. Внешний вид рабочего листа MS Office Excel с исходными данными для решения задачи об оптимальном рационе питания имеет следующий вид (pиc. 12.4).

Для отображения формул в ячейках рабочего листа необходимо выполнить команду меню: Формулы и на панели инструментов в группе Зависимости формул выбрать Показать формулы.

Заполнение окна Поиск решения

Для дальнейшего решения задачи следует вызвать мастер поиска решения, для чего необходимо выполнить операцию: Данные > Поиск решения…

После появления диалогового окна Поиск решения следует выполнить следующие действия:

  1. В поле с именем Установить целевую ячейку: ввести абсолютный адрес ячейки $I$2.
  2. Для группы Равной: выбрать вариант поиска решения – минимальному значению.
  3. В поле с именем Изменяя ячейки: ввести абсолютный адрес ячеек $B$2:$H$2.
  4. Добавить 3 ограничения, представляющие минимальные суточные потребности в питательных веществах. С этой целью выполнить следующие действия:
    • для задания первого ограничения в исходном диалоговом окне Поиск решения нажать кнопку с надписью Добавить (рис. 12.5
      рис.
      12.5, а);
    • в появившемся дополнительном окне выбрать ячейку $I$5, которая должна отобразиться в поле с именем Ссылка на ячейку;
    • в качестве знака ограничения из выпадающего списка выбрать нестрогое неравенство » «;
    • в качестве значения правой части ограничения выбрать ячейку $J$5;
    • для добавления первого ограничения в дополнительном окне нажать кнопку с надписью Добавить;
    • аналогичным образом задать оставшиеся два ограничения (рис. 12.5
      рис.
      12.5, б).
  5. Добавить ограничение на допустимые значения переменных. С этой целью выполнить следующие действия:
    • в исходном диалоговом окне Поиск решения нажать кнопку с надписью Добавить;
    • в появившемся дополнительном окне выбрать диапазон ячеек $В$2:$Н$2, который должен отобразиться в поле с именем Ссылка на ячейку;
    • в качестве знака ограничения из выпадающего списка выбрать нестрогое неравенство «$geq$«;
    • в качестве значения правой части ограничения в поле с именем Ограничение: ввести значение 0;
    • для добавления ограничения в дополнительном окне нажать кнопку с надписью Добавить (рис. 12.6
      рис.
      12.6, а).

Параметры мастера поиска решения и базовые ограничения для задачи об оптимальной диете

Рис.
12.5.
Параметры мастера поиска решения и базовые ограничения для задачи об оптимальной диете

Ограничения на значения переменных и параметры мастера поиска решения для задачи об оптимальной диете

Рис.
12.6.
Ограничения на значения переменных и параметры мастера поиска решения для задачи об оптимальной диете

Параметры

В окне «Поиск решения» нажать клавишу «Параметры», выбрать «Поиск решения Линейных задач симплекс-методом», нажать ОК, затем нажать Найти Решение (рис. 12.6
рис.
12.6, б).

После задания ограничений и целевой функции можно приступить к поиску численного решения, для чего следует нажать кнопку Выполнить. После выполнения расчетов программой MS Excel будет получено количественное решение, которое имеет вид, представленный на рис. 12.
рис.
12.7.

Результатом решения задачи об оптимальной диете являются найденные оптимальные значения переменных: х1 = 0, х2 = 0,211, 3 = 0,109, х4= 1,887, х5 = 0, х6 = 0, х7 = 0, которым соответствует значение целевой функции: fопт= 2587,140. При выполнении расчетов для ячеек В2:I2 был выбран числовой формат с 3 знаками после запятой.

Анализ найденного решения показывает, что для удовлетворения суточной потребности в питательных веществах (белки, жиры, углеводы) следует использовать 211 г мяса баранины, 109 г сыра и 1887 г бананов, совсем отказавшись от хлеба, огурцов, помидоров и винограда. При этом общая калорийность найденной оптимальной диеты будет приближенно равна 2590 ккал, что вполне соответствует малоактивному образу жизни без серьезных физических нагрузок. Напомним, что согласно медицинским данным, энергетические затраты работников интеллектуального труда (юристы, бухгалтера, врачи, педагоги) лежат в пределах 3000 ккал.

Результат количественного решения задачи об оптимальной диете

Рис.
12.7.
Результат количественного решения задачи об оптимальной диете

ЗАДАНИЕ

  1. Составить математическую модель задачи линейного программирования.
  2. Решить задачу линейного программирования в Excel с помощью Поиска решения.
  3. Сохранить в виде модели установочные параметры.

Вариант 1.

Предприятие легкой промышленности выпускает две модели машин, причем каждая модель производится на отдельной технологической линии. Суточный объем производства первой линии – 80 изделий, второй линии – 85 изделий. На машину первой модели расходуются 12 однотипных элементов электронных схем, на машину второй модели – 6 таких же элементов. Максимальный суточный запас используемых элементов равен 800 единицам. Прибыль от реализации одной машины первой и второй моделей равна $30 и $40 соответственно. Определить оптимальный суточный объем производства первой и второй моделей.

Вариант 2.

Процесс изготовления двух видов промышленных изделий состоит в последовательной обработке каждого из них на трех приборах. Время использования этих приборов для производства данных изделий ограничено 10 ч. в сутки. Найти оптимальный объем производства изделий каждого вида.

Вариант 3.

Фирма имеет возможность рекламировать свою продукции, используя местные радио- и телевизионную сеть. Затраты на рекламу в бюджете фирмы ограничены $1000 в месяц. Каждая минута радиорекламы обходится в $5, а минута телерекламы – в $100. Фирма хотела бы использовать радиосеть, по крайней мере, в два раза чаще, чем сеть телевидения. Опыт прошлых лет показал, что объем сбыта, который обеспечивает каждая минута телерекламы, в 25 раз больше сбыта, обеспечиваемого одной минутой радиорекламы. Определить оптимальное распределение ежемесячно отпускаемых средств между радио- и телерекламой.

Вариант 4.

Фирма производит два вида продукции – А и B. Объем сбыта продукции вида A составляет не менее 70% общего объема реализации продукции обоих видов. Для изготовления продукции А и В используется одно и то же сырье, суточный запас которого ограничен величиной 120 кг. Расход сырья на единицу продукции A составляет 3 кг, а на единицу продукции В – 5 кг. Цены продукции А и В равны $20 и $60 соответственно. Определить оптимальное распределение сырья для изготовления продукции А и В.

Вариант 5.

Фирма выпускает женские шляпы двух фасонов. Трудоемкость изготовления шляпы фасона 1 вдвое выше трудоемкости изготовления шляпы фасона 2. Если бы фирма выпускала только шляпы фасона 1, суточный объем производства мог бы составить 60 шляп. Суточный объем сбыта шляп обоих фасонов ограничен диапазоном от 50 до 100 штук. Прибыль от продажи шляпы фасона 1 равна $6, а фасона 2 – $7. Определить какое количество шляп каждого фасона следует изготавливать, чтобы максимизировать прибыль.

Вариант 6.

Изделия четырех типов проходят последовательную обработку на двух станках. Время обработки одного изделия каждого типа на каждом из станков:

Затраты на производство одного изделия каждого типа определяются как величины, прямо пропорциональные времени использования станков (в машино-часах). Стоимость машино-часа составляет $10 и $15 для станка 1 и 2 соответственно. Допустимое время для использования станков для обработки изделий всех типов ограничено следующими значениями: 500 машино-часов – для станка 1 и 380 машино-часов для станка 2. Цены изделий типов 1,2,3 и 4 равны $65, $70, $55 и $45 соответственно. Составить план производства, максимизирующий чистую прибыль.

Вариант 7.

Завод выпускает изделия трех моделей (I, II III) Для их изготовления используется два вида ресурсов (А и В), запасы которых составляют – 5000 и 6000 единиц. Расходы ресурсов на одно изделие каждой модели:

Трудоемкость изготовления модели I вдвое больше, чем изделия модели II, и втрое больше, чем изделие модели III. Численность рабочих завода позволяет выпускать 1500 изделий I. Анализ условий сбыта показывает, что минимальный спрос на продукцию завода составляет 200, 200 и 150 изделий моделей I,II и III соответственно. Однако соотношение выпуска изделий моделей I,II и III должно быть равно 3:2:5. Удельная прибыль от реализации изделий моделей I,II и III составляет $30, $20 и $50 соответственно. Определить выпуск изделий, максимизирующий прибыль.

Вариант 8.

Требуется распределить имеющиеся денежные средства по четырем альтернативным вариантам. Игра имеет три исхода. Ниже приведены размеры выигрыша (или проигрыша) на каждый доллар, вложенный в соответствующий альтернативный вариант, для любого из трех исходов. У игрока имеется $500, причем, использовать в игре их можно только один раз. Точный исход игры заранее неизвестен, и, учитывая эту неопределенность, игрок решил распределить деньги так, чтобы максимизировать максимальную отдачу от этой суммы.

Вариант 9.

Бройлерное хозяйство птицеводческой фермы насчитывает 80000 цыплят, которые выращиваются до 8-недельного возраста и после соответствующей обработки поступают в продажу. Хотя недельный рацион цыплят зависит от их возраста, в дальнейшем будем считать, что в среднем (за 8 недель) он составляет 1 фунт.

Для того чтобы цыплята достигли к восьмой неделе необходимых весовых кондиций, кормовой рацион должен удовлетворять определенным требованиям по питательности. Этим требованиям могут соответствовать смеси различных видов кормов или ингредиентов. Ограничим наше рассмотрение только тремя ингредиентами: известняком, зерном и соевыми бобами. Ниже приведены данные, характеризующие содержание (по весу) питательных веществ в каждом из ингредиентов и удельную стоимость каждого ингредиента.

Смесь должна содержать:

  • не менее 0.8%, но не более 1.2% кальция;
  • не менее 22% белка;
  • не более 5% клетчатки.

Необходимо определить количество каждого из трех ингредиентов, образующих смесь минимальной стоимости при соблюдении требований к общему расходу кормовой смеси и ее питательности.

Вариант 10.

Имеется n видов продуктов питания, в которых содержится m типов питательных веществ (белки, жиры, углеводы). В одной весовой единице продукта i-го типа $(i in {1, 2, ..., n})$ содержится аi единиц питательного вещества j-го вида $(j in {1, 2, ..., m})$. Известна минимальная суточная потребность b j$(j in{1,2,..., т})$ человека в каждом из видов питательных веществ. Задана калорийность сi одной весовой единицы i-го продукта (i принадлежит {1, 2, …, n}). Требуется определить оптимальный состав рациона продуктов, такой, чтобы каждое питательное вещество содержалось в нем в необходимом количестве, обеспечивающем суточную потребность человека, и при этом суммарная калорийность рациона была минимальной.

Для решения задачи об оптимальной диете с помощью программы MS Excel необходимо задать конкретные значения параметрам исходной задачи. Для определенности предположим, что в качестве исходных типов продуктов рассматриваются: хлеб, мясо, сыр, бананы, огурцы, помидоры, виноград (n = 7), а в качестве питательных веществ рассматриваются белки, жиры, углеводы (m = 3). Калорийность одной весовой единицы каждого из продуктов следующая:с1 = 2060,с2= 2430,с3= 3600,с4= 890,с5= 140,с6= 230, с7 = 650. Содержание питательных веществ в каждом из продуктов может быть задано в форме следующей таблицы (см. табл.).

Таблица
1.
Содержание питательных веществ в продуктах питания

Продукты/питательные вещества Хлеб ржаной Мясо баранина Сыр «Российский» Банан Огурцы Помидоры Виноград
Белки 66 225 235 20 13 16 11
Жиры 17 177 295 1 1 7 7
Углеводы 425 0 0 217 31 43 200

Минимальная суточная потребность в питательных веществах следующая: в белках b 1 = 105, в жирах b 2 = 75, в углеводах b 3 = 405.

Определить суточную потребности в питательных веществах (белки, жиры, углеводы) и общую калорийность оптимальной диеты.

Вариант 11.

Предприятие электронной промышленности выпускает две модели радиоприемников, причем каждая модель производится на отдельной технологической линии. Суточный объем производства первой линии – 60 изделий, второй линии – 75 изделий. На радиоприемник первой модели расходуются 10 однотипных элементов электронных схем, на радиоприемник второй модели – 8 таких же элементов. Максимальный суточный запас используемых элементов равен 800 единицам. Прибыль от реализации одного радиоприемника первой и второй моделей равна $30 и $20 соответственно. Определить оптимальный суточный объем производства первой и второй моделей.

Вариант 12.

Процесс изготовления двух видов промышленных изделий состоит в последовательной обработке каждого из них на трех станках. Время использования этих станков для производства данных изделий ограничено 10 ч. в сутки. Найти оптимальный объем производства изделий каждого вида.

Вариант 13.

Фирма имеет возможность рекламировать свою продукции, используя местные радио- и телевизионную сеть. Затраты на рекламу в бюджете фирмы ограничены $1000 в месяц. Каждая минута радиорекламы обходится в $5, а минута телерекламы – в $100. Фирма хотела бы использовать радиосеть, по крайней мере, в два раза чаще, чем сеть телевидения. Опыт прошлых лет показал, что объем сбыта, который обеспечивает каждая минута телерекламы, в 25 раз больше сбыта, обеспечиваемого одной минутой радиорекламы. Определить оптимальное распределение ежемесячно отпускаемых средств между радио- и телерекламой.

Вариант 14.

Фирма производит два вида продукции – A и B. Объем сбыта продукции вида A составляет не менее 60% общего объема реализации продукции обоих видов. Для изготовления продукции А и В используется одно и то же сырье, суточный запас которого ограничен величиной 100 кг. Расход сырья на единицу продукции A составляет 2 кг, а на единицу продукции В – 4 кг. Цены продукции А и В равны $20 и $40 соответственно. Определить оптимальное распределение сырья для изготовления продукции А и В.

Вариант 15.

Фирма выпускает ковбойские шляпы двух фасонов. Трудоемкость изготовления шляпы фасона 1 вдвое выше трудоемкости изготовления шляпы фасона 2. Если бы фирма выпускала только шляпы фасона 1, суточный объем производства мог бы составить 60 шляп. Суточный объем сбыта шляп обоих фасонов ограничен диапазоном от 50 до 100 штук. Прибыль от продажи шляпы фасона 1 равна $8, а фасона 2 – $5. Определить какое количество шляп каждого фасона следует изготавливать, чтобы максимизировать прибыль.

Вариант 16.

Изделия четырех типов проходят последовательную обработку на двух станках. Время обработки одного изделия каждого типа на каждом из станков:

Затраты на производство одного изделия каждого типа определяются как величины, прямо пропорциональные времени использования станков (в машино-часах). Стоимость машино-часа составляет $10 и $15 для станка 1 и 2 соответственно. Допустимое время для использования станков для обработки изделий всех типов ограничено следующими значениями: 500 машино-часов – для станка 1 и 380 машино-часов для станка 2. Цены изделий типов 1,2,3 и 4 равны $65, $70, $55 и $45 соответственно. Составить план производства максимизирующий чистую прибыль.

Вариант 17.

Завод выпускает изделия трех моделей (I, II III). Для их изготовления используется два вида ресурсов (А и В), запасы которых составляют – 4000 и 6000 единиц. Расходы ресурсов на одно изделие каждой модели:

Трудоемкость изготовления модели I вдвое больше, чем изделия модели II, и втрое больше, чем изделие модели III. Численность рабочих завода позволяет выпускать 1500 изделий I. Анализ условий сбыта показывает, что минимальный спрос на продукцию завода составляет 200, 200 и 150 изделий моделей I,II и III соответственно. Однако соотношение выпуска изделий моделей I,II и III должно быть равно 3:2:5. Удельная прибыль от реализации изделий моделей I,II и III составляет $30, $20 и $50 соответственно. Определить выпуск изделий, максимизирующий прибыль.

Вариант 18.

Некоторое производственное предприятие выпускает три вида клея. Для производства клея используется 4 типа химических веществ: крахмал, желатин, квасцы и мел. Расход этих веществ в кг для получения 1 кг каждого вида клея и их запас на складе предприятия представлены в таблице.

Таблица
1.
Расход химических веществ на изготовления клея, их запас на складе

Вид клея /Химические вещества Клей № 1 Клей № 2 Клей № 3 Запас на складе
Крахмал 0,4 0,3 0,2 20
Желатин 0,2 0,3 0,4 35
Квасцы 0,05 0,07 0,1 7
Мел 0,01 0,05 0,15 10

Стоимость каждого вида клея для оптовых покупателей следующая:с1 = 380 руб/кг,с2 =430 руб/кг,с3 = 460 руб/кг. Требуется определить оптимальный объем выпуска клея каждого вида, обеспечивающий максимум общей стоимости готовой продукции.

Вариант 19.

Бройлерное хозяйство птицеводческой фермы насчитывает 20000 цыплят, которые выращиваются до 8-недельного возраста и после соответствующей обработки поступают в продажу. Хотя недельный рацион цыплят зависит от их возраста, в дальнейшем будем считать, что в среднем (за 8 недель) он составляет 1 фунт.

Для того чтобы цыплята достигли к восьмой неделе необходимых весовых кондиций, кормовой рацион должен удовлетворять определенным требованиям по питательности. Этим требованиям могут соответствовать смеси различных видов кормов или ингредиентов. Ограничим наше рассмотрение только тремя ингредиентами: известняком, зерном и соевыми бобами. Ниже приведены данные, характеризующие содержание (по весу) питательных веществ в каждом из ингредиентов и удельную стоимость каждого ингредиента.

Смесь должна содержать:

  • не менее 0.8%, но не более 1.2% кальция;
  • не менее 22% белка;
  • не более 5% клетчатки.

Необходимо определить количество каждого из трех ингредиентов, образующих смесь минимальной стоимости при соблюдении требований к общему расходу кормовой смеси и ее питательности.

Вариант 20.

Имеется конечное число видов продуктов питания: ананас, арбуз, грейпфрут, язык говяжий, сардельки говяжьи, хлеб «Бородинский», картофель (n = 7), а в качестве питательных веществ рассматриваются белки, жиры, углеводы (m = 3). Калорийность 1 кг каждого из продуктов следующая:с1 = 470,с2= 380,с3 = 350,с4 = 1460,с5 = 2150,с6 = 2070, с7 = 800. Минимальная суточная потребность в питательных веществах следующая: в белках b 1 = 100, в жирах b 2 = 70, в углеводах b3 = 400. Содержание питательных веществ в каждом из продуктов может быть задано в форме нижеприведенной таблицы (табл.).

Требуется определить такой рацион питания, чтобы каждое питательное вещество содержалось в нем в необходимом количестве, обеспечивающем суточную потребность человека, и при этом суммарная калорийность рациона была минимальной.

Таблица
1.
Содержание питательных веществ в продуктах питания

Продукты/Питательные вещества Ананас Арбуз Грейпфрут Язык говяжий Сардельки говяжьи Хлеб «Бородинский» Картофель
Белки 4 7 9 122 114 68 20
Жиры 2 2 2 109 182 13 4
Углеводы 115 88 65 0 15 407 163

КОНТРОЛЬНЫЕ ВОПРОСЫ

  1. Сформулировать основную задачу линейного программирования. Записать математическую модель ЗЛП.
  2. Для чего предназначена надстройка Поиск решения?
  3. Что понимают под целевой ячейкой, изменяемыми ячейками?
  4. Основные этапы решения ЗЛП с помощью процессора Excel.
  5. Как сохранить установочные параметры для поиска решения в виде модели?
  6. Какие существуют виды отчетов и как их создать? Продемонстрировать на примере.

Понравилась статья? Поделить с друзьями:
  • Как найти приложение в телефоне apple
  • Как найти свою атс
  • Как найти китайца в интернете
  • Как найти память телефона самсунг галакси j2
  • Как мне найти девушку в казахстане