Рефераты. Аппроксимация p> 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; at =array[1..mmax+1,1..nmax+1] of real; vec1it =array[1..nmax] of integer; vec2it =array[1..mmax] of integer; vec1rt =array[1..nmax] of real; vec2rt =array[1..mmax] of real; var fi, fo:text; implementation end.

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

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


|N/N |Назначение |Обозначение |Тип |
|1. |Управляющий вектор |k1 |ki1t |
|2. |Число ограничений |m |intege|
| | | |r |
|3. |Число переменных |n |intege|
| | | |r |
|4. |Матрица коэффициентов |a |at |
|5. |Вектор номеров свободных переменных |i1 |vec1it|
|6. |Отслеживающий вектор основных |p1 |vec1it|
| |переменных прямой задачи | | |
|7. |Отслеживающий вектор вспомогательных|q1 |vec1it|
| |переменных двойственной задачи | | |
|8. |Отслеживающий вектор вспомогательных|p2 |vec2it|
| |переменных прямой задачи | | |
|9. |Отслеживающий вектор основных |q2 |vec2it|
| |переменных двойственной задачи | | |
|10. |Разрешающая строка |r |intege|
| | | |r |
|11. |Разрешающий столбец |s |intege|
| | | |r |
|12. |Вектор-решение прямой задачи |x |vec1rt|
|13. |Вектор-решение двойственной задачи |u |vec2rt|

4.2 Укрупненная блок-схема задачи линейного программирования.

[pic]

5.2 Параметры и заголовки процедур задачи линейного программирования.

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

m,n,r,s:integer;{числовые переменные целого типа}

Процедуры программы:

|N/N |Назначение |Заголовок |
|1. |Ввод и контроль исходных |input(var k1:k1t; var |
| |данных и вывод их в файл |m,n:integer; var a:at, var |
| |результатов |i1:vec1it; var p1,q1:vec1it; |
| | |var p2,q2:vec2it) |
|2. |Исключение свободных |issp(var k1:k1t; m,n:integer; |
| |переменных |var a:at; var i1,p1,q1:vec1it;|
| | |var p2,q2: vec2it) |
|3. |Исключение нуль-уравнений |isnu(var k1:k1t; m,n:integer; |
| | |var a:at; var p1,q1:vec1it; |
| | |var p2,q2: vec2it) |
|4. |Поиск опорного решения |opor(m,n:integer; var a:at; |
| | |var p1,q1:vec1it; var p2,q2: |
| | |vec2it) |
|5. |Поиск оптимального решения |optim(m,n:integer; var a:at; |
| | |var p1,q1:vec1it; var p2,q2: |
| | |vec2it) |
|6. |Вывод решения прямой задачи|outp(m,n:integer; var a:at; |
| | |var p2: vec2it; x:vec1rt) |
|7. |Вывод решения двойственной |outd(m,n:integer; var a:at; |
| |задачи |var q1: vec1it; u:vec2rt) |
|8. |МЖИ |mji ( m,n:integer; var a:at; |
| | |r,s:integer) |
|9. |Поиск разрешающей строки |nstro(m,n:integer; var a:at; |
| | |r,s:integer var p2:vec2it) |

6.2 Блок-схема и параметры реализованной процедуры.

Обращащение: isnu(k1,m,n,a,p1,q1,p2,q2). Используются модули typesm, mjim.

Параметры подпрограммы isnu:

|Наименование |Обозначение |
|Число ограничений |m |
|Число переменных |n |
|Матрица задачи |a |
|Отслеживающие векторы |p1, q1, p2, q2 |

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

7.2 Листинг модуля, исходных данных и результатов машинного расчета.

unit isnum; interface uses typesm,mjim; procedure isnu(var k1:k1t;m,n:integer; var a:at; var p1,q1:vec1it; var p2,q2:vec2it); implementation procedure isnu; var p:real;k,s,r,j,t:integer; begin for r:=1 to k do begin if p2[r]0 then begin if abs(a[r,j])>p then begin p:=abs(a[r,j]);s:=j;end; end;end; if p=0 then begin writeln(fo,'Исключить r',r:6,'-ое нуль-уравнение нельзя'); close(fi);close(fo);halt end; mji(m,n,a,r,s); p2[r]:=p1[s];p1[s]:=-1; t:=q2[r];q2[r]:=q1[s];q1[s]:=t; end; end.

Исходный файл simp.dat:

12
Исключение нуль-уравнений
Моносов ЭОУС-1-2 преподаватель Марьямов А. Г.
12.05.98
2 2 0
5 3
-2 -1 1 -2
1 -1 0 -1
-1 -1 0 -2
0 1 0 2
2 1 0 4
4 4 0 0
1 2

Файл результатов simp.res:

МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ СТРОИТЕЛЬНЫЙ УНИВЕРСИТЕТ
КАФЕДРА ИНФОРМАТИКИ И ПРИКЛАДНОЙ МАТЕМАТИКИ
Лабораторная работа по информатике
Факультет ЭОУС, 2-ой семестр обучения

Решение задачи линейного программирования
Вариант 12 модуль: Исключение нуль-уравнений
Исполнил студент Моносов ЭОУС-1-2 преподаватель Марьямов А. Г.
Дата исполнения: 12.05.98
Управляющий вектор:
2 2 0
Число ограничений: 5
Число переменных: 3
Матрица задачи
Н-р Коэффициенты Св. члены строки

1 -2.00000 -1.00000 1.00000 -2.00000

2 1.00000 -1.00000 0.00000 -1.00000

3 -1.00000 -1.00000 0.00000 -2.00000

4 0.00000 1.00000 0.00000 2.00000

5 2.00000 1.00000 0.00000 4.00000

6 4.00000 4.00000 0.00000 0.00000
Вектор номеров свободных переменных:
1 2
Вектор решения прямой задачи:

1.00000 2.00000 3.00000
Значение целевой функции прямой задачи= 12.00000
Вектор решения двойственной задачи:

0.00000 4.00000 0.00000 8.00000 0.00000
Значение целевой функции двойственной задачи= 12.00000

8.2 Ручной расчет задачи линейного программирования.

Требуется максимизировать функцию

z=4x1+5x2

при ограничениях:

-2x1-x2+x3=-2 x1-x2( -1

- x1 - x2 ( -2

0x1+ 1x2 ( 2

2x1 + 1x2 ( 4 x3 ( 0

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

| |-x1 |-x2 |-x3 |1 |
|0= |-2 |-1 |1 |-2 |
|y2= |1 |-1 |0 |-1 |
|y3= |-1 |-1 |0 |-2 |
|y4= |0 |1 |0 |2 |
|y5= |2 |1 |0 |4 |
|z= |-4 |-4 |0 |0 |

| |-x1 |-y4 |-x3 |1 |
|0= |-2 |1 |1 |0 |
|y2= |1 |1 |0 |1 |
|y3= |-1 |1 |0 |0 |
|*x2= |0 |1 |0 |2 |
|y5= |2 |-1 |0 |2 |
|z= |-4 |4 |0 |8 |

| |-y2 |-y4 |-x3 |1 |
|0= |-2 |3 |1 |2 |
|*x1= |1 |1 |0 |1 |
|y3= |-1 |2 |0 |0 |
|*x2= |0 |1 |0 |2 |
|y5= |2 |-3 |0 |0 |
|z= |4 |8 |0 |12 |

После этого следует исключить нуль-уравнение:

| | | |* | |
| |-y2 |-y4 |-y1 |1 |
|x3= |-2 |3 |1 |2 |
|*x1= |1 |1 |0 |1 |
|y3= |-1 |2 |0 |0 |
|*x2= |0 |1 |0 |2 |
|y5= |2 |-3 |0 |0 |
|z= |4 |8 |0 |12 |

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

| | |u2= |u4= |u1= |w= |
| | |-y2 |-y4 |-y1 |1 |
|v3= |x3= |-2 |3 |1 |2 |
|v1= |x1= |1 |1 |0 |1 |
|u3= |y3= |-1 |2 |0 |0 |
|v2= |x2= |0 |1 |0 |2 |
|u5= |y5= |2 |-3 |0 |0 |
|1 |z= |4 |8 |0 |12 |

В итоге получаем следующие результаты:

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

x1=1; x2=2; x3=2.

2. Двойственная задача. Переменные двойственной задачи, находящиеся сверху таблицы равны 0, а сбоку - соответствующим коэфициентам целевой функции:

u1=0; u2=4; u3=0; u4=8; u5=0.

Значение целевых функций обеих задач zmax= wmin=12.

9.2 Выводы.

Полученные результаты при ручном расчёте совпадают с данными машинного счёта. Это подтверждает правильность составления алгоритма и написания программы.

Список использованной литературы.

. Турчак Л. И. "Основы численных методов".

. Марьямов А. Г. "Применение модульного способа програмирования в среде

Turbo Pascal 7.0 с целью решения полной задачи линейного программирования".

-----------------------

C1j=C1j+Ri

Bj=Bj+Ri*Yi

C1j=0, Bj=0

Ri=1

Ввод n, m, X, Y

Y0 Y1 . . . Yn

Y

X

X0 X1 . . . Xn

Ri=Ri*Xi

Ci+1, j=Ci, j+1

Ci+1, m+1=0

Ci+1, m+1=Ci+1, m+1 +Rj

Rj=Rj*Xj

Решение системы линейных уравнений Gauss(m+1,C,B,A)

Zi=0

Zi=Zi*Xi+Aj

Zi=Zi*Yi

K

Вывод A, Z

i=1

i=n

j=1

j=m+1

Расчет первой строки матрицы С и вектора В

i=1

i=n

i=1

i=n

i=1

i=m

j=1

j=m

j=1

j=n

j=1 j=n

i=1

i=n

j=m+1

j=1

шаг=-1

Расчет остальных строк матрицы С

(1)

(1')

(2)

(2')

(3)

(3')

(4)

{

{

{

p1(|p2r|)=-1

p2r0

|arj|>p

p=|arj| s=j

P=0

MJI(m,n,a,r,s)

p2r=p1s p1s=-1 t=q2r q2r=q1s q1s=t

B

"Искл. r-ое нуль-ур. Нельзя"

Закрыть файлы

К

r=1

r=k

да

нет

j=1

j=n

нет

нет

да

да

да

нет

=


Страницы: 1, 2, 3



2012 © Все права защищены
При использовании материалов активная ссылка на источник обязательна.