Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
лабораторная работа 5.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
95.23 Кб
Скачать

Лабораторная работа №5. Транспортная задача линейного программирования

Цель работы:

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

Требования к содержанию, оформлению и порядку выполнения

Номер варианта индивидуального задания определяется последней цифрой в зачетной книжке студента (цифра 0 соответствует варианту № 10) или порядковым номером компьютера в компьютерном классе, за которым работает студент.

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

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

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

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

Отчет оформляется в соответствии с приведенным образцом.

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

1. Формулировка задания на программирование.

2. Краткое описание исследуемого метода - фрагмент лекционного материала.

3. Текст программы в виде m-файла - является основным результатом выполнения работы.

4. Исходные данные, номер варианта.

5. Результаты вычислений, включая промежуточные результаты - копии текстовых файлов или копии экранных форм, графики.

6. Результаты проверки полученных данных

Общая постановка задачи

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

Лабораторные занятия проводятся в компьютерных классах.

Теоретическая часть

Транспортная задача (ТЗ) линейного программирования (ЛП) может быть сформулирована следующим образом.

Имеется m пунктов отправления (производства) A1,..., Am, в которых имеется товар в количестве ai,...,am соответственно. Кроме того, имеется n пунктов назначения (потребления) B1,..., Bn, в которых имеются заявки на этот товар в количестве b1,..., bn соответственно. Предполагается, что

т.е. все, что произведено, должно быть получено. Приведенное уравнение называется условием баланса.

Известна стоимость cij перевозки единицы товара из пункта отправления Ai в пункт потребления Bj. Требуется составить такой план перевозок товара, при котором весь товар из пунктов производства вывезен, все заявки в пунктах потребления удовлетворены и общая стоимость перевозок минимальна.

Математическая модель ТЗ состоит в следующем. Обозначим через xij количество товара, перевозимого из Ai в Bj. Составим задачу ЛП:

На практике условие баланса может не выполняться.

Если

, (производится больше, чем потребляется),

то вводим новый пункт потребления Bn+1 с запросом

Полагаем

ci,n+1 = 0, i = 1,... , m.

Если же

, (потребляется больше, чем производится),

то вводим новый пункт производства Am+1 с предложением

Полагаем

cm+1,j =0, j = 1, ... , n.

В дальнейшем будем считать, что условие баланса выполнено.

Отметим, что ранг системы ограничений ТЗ равен т + п-1 (на 1 меньше т + п за счет связующего условия баланса). Поэтому количество базисных переменных также равно т + п — 1.

В MatLab задача линейного программирования решается с помощью функции Linprog:

Синтаксис:

Различные варианты записи правой части вызова функции Linprog:

x = linprog(f,A,b,Aeq,beq)

x = linprog(f,A,b,Aeq,beq,lb,ub)

[x,fval] = linprog(...)

[x,fval,exitflag] = linprog(...)

[x,fval,exitflag,output] = linprog(...)

Различные варианты записи левой части вызова функции Linprog:

  • x = linprog(f,A,b) находит min f'*x при условии, что A*x <= b.

  • x = linprog(f,A,b,Aeq,beq) решает указанные выше задачу при условии дополнительного выполнения ограничений в виде равенств Aeq*x = beq. Если нет неравенств, то устанавливается A=[] и b=[].

  • x = linprog(f,A,b,Aeq,beq,lb,ub) определяет набор нижних и верхних границ для проектируемых переменных х, так что решение всегда находится в диапазоне lb <= x <= ub. Если нет неравенств, то устанавливается Aeq=[] и beq=[].

  • [x,fval] = linprog(...) возвращает значение целевой функции fun как решение от х: fval = f'*x.

  • [x,lambda,exitflag,output] = linprog(...) возвращает структурный выход с информацией об оптимизации

  • [x,fval,exitflag,output,lambda] = linprog(...) Возвращает структурную lambda, чьи поля включают в себя множители Лагранжа как решение от х.