Рефераты. Использование табличного симплекс-метода для решения задач линейного программирования для оптимизации экономических задач p> - 23 -

ПРИЛОЖЕНИЕ

- 24 -

СОДЕРЖАНИЕ

ВВЕДЕНИЕ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . . . . . . . 25
1. НАЗНАЧЕНИЕ ПРОГРАММЫ. . . . . . . . . . . . . . . . . . . . . . . . . .
. . 26
2. УСЛОВИЯ ПРИМЕНЕНИЯ . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . 26

1.1 Ограничения и область применения . . . . . . . . . . . . . . . .
. . . . . 6

1.2 Требования к техническим средствам . . . . . . . . . . . . . . .
. . . . . 7
3. ВХОДНЫЕ И ВЫХОДНЫЕ ДАННЫЕ . . . . . . . . . . . . . . . . . . . . . .
5
4. ИНСТРУКЦИЯ ПОЛЬЗОВАТЕЛЮ . . . . . . . . . . . . . . . . . . . . . . . .
. 11
5. ТЕКСТ ИСХОДНОГО МОДУЛЯ . . . . . . . . . . . . . . . . . . . . . . . . .
. . 11
6. ОПИСАНИЕ ЛОГИКИ СТРУКТУРНОЙ СХЕМЫ . . . . . . . . . . . . 11
7. ТЕСТОВЫЙ ПРИМЕР. . . . . . . . . . . . . . . . . . . . . . . . . . . . .
. . . . . . . . 25

- 25 -

ВВЕДЕНИЕ

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

- 26 -

1. НАЗНАЧЕНИЕ ПРОГРАММЫ

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

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

- 27 -

2. УСЛОВИЯ ПРИМЕНЕНИЯ

1.1 Ограничения и область применения

Из программных средств требуется операционная система MS DOS версии 5.0, программная Среда NORTON COMMANDER, язык программирования
Borland Pascal 7.0 . Кроме того НГМД должен содержать файлы в директории
KURSOVIK:

1. Файл входных данных - KURS97.DAT

2. Программный файл - KURS97.EXE

1.2 Требования к техническим средствам

IBM PC или IBM PC - совместимый компьютер с дисководом 3.25” ёмкостью
1.2 Мб.

- 28 -

3. ВХОДНЫЕ И ВЫХОДНЫЕ ДАННЫЕ

Входные и выходные данные заносятся в файлы KURS97.DAT и KURS97.RES соответственно. Входные данные записываются в определённом порядке.
Выходные данные записываются в виде симплекс-таблиц.

- 29 -

4. ИНСТРУКЦИЯ ПОЛЬЗОВАТЕЛЮ

Входные данные вносятся в файл KURS 97.DAT в следующей очерёдности : сначача вводятся коэффициенты при неизвестных в целевой функции, затем вводятся элементы вектора ограничений, а потом - элементы матрицы ограничений по столбцам.

Результаты вычислений вы найдёте в файле KURS 97.REZ.

- 30 -

5. ТЕКСТ ИСХОДНОГО МОДУЛЯ

Полный текст программы KURS97.PAS выглядит следующим образом :

. program Kurs97;

uses crt;

const n = 2; m = 3;

Epsilon = 0.000001;

var

VectorA : array [1..m, 0..m+n] of real;

TargetVector : array [1..m+n] of real;

SimplexVector : array [0..m+n] of real;

DigitOfBasisVector : array [1..m] of real;

BasisVector : array [1..m] of integer;

IndexOfEnterVector : integer;

IndexOfOutputString : integer;

MinimumBuffer : real;

key : char;

FileOfOutput : text;

{ Описание процедур }

procedure ReadDates; { считывание данных из файла } var

DateFile : text;

procedure ReadDatesTargetVector; { считывание данных целевого вектора
} var i : integer; begin for i:=1 to n do Readln(DateFile, TargetVector[i]); end;

procedure ReadDatesVectorA; { считывание вектора А и заполнение единицами диагонали} var i,j : integer; begin for j:=0 to n do for i:=1 to m do

Readln(DateFile, VectorA[i, j]); i:=1; for j:=n+1 to n+m do

- 31 -

begin

VectorA[i, j]:=1; inc(i) end; end;

procedure ReadDatesBasisVector; var i : integer; begin for i:=1 to m do BasisVector[i]:=n+i; end;

begin

Assign(DateFile, 'kurs97.dat');

Reset(DateFile);

ReadDatesTargetVector;

ReadDatesVectorA;

ReadDatesBasisVector;

Close(DateFile); end;

procedure CountSimplexVector; { расчет симплек-вектора } var i,j : integer;

Summa : real;

Simplex : real; begin

SimplexVector[0]:=0; for i:=1 to m do

SimplexVector[0]:=SimplexVector[0] +
DigitOfBasisVector[i]*VectorA[i, 0]; for j:=1 to m+n do begin

Summa:=0; for i:=1 to m do Summa:=Summa + DigitOfBasisVector[i]*VectorA[i, j];

SimplexVector[j]:=Summa - TargetVector[j]; if abs(SimplexVector[j]) SimplexVector[i] then

- 32 -

begin

GetEnterVector:=i;

Min:=SimplexVector[i]; end; end;

function GetOutputString : integer; { поиск выводимой строки } var i : integer;

Temp : real; begin

GetOutputString:=1; if VectorA[1, IndexOfEnterVector] > 0 then MinimumBuffer:=VectorA[1,
0] / VectorA[1, IndexOfEnterVector]; for i:=2 to m do begin

Temp:=VectorA[i, 0] / VectorA[i, IndexOfEnterVector]; if Temp > 0 then if MinimumBuffer >= Temp then begin

MinimumBuffer:=Temp;

GetOutputString:=i; end; end; end;

procedure ReCountOutputString; { пересчет коэффициентов выводимой строки } var i,j : integer;

Buffer : real;

procedure ReCountDigitOfBasisVector; begin

DigitOfBasisVector[IndexOfOutputString]:=TargetVector[IndexOfEnterVector]; end;

procedure ReCountBasisVector; begin

BasisVector[IndexOfOutputString]:=IndexOfEnterVector; end;

begin

ReCountDigitOfBasisVector;

ReCountBasisVector;

Buffer:=VectorA[IndexOfOutputString, IndexOfEnterVector]; for i:=0 to m+n do begin

VectorA[IndexOfOutputString, i]:=VectorA[IndexOfOutputString, i] /
Buffer; end; end;

- 33 -

procedure ReCountVectorA; var i,j : integer; begin for j:=0 to m+n do begin for i:=1 to m do begin if i IndexOfOutputString then if j IndexOfEnterVector then VectorA[i, j]:=VectorA[i, j] - VectorA[i,
IndexOfEnterVector]*VectorA[IndexOfOutputString, j]; end; end; for i:=1 to m do if i IndexOfOutputString then VectorA[i, IndexOfEnterVector]:=0; end;

function AllIsPositiv : boolean; var i : integer; begin

AllIsPositiv:=True; for i:=1 to m+n do if SimplexVector[i] < 0 then AllIsPositiv:=False; end;

function ToStr(const D : real) : string; var S : string; begin str(D:6:2, S);

ToStr:=' ' + S + ' '; end;

procedure WriteMatrixs;

procedure WriteTargetMatrix; var i : integer; begin writeln(' +---------------------------------------
--------------+'); write (' ¦ Target ¦'); for i:=1 to n+m do write(ToStr(TargetVector[i]),'¦'); writeln; end;

procedure WriteMatrixA; var i,j : integer; begin writeln(' +-----------------+--------+--------+--------+--------+---
-----+--------¦'); writeln(' ¦ Basis ¦ D.Basis¦ A 0 ¦ A 1 ¦ A 2 ¦ A 3 ¦
A 4 ¦ A 5 ¦'); writeln(' +--------+--------+--------+--------+--------+--------+---
-----+--------¦'); for i:=1 to m do

- 34 -

begin write(' ¦ A ',BasisVector[i],'
¦',ToStr(DigitOfBasisVector[i]),'¦'); for j:=0 to m+n do write(ToStr(VectorA[i, j]),'¦'); writeln; if i = m then writeln(' +--------+--------+--------+--------+-----
---+--------+--------+--------¦') else writeln(' +--------+--------+--------+--------+-----
---+--------+--------+--------¦'); end; end;

procedure WriteMatrixSimplex; var i : integer; begin write(' ¦ Simplex¦'); for i:=0 to m+n do write(ToStr(SimplexVector[i]),'¦'); writeln; writeln(' +------------------------------------------------
--------------+'); end;

begin clrscr;

WriteTargetMatrix;

WriteMatrixA;

WriteMatrixSimplex; end;

procedure WriteMatrixsInFile;

procedure WriteTargetMatrix; var i : integer; begin writeln(FileOfOutput, ' +-------------------------
----------------------------+'); write (FileOfOutput, ' ¦ Target ¦'); for i:=1 to n+m do write(FileOfOutput, ToStr(TargetVector[i]),'¦'); writeln(FileOfOutput); end;

procedure WriteMatrixA; var i,j : integer; begin writeln(FileOfOutput, ' +-----------------+--------+--------+-------
-+--------+--------+--------¦'); writeln(FileOfOutput, ' ¦ Basis ¦ D.Basis¦ A 0 ¦ A 1 ¦ A 2
¦ A 3 ¦ A 4 ¦ A 5 ¦'); writeln(FileOfOutput, ' +--------+--------+--------+--------+-------
-+--------+--------+--------¦'); for i:=1 to m do begin write(FileOfOutput, ' ¦ A ',BasisVector[i],'
¦',ToStr(DigitOfBasisVector[i]),'¦'); for j:=0 to m+n do write(FileOfOutput, ToStr(VectorA[i, j]),'¦'); writeln(FileOfOutput); if i = m then writeln(FileOfOutput, ' +--------+--------+--------
+--------+--------+--------+--------+--------¦') else writeln(FileOfOutput, ' +--------+--------+--------
+--------+--------+--------+--------+--------¦'); end; end;

- 35 -

procedure WriteMatrixSimplex; var i : integer; begin write(FileOfOutput, ' ¦ Simplex¦'); for i:=0 to m+n do write(FileOfOutput,
ToStr(SimplexVector[i]),'¦'); writeln(FileOfOutput); writeln(FileOfOutput, ' +----------------------------------
----------------------------+'); end;

begin clrscr;

WriteTargetMatrix;

WriteMatrixA;

WriteMatrixSimplex; end;

{ Головная программа }

BEGIN

ClrScr;

ReadDates;

Assign(FileOfOutput, 'kurs97.res');

Rewrite(FileOfOutput);

CountSimplexVector;

WriteMatrixs; while not AllIsPositiv do begin

IndexOfEnterVector:=GetEnterVector;

IndexOfOutputString:=GetOutputString;

ReCountOutputString;

ReCountVectorA;

CountSimplexVector;

WriteMatrixsInFile;

WriteMatrixs; if key=#0 then key:=readkey; key:=#0; end;

Close(FileOfOutput);

END.

- 36 -

6. ОПИСАНИЕ ЛОГИКИ СТРУКТУРНОЙ СХЕМЫ

В программе реализованны следующие процедуры :

1. Процедура ReadDates - считывает данные из файла.

2. Процедура ReadDatesTargetVector - считывает коэффициенты при неизвестных в целевой функции из файла.

3. Процедура ReadDatesVector - считывание их входного файла матрицы А и заполнение диагональной матрицы.

4. Процедура CountSimplexVector - рассчёт симплекс-разностей.

5. Процедура GetEnterVector - поиск вводимого в базис столбца.

6. Процедура GetOutputString - поиск выводимой из базиса строки.

7. Процедура ReCountOutputString- пересчёе выводимой строки.

8. Процедура ReCountVectorA - пересчёт остальной матрицы ограничений.

9. Процедуры WriteMatrixA, WriteTargetMatrix, WriteMatrixSimplex - печать результирующих таблиц на экран и в файл.

- 37 -

7. ТЕСТОВЫЙ ПРИМЕР

Тестовый пример программы KURS 97.EXE представлен на рисунке 2 в виде исходной и результирующих симплекс-таблиц данного задания.

- 39 -

ЛИТЕРАТУРА

1. ЕСПД ГОСТ 19.105-78, 19.104-78.
2. ЕСПД ГОСТ 19.502-78.
3. Венцель Е.С. Исследование операций.-М.:Советское радио. 1972 г.
4. Дектярев Ю.И. Исследование операций.-М.:Высшая школа. 1986 г.
5. Зайченко Ю.П. Исследование операций.-К.:Вища школа. 1979 г.
6. Зайченко Ю.П., Шумиллова С.А. Исследование операций ( сборник задач ).-
К.:Вища школа. 1990 г.



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



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