a11u1 + a21u2 + … + am1um³ p1 |
…………………………….……………………. | ||||||
a1nu1 + a2nu2 + … + amnum³ pn | ||||||
ui³ 0, (i=1,…,m) |
a11x1 + a12x2 + … + a1nxn = b1 |
…………………………….……………………… |
ak+1, 1x1+ak+1, 2x2+…+ak+1, n xn£bk+1 | ||||||
…………………………….……………………… | ||||||
am1x1 + am2x2 + … + amnxn£ bm | ||||||
xj³ 0, (j=1,…,n) |
0 = a11 (-x1) + a12 (-x2) + … + a1n (-xn) + a1, n+1 |
…………………………………………………….……………………………………… |
yk+1 = ak+1, 1 (-x1) + ak+1, 2(-x2)+ … + ak+1, n(-xn) + ak+1, n+1 | ||||||
…………………………………………………….……………………………………… | ||||||
ym = am1 (-x1) + am2 (-x2) + … + amn(-xn) + am, n+1 | ||||||
Z= am+1, 1 (-x1) + am+1, 2(-x2)+ … + am+1, n(-xn) + am+1, n+1 |
-x1 | -x2 | -xn | 1 | ||
0 = | a11 | a12 | … | a1n | a1, n+1 |
…… | …………………………… | ……… | |||
0 = | .. | ak, n+1 | |||
yk+1 = | ak1 | ak2 | … | akn | ak+1, n+1 |
…… | ak+1, 1 | ak+1, 2 | … | ak+1, n | ……… |
ym = | …………………………… | ……… | |||
am1 | am2 | … | amn | am, n+1 | |
Z = | am+1, n | am+1, 2 | … | am+1, n | am+1, n+1 |
Номера свободных переменных запоминаются отдельно.
Совместим таблицу двойственной задачи с таблицей. 1 и получим таблицу. 2.
Прямая и двойственная задачи Таблица 2
v1 = | v2 = | vn = | W = | |||
-x1 | -x2 | -xn | 1 | |||
u1 | 0 = | a11 | a12 | … | a1n | a1, n+1 |
…… | ……………...……………… | ……… | ||||
uk | 0 = | ak1 | ak2 | … | akn | ak, n+1 |
uk+1 | yk+1 = | ak+1, 1 | ak+1, 2 | … | ak+1, n | ak+1, n+1 |
…… | …………………………… | ……… | ||||
um | ym = | am1 | am2 | … | amn | am, n+1 |
1 | Z = | am+1, n | am+1, 2 | … | am+1, n | am+1, n+1 |
vj - вспомогательные переменные двойственной задачи.
Тогда j-е ограничение из таблицы имеет вид:
vj = a1j u1 + a2j u2 + … + amj um + am+1, j ³ 0, если xj³ 0
Если переменная xj свободна, то ей соответствует ограничение-равенство двойственной задачи:
0=a1j u1 + a2j u2 + … + amj um + am+1, j
т.е. вместо vj фактически будет нуль.
Кроме того первые k переменных двойственной задачи свободны, а остальные несвободны.
Целевая функция двойственной задачи
W= a1, n+1 u1 + a2, n+1 u2 + … + am, n+1 um + am+1, n+1
Совмещение в одной таблице прямой и двойственной задачи неслучайно. Решая прямую задачу, мы получаем о дновременно решение двойственной задачи, причем
max Z = min W = am+1, n+1
Сделаем замену переменных в таблице 1 , перебросив вспомогательную переменную yr на верх таблицы со знаком минус, а основную пременную xs на бок таблицы (ars¹0). Это означает движение из вершины x=(0, …, 0) в другую вершину многогранника W по его ребру. Элемент аrs называется разрешающим, строка r - разрешающей строкой, столбец s - разрешающим столбцом. Такая замена переменных носит название модифицированных жордановых исключений (МЖИ). Элементы матрицы а, не принадлежащие разрешающему столбцу или разрешающей строке, назовем рядовыми.
2.2 Описание исходных данных и результатов решения задачи линейного программирования.
Обсудим исходные данные (текстовой файл simp.dat) и результаты решения задачи линейного программирования (текстовой файл simp.res). В начале файла simp.dat расположены, так называемые, представительские данные - строковые данные, каждое из которых распологается в файле с новой строки:
1. Строка с номером варианта,
2. Строка срусским названием модуля,
3. Строка с координатами студента (ФИО, факультет, курс, группа),
4. Строка с датой исполнения.
Далее следуют строки файла с числовыми исходными данными:
1. Управляющий вектор kl - отдельная строка состоящая из трёх чисел kl1 , kl2 , kl3:
kl1=0, если необходимо получить решение только прямой задачи.
kl1=1, если необходимо получить решение только двойственной задачи.
kl1=2, если необходимо получить решение обеих задач.
kl2=0, если нет свободных переменных, иначе kl2 равен числу этих нуль-уравнений.
2. Число ограничений и переменных (отдельная строка ввода).
3. Коэффициенты расширенной матрицы a, начиная с отдельной строки ввода.
4. Вектор номеров свободных переменных, если они есть, начиная с отдельной строки ввода.
Результаты решения зависят от значения kl .
Если kl1=0, то при благоприятном исходе это будет вектор оптимального решения прямой задачи и оптимальное значение целевой функции. При неблагоприятном исходе, это одно из сообщений: либо "Система ограничений несовместна", либо "Целевая функция неограничена".
Если kl2=1, то же для двойственной задачи.
Если kl2=2, то сначала выдается решение прямой, а потом двойственной задачи. При не благоприятном исходе сообщения справедливы только для прямой задачи (для двойственной аналогичные сообщения не выдаются). Результаты помещаются в файл simp.res.
3.2 Описание модуля типов.
Для задания типов и файловых переменных вводного и выводного текстовых файлов используется модуль типов unit typesm, структура которого приведена ниже
unit typesm;
interface
const
mmax=20; nmax=20; e=1e-5;
type
klt =array[1..3] of integer;