Главная | Обратная связь | Поможем написать вашу работу!
МегаЛекции

Графическое представление полученных результатов

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

x1 + 5x2 £ 10;

3x1 + 2x2 £ 12;

2x1 + 4x2 £ 10.

x1 ³ 0; x2 ³ 0.

1). x1 + 5x2 £ 10;

 x1 = 0, x2 = 2;

 x1 = 10, x2 = 0.

2). 3x1 + 2x2 £ 12;

 x1 = 0, x2 = 6;

 x1 = 4, x2 = 0.

3). 2x1 + 4x2 £ 10;

 x1 = 0, x2 = 2.5;

 x1 = 5, x2 = 0.

4). Найдём экстремум функции:

 F = 2x1 + 3x2 ,

ВЫВОДЫ И РЕКОМЕНДАЦИИ ПО ПРАКТИЧЕСКОМУ ИСПОЛЬЗОВАНИЮ

 

Составление математической модели и решение систем линейных неравенств часто имеет место в реальной жизни. Примеры таких задач:

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

Пример 2. Группа истребителей поднимается в воздух для перехвата одиночного самолёта противника. Цель операции - сбить самолёт. Показатель эффективности - вероятность поражения цели.

Пример 3. Ремонтная мастерская занимается обслуживанием машин; её рентабельность определяется количеством машин, обслуженных в течение дня. Показатель эффективности - среднее число машин, обслуженных за день.

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

Пример 5. Предпринемается ряд мер по повышения надёжности электронной цифровой вычислительной техники (ЭЦВТ). Цель операции - уменьшить частоту появления неисправностей (“сбоев”) ЭЦВТ, или, что равносильно, увеличить средний промежуток времени между сдоями (“наработку на отказ”). Показатель эффективности - среднее время безотказной работы ЭЦВТ.

Пример 6. Проводится борьба за экономию средств при производстве определённого вида товара. Показатель эффективности - количество сыкономленных средств.

С помощью анализа модели на чувствительность определить параметр, от которого результат зависит больше и решить, каким способом возможно увеличение эффективности и на сколько, а так же многое другое.

 

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

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

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

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

 

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

 

 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 Мб.

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

 

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

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

Входные данные вносятся в файл KURS 97.DAT в следующей очерёдности:

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

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

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

Полный текст программы 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

 

 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]) <= Epsilon then SimplexVector[j]:=0;

 end;

end;

 

function GetEnterVector: integer; { поиск вводимого вектора }

var

 i: integer;

 Min: real;

begin

 GetEnterVector:=1;

 Min:=SimplexVector[1];

 for i:=2 to m+n do

 if Min > SimplexVector[i]

 then

 

 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;

 

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

 

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;

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.

Поделиться:





Воспользуйтесь поиском по сайту:



©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...