Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Методичка по лин. программированию.doc
Скачиваний:
5
Добавлен:
30.04.2019
Размер:
2.03 Mб
Скачать

Линейное программирование

Задание 1. Решить систему линейных уравнений методом Жордана-Гаусса.

Пусть дана система линейных уравнений с неизвестными

,

где - неизвестные, - коэффициент при неизвестном , - свободный член -ого уравнения ( , ).

Все расчеты по методу Жордана-Гаусса будем проводить в таблице.

Алгоритм метода Жордана-Гаусса.

  1. В таблице записываем свободные члены, матрицу коэффициентов при неизвестных. Дополняем таблицу контрольным столбцом, элементы которого получены суммированием элементов строки, т.е. .

  1. Во внутренней части таблицы выбираем отличный от нуля разрешающий элемент, например .

  2. Все элементы разрешающей строки (с номером ) делим на .

  3. Остальные элементы разрешающего столбца (с номером ) заменяем нулями.

  4. Все остальные элементы, включая и элементы контрольного столбца, вычисляем по правилу прямоугольника .

  1. После заполнения всей таблицы осуществляем контроль: все новые элементы контрольного столбца должны быть равны сумме всех элементов строки.

Этот процесс продолжается до тех пор, пока все строки не побывают разрешающими.

Замечание.

  1. Для удобства вычислений обычно выбирают .

  2. Если в процессе решения какая-нибудь строка полностью обнулится, то её вычеркиваем.

  3. Если в процессе решения получим строку, у которой все элементы кроме свободного члена, отличного от нуля, равны нулю, то такая система решения не имеет.

  4. Если в разрешающей строке какой-либо элемент равен нулю, то весь столбец, в котором стоит этот элемент, в новую таблицу переписывается без изменения.

  5. Если в разрешающем столбце какой-либо элемент равен нулю, то строка, в которой стоит этот элемент, в новую таблицу переписывается без изменений.

Переменные, которым соответствуют единичные вектора, называют базисными.

Переменные, которые не входят в базис, называют свободными.

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

Те базисные решения, которые не содержат отрицательных переменных ( ) называются опорными.

Теорема.

1. Если число базисных переменных равно общему числу переменных системы, то система имеет единственное решение.

2. Если число базисных переменных меньше общего числа переменных системы, то система имеет бесконечное множество решений.

Пример. Решить систему методом Жордана-Гаусса

Решение:

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

базис

2

2

-1

1

4

-2

3

2

2

5

1

1

-2

1

1

2

2

-1

1

4

-6

-1

4

0

-3

-1

-1

-1

0

-3

-10

0

7

1

-2

6

1

-4

0

3

5

0

-5

0

0

-3

0

0

1

-2

2

1

0

0

3

-1

0

1

0

0


Записываем полученные данные в таблицу. Осуществляем контроль:

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

Переходим к следующему шагу.

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

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

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

Переходим к следующему шагу.

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

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

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

Т.к. все строки побывали разрешающими и система приведена к единичному базису, то выписываем ответ:

Ответ: .

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

( неравенства в системе ограничений могут содержать знаки или )

Так как задача задана в стандартной форме (все ограничения- неравенства), то решение задачи происходит по следующим этапам:

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

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

  2. Пересечение всех полуплоскостей дает область возможных решений (ОВР).

  3. Из этой области выделяем область допустимых решений (ОДР), т.е. пересечение области допустимых решений и первой четверти, где и . Таким образом, находим ОДР. Если ОДР пуста, то задача линейного программирования решений не имеет.

  4. Строим вектор-градиент целевой функции , равный .

  5. Строим линию уровня , перпендикулярно вектору градиенту ( k- константа).

  6. Передвигая линию уровня в направлении вектора , находим точку «входа» в ОДР – это точка минимума, и точку «выхода» из ОДР – это точка максимума.

  7. Определяем координаты точки минимума или максимума (в зависимости от условия задачи) аналитически и вычисляем значение целевой функции в этой точке.

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

Решение:

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

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

0

-2

2

0

0

2

-3

0

0

1

2

0

-

прямая параллельна оси

Построив прямые, определяем полуплоскости, определяемые данными неравенствами.

Т.к. первая прямая не проходит через начало координат, то подставим координаты точки О(0;0) в первое неравенство, получим , (верно), следовательно, первое неравенство определяет полуплоскость, лежащую ниже прямой (1).

Т.к. вторая прямая не проходит через начало координат, то подставим координаты точки О(0;0) во второе неравенство, получим , (верно), следовательно, второе неравенство определяет полуплоскость, лежащую выше прямой (2).

Рис. 1.

Т.к. третья прямая не проходит через начало координат, то подставим координаты точки О(0;0) в третье неравенство, получим , (не верно), следовательно, третье неравенство определяет полуплоскость, лежащую выше прямой (3).

Четвертое неравенство определяет полуплоскость, лежащую ниже прямой (4).

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

Строим вектор градиент .

Строим линию уровня перпендикулярно вектору .

По условию задачи нужно найти максимум и минимум функции Z. Передвигая линию уровня параллельно самой себе в направлении возрастания вектора градиента, находим точку «входа» в ОДР- это точка . Найденная точка является точкой минимума. Найдем координаты точки аналитически. Эта точка является пересечением прямых (3) и . Решим систему:

Следовательно, . Вычислим значение целевой функции в этой точке. .

Аналогично, находим точку «выхода» из ОДР- это точка . Найденная точка является точкой максимума.

Найдем координаты точки аналитически. Эта точка является пересечением прямых (2) и (4). Решим систему:

Следовательно, . Вычислим значение целевой функции в этой точке. .

Ответ: , .

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

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

  2. Далее исходную задачу надо записать в канонической форме, если она не имеет такой формы записи. Для этого каждое ограничение  неравенство вида надо превратить в равенство добавлением дополнительной неотрицательной (балансовой) переменной, а каждое ограничение  неравенство вида превратить в равенство вычитанием балансовой переменной. Таким образом, все ограничения в задаче будут уравнения с неотрицательными правыми частями.

  3. Далее систему уравнений при помощи симплексных преобразований надо привести к единичному базису, т.е. найти исходное опорное решение .

  4. Для того, чтобы проверить будет ли это решение оптимальным, надо составить оценочную строку (  строку) по следующему правилу: , где

 искомый элемент Z  строки;

 столбец коэффициентов целевой функции при базисных переменных;

 столбец коэффициентов при неизвестном ;

 столбец свободных членов;

 скалярное произведение указанных столбцов – векторов;

 коэффициент целевой функции при неизвестном

  1. Для задачи на максимум.

Если в Z  строке все элементы положительные , то найдено оптимальное решение . Если же в Z  строке есть хоть один отрицательный элемент, то найденное решение не оптимально. Есть возможность его улучшения. Для этого среди отрицательных элементов Z  строки находим минимальный (например, ). Столбец с номером p становится разрешающим. Разрешающую строку выбираем по симплексным преобразованиям (для этого в симплексной таблице заводится последний столбец). В столбце с номером p в качестве разрешающего элемента берется положительный элемент, если он один. Если в этом столбце положительных элементов несколько, то берется тот из них, для которого отношение свободных членов к этим положительным элементам будет наименьшее. Если в столбце с номером p вообще нет положительных элементов, то задача не имеет оптимального решения и . После того, как разрешающий элемент найден, производим расчеты по методу Гаусса, включая и элементы Z  строки. Получаем новое опорное решение. После этого возвращаемся к началу пункта 5.

  1. Для задачи на минимум. Если в Z  строке все элементы , то найдено оптимальное решение . Если же в Z  строке есть хоть один положительный элемент, то найденное решение не оптимально. Для улучшения решения среди положительных элементов  строки находим максимальный (например, ). Столбец с номером q становится разрешающим. Разрешающую строку ищем по симплексным преобразованиям (смотреть задачу на максимум.) Если в столбце с номером q нет положительных элементов, то задача не имеет оптимального решения и . После того, как разрешающий элемент выбран, выполняем расчеты по методу Гаусса, включая и элементы  строки, и получаем новое опорное решение. Переходим к началу пункта 6. Процесс продолжается до тех пор, пока не будет найдено оптимальное решение или мы не убедимся, что его нет.

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

Решение:

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

Составляем симплекс таблицу.

базис

7

-5

10

0

0

0

0

12

2

-2

3

1

0

0

0

2

-1

1

-1

0

1

0

2:1=2 – min

0

24

2

1

2

0

0

1

24:1=24

0

-7

5

-10

0

0

0

16

0

0

1

1

2

0

2

-1

1

-1

0

1

0

22

3

0

3

0

-1

1

-10

-2

0

-5

0

-5

0

Так как есть исходное опорное решение, то составляем оценочную строку по следующему правилу: .

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

Далее вычисления производим по методу Жордана-Гаусса.

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

Ответ: , .

Задание 4. Решить транспортную задачу.

Транспортная задача - это задача о перевозке некоторого груза от m поставщиков к n потребителям. Обычно условия транспортной задачи задаются в таблице.

А\В

……

……..

…….

……

…….

…….

…….

…….

…….

…….

В этой таблице:

- запас груза у поставщика ;

- потребность в грузе у потребителя ;

- стоимость перевозки единицы груза от поставщика к потребителю (тариф перевозки).

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

Рассмотрим решение закрытой модели транспортной задачи.

1. Как и при решении ЗЛП симплексным методом, определение оптимального плана транспортной задачи начинают с нахождения исходного опорного плана. Этот план наиболее рационально находить методом минимального элемента (существуют и другие методы его нахождения). Для этого в таблице тарифов выбираем минимальный (например ) и в клетку, которая ему соответствует, помещаем наименьшее из чисел и . Затем из рассмотрения исключаем либо строку, соответствующую поставщику, запасы которого полностью израсходованы; либо столбец, соответствующий потребителю, потребности которого полностью удовлетворены. Так на каждом шаге исключается либо один поставщик, либо один потребитель. При этом если клетка подлежит заполнению, но запасы равны нулю, то на этом шаге в соответствующую клетку заносится базисный нуль (0*). Из оставшейся части таблицы снова выбираем минимальный тариф и т.д. до тех пор, пока все запасы не будут распределены, потребители удовлетворены. Если минимальных элементов несколько, то выбираем ту клетку, которой соответствует наибольшая перевозка. Таким образом, находим исходный опорный план. Этот опорный план должен содержать занятую клетку.

2. Для проверки найденного плана на оптимальность используется метод потенциалов.

2.1. Для «занятых» клеток составляем систему уравнений , где

- потенциалы поставщиков, - потенциалы потребителей. Получаем

линейных уравнений с неизвестными. Такая система имеет

множество решений. Чтобы найти любое из них, надо одной из переменных

дать произвольное значение (например ). Находим значения остальных

потенциалов.

2.2. Для «свободных» клеток находим числа . Если все ,

то найденный опорный план будет оптимальным. Если есть хотя бы один

, то найденное решение не оптимально. Среди всех положительных

находим одно максимальное (например, ) и делаем перераспределение

поставок груза относительно свободной клетки . Если среди всех

положительных имеется несколько одинаковых максимальных, то

выбираем любое.

Перераспределение поставок в таблице условий транспортной задачи производится по циклу.

Цикл – это цепь, многоугольник, все вершины которого находятся в занятых клетках, углы прямые, число вершин четное. После того, как цикл пересчета построен, в вершинах цикла, начиная со свободной клетки , ставим поочередно «+» и «–». Далее в «–» клетках находим минимальный груз , который прибавляем к грузам в «+» клетках и отнимаем от грузов в «–» клетках. Таким образом, свободная клетка становится занятой с грузом, а одна занятая клетка освобождается. Общее число занятых клеток в новом опорном плане должно сохраняться, т.е. .

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

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

– пункты поставки груза,

– пункты потребления,

– тарифы.

Решение.

По условию задачи составим таблицу:

6

11

20

17

8

12

1

25

3

18

17

17

9

39

16

30

31

18

23

15

4

3

28

13

10

8

12

14

16

1. Найдем суммарный запас и суммарные потребности:

, .

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

2. Находим исходный опорный план методом минимального элемента. Число занятых клеток должно равняться: .

6

11

2 0

1 7

8

12

1 2

1

10

2 5

3

7

1 8

1 7

17

9

39

8

16

5

30

1

31

4

1 8

23

1 5

4

3

13

2 8

13

10

8

1 2

14

16

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

И т.д. до тех пор, пока все запасы не будут распределены, потребители удовлетворены.

3. Проверяем найденный план на оптимальность методом потенциалов:

3.1. Для «занятых» клеток составляем уравнения :

3.2. Для «свободных» клеток находим :

Строим в таблице цикл пересчета относительно клетки (3,1). Он пойдет следующим образом (3,1) (2,1) (2,3) (3,3).

Расставляем знаки «+» и «–» в вершинах цикла, начиная с клетки (3,1). В «–» клетках ищем минимальный груз .Этот груз прибавляем к грузам в «+» клетках и отнимаем от грузов в «–» клетках. Получаем новый план перевозок:

6

11

20

17

8

12

12

1

5

25

3

12

18

1 7

17

9

5

39

8

16

30

1

31

4

18

23

15

4

3

13

28

13

10

8

12

14

16

4. Проверяем найденный план на оптимальность методом потенциалов:

4.1. Для «занятых» клеток:

4.2. Для «свободных» клеток:

Строим в таблице цикл пересчета относительно клетки (2,5). Он пойдет следующим образом (2,5) (2,1) (3,1) (3,5).

Расставляем знаки «+» и «–» в вершинах цикла, начиная с клетки (2,5). В «–» клетках ищем минимальный груз .Этот груз прибавляем к грузам в «+» клетках и отнимаем от грузов в «–» клетках. Получаем новый план перевозок:

6

1 1

20

17

8

12

12

1

1

25

3

12

18

17

4

17

9

9

39

8

16

30

1

31

18

23

15

4

3

13

28

13

10

8

12

14

16

5. Проверяем найденный план на оптимальность:

5.1. Для «занятых» клеток:

5.2. Для «свободных» клеток:

Строим в таблице цикл пересчета относительно клетки (1,2). Он пойдет следующим образом (1,2) (1,5) (2,5) (2,1) (3,1) (3,2).

Расставляем знаки «+» и «–» в вершинах цикла, начиная с клетки (1,2). В «–» клетках ищем минимальный груз .Этот груз прибавляем к грузам в «+» клетках и отнимаем от грузов в «–» клетках. Получаем новый план перевозок:

6

1 1

1

20

17

8

11

12

1

25

3

12

18

17

5

17

9

10

39

7

1 6

30

1

31

18

23

15

4

3

13

28

13

10

8

12

14

16

6. Проверяем найденный план на оптимальность:

6.1. Для «занятых» клеток:

6.2. Для «свободных» клеток:

Строим в таблице цикл пересчета относительно клетки (3,3). Он пойдет следующим образом (3,3) (2,3) (2,5) (1,5) (1,2) (3,2).

Расставляем знаки «+» и «–» в вершинах цикла, начиная с клетки (3,3). В «–» клетках ищем минимальный груз .Этот груз прибавляем к грузам в «+» клетках и отнимаем от грузов в «–» клетках. Получаем новый план перевозок:

6

11

8

20

17

8

4

12

1

25

3

5

18

17

12

17

9

10

39

7

16

30

1

31

18

23

15

4

3

13

28

13

10

8

12

14

16

7. Проверяем найденный план на оптимальность:

7.1. Для «занятых» клеток:

7.2. Для «свободных» клеток:

Так как все , найденный план является оптимальным.

8. Найдем минимальную стоимость перевозок

Ответ: