Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Алексеева_ПРО-323_ИО_Лаб_1.docx
Скачиваний:
10
Добавлен:
25.11.2022
Размер:
2.26 Mб
Скачать
  1. Получение оптимального решения в Mathcad

Также для решения задачи будет иcпользоваться Mathcad - система компьютерной алгебры из класса систем автоматизированного проектирования.

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

В данном случае она имеет вид f(x1, x2, x3) .

Затем, при помощи оператора := запишем ЦФ.

Далее, укажем начальные значения переменных, также через оператор :=

После написания ЦФ, создаем блок ограничений при помощи слова Given. Укажем все ограничения, наложенные на ЦФ.

Далее, создадим матрицу из одного столбца, в строках которой будут перечислены переменные x1..x3.

Этой матрице присвоим (:=) значение функции Maximize(f, x1, x2, x3) и поставим знак =.

В матрице выведутся значения x1..x3, при которых ЦФ достигает максимума.

Чтобы найти максимум ЦФ, напишем f(x1, x2, x3) = и Mathcad выведем максимальное значение при заданных ограничениях.

Все, написанные действия проиллюстрированы на рисунке ниже.

Рисунок 4 Задание начальных приближений

Рисунок 5 Задание ограничений

Рисунок 6 Получение решений

Как мы можем видеть, решатель выдал нам следующее оптимальное решение:

  • Значения матрицы – это значения количества тканей трех артикулов

(1000, 6*10^3 = 6000, 2,5 * 10^3 = 2500)

  • Значение функции – это максимальная общая стоимость тканей = 7.3 * 10^4 = 73000

  1. Получение оптимального решения в Scilab

Еще одна программа, которая отлично подойдет для решения данной задачи – Scilab — пакет прикладных математических программ, предоставляющий открытое окружение для инженерных (технических) и научных расчётов.

Для решения задач линейного программирования в пакете Scilab существует библиотека Quapro Toolbox.

Quapro Toolbox предоставляет три функции:

  1. linpro – функция для решения задач ЛП.

  2. mps2linpro – функция перевода данных из формата MPS(специальный формат для задач ЛП) в формат для функции linpro.

  3. quapro – функция для линейно-квадратичной оптимизации.

Нам понадобится только функция linpro.

Функция решает задачу:

x = 〖(x1,..,xn)〗^T

1. 〖ci〗_j≤x_j≤〖cs〗_j,j∈[1,n]

2. 〖(C*x)〗_j≤b_j,j∈[1,n]

3. f(x)= p^T*x→min

Данная функция имеет следующий вид:

[x,lagr,f]=linpro(p,C,b[,ci,cs]),

Адаптирую ее для своей задачи:

Так как функция linpro ищет минимум функции, то изменим некоторые параметры функции linpro:

[x,lagr,f]=linpro(-p,C,b,ci,cs);

Теперь создадим новый sce- файл(для этого подойдёт любое приложение типа блокнот), где запишем следующую программу:

C=[0.02,0,0.04;0.04,0.03,0.01;0.03,0.02,0.025;1,1.5,2]; //зададим матрицу С

b=[200;500;450;15000]; // зададим вектор b

ci=[1000;2000;2500]; // нижняя граница переменных

cs=[5000;9000;4000]; // верхняя граница переменных

p=[5;8;8]; // коэффициенты при целевой функции

[x,lagr,f]=linpro(-p,C,b,ci,cs); // сама функция

x // вывести значения переменных для оптимального решения

f // вывести значение ЦФ для оптимального решения

Запустим этот файл на исполнение и получаем следующее

Рисунок 7 Результат

Мы можем увидеть решение:

В начале программа выводит количество метров ткани, которое нужно произвести:

Затем выводится максимальное значение функции:

  1. Выводы

При значениях переменных x1, x2, x3, полученных при помощи различных пакетов, мы получили максимальное значение целевой функции. С экономической точки зрения, значения переменных – ткань в метрах, а значение целевой функции – это стоимость тканей. Затраты будут максимальными с учетом введенных ограничений.

Таким, образом мы получили оптимальное решение: необходимо произвести 1000м ткани 1 артикула, 6000м ткани 2 артикула и 2500м ткани 3 артикула, чтобы общая стоимость была максимальна – 73000.