Багатокритерiальна задача лiнiйного програмування
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
?динат рядка-заголовка та стовпця заголовка (верхнього лiвого кута
таблицi з заголовками): HeadColNumInGrid i HeadRowNumInGrid:}ReadHeadRowCell (SCol: Integer);
{ЗчитуСФ комiрку з екранноСЧ таблицi в стовпець-заголовок.
Вхiднi данi:- номер комiрки у стовпцi-заголовку.
Для екранноСЧ таблицi використовуються координати комiрки вiдповiдно до
координат рядка-заголовка та стовпця заголовка (верхнього лiвого кута
таблицi з заголовками): HeadColNumInGrid i HeadRowNumInGrid:}ReadHeadColCell (SRow: Integer);
{Процедура для зчитування таблицi та СЧСЧ заголовкiв iз CurGrid:}ReadTableFromGrid: Boolean;
{Процедура для вiдображення таблицi та СЧСЧ заголовкiв у CurGrid:}WriteTableToGrid (SHeadColNum, SHeadRowNum: Integer;: Boolean=True):Boolean;
{Визначення розмiрiв таблицi задачi, i корегування довжини
заголовкiв таблицi та зовнiшнього масиву таблицi (масиву масивiв):}GetTaskSizes (Var DWidth, DHeight: Integer);
{Жорданове виключення за заданим розв'язувальним елементом матрицi:}GI (RozElmCol, RozElmRow: Integer;SDHeadRow, SDHeadCol:TValOrNameMas; Var SDMatrix:TFloatMatrix;DColDeleted: Boolean; ToDoMGI: Boolean=False;: Boolean=True):Boolean;
{Вiдображення таблицi, обробка вiконних подiй доки користувач не
скомандуСФ наступний крок (якщо користувач не скомандував вирiшувати
до кiнця):}WaitForNewStep (HeadColNum, HeadRowNum: Integer);
{Пошук ненульовоСЧ розв'язувальноСЧ комiрки для вирiшування системи
рiвнянь (починаючи з комiрки [CurRowNum, CurColNum]):}SearchNozeroSolveCell (CurRowNum,, MaxRow, MaxCol: Integer;, HeadColNum: Integer;: Boolean=True):Boolean;
{Змiна знакiв у рядку таблицi i вiдповiднiй комiрцi у
стовпцi-заголовку:}ChangeSignsInRow (CurRowNum: Integer);
{Змiна знакiв у стовпцi таблицi i вiдповiднiй комiрцi у
рядку-заголовку:}ChangeSignsInCol (CurColNum: Integer);
{Функцiя перемiщуСФ рядки таблицi CurTable (разом iз вiдповiдними
комiрками у стовпцi-заголовку CurHeadCol) з заданими типами комiрок
стовпця-заголовка вгору.
ПовертаСФ номер найвищого рядка iз тих, що не було задано
перемiщувати вгору (вище нього - тi, що перемiщенi вгору):}ShiftRowsUp (SHeadColElmTypes:THeadLineElmTypes;: Boolean=False):Integer;
{Аналогiчна до ShiftRowsUp, але перемiщуСФ вниз.
ПовертаСФ номер найвищого рядка iз тих, що перемiщенi вниз (вище
нього - рядки тих типiв, що не було задано перемiщувати донизу):}ShiftRowsDown (:THeadLineElmTypes;: Boolean=False):Integer;
{Вирiшування системи лiнiйних рiвнянь способом 1:}SolveEqsWithM1: Boolean;
{Вирiшування системи лiнiйних рiвнянь способом 2:}SolveEqsWithM2: Boolean;
{Вирiшування задачi максимiзацiСЧ лiнiйноСЧ форми (що мiстить
умови-нерiвностi, рiвняння та умови на невiд'СФмнiсть окремих
змiнних i одну функцiю мети, для якоСЧ треба знайти максимальне
значення):}SolveLTaskToMax (DualTaskVals: Boolean):Boolean;
PrepareDFuncForSimplexMaximize: Boolean;
PrepareDestFuncInMultiDFuncLTask (SFuncRowNum,: Integer):Boolean;
{Процедура зчитуСФ значення функцiСЧ мети у таблицi розв'язаноСЧ
однокритерiальноСЧ задачi, i значення усiх змiнних або функцiй
в цьому розв'язку. ВiдображаСФ значення цих змiнних,
функцiй-нерiвностей, i функцiСЧ мети в Self. CurOutConsole:}ShowLTaskResultCalc (DualTaskVals: Boolean);
{Процедура зчитуСФ значення функцiСЧ мети у таблицi розв'язаноСЧ
однокритерiальноСЧ задачi, i значення усiх змiнних або функцiй в
цьому розв'язку:}ReadCurFuncSolution (Var SDValVecs:TFloatMatrix;SDDestFuncVals:TFloatArr; SVecRow: Integer;: Boolean; DualTaskVals: Boolean);BuildPaymentTaskOfOptim (SOptimXVecs:TFloatMatrix; Const SOptimFuncVals:TFloatArr;: Integer);
CalcComprVec (Const SVarVecs:TFloatMatrix;SWeightCoefs:TFloatArr; Var DComprVec:TFloatArr);
CalcDFuncVal (Const SVarVec:TFloatArr;: Integer):TWorkFloat;
{Вирiшування задачi багатокритерiальноСЧ оптимiзацiСЧ лiнiйноСЧ
форми з використанням теоретико-iгрового пiдходу.
Умовою задачi СФ умови-нерiвностi, рiвняння та умови на
невiд'СФмнiсть окремих змiнних, i декiлька функцiй мети, для
яких треба знайти якомога бiльшi чи меншi значення.
Функцiя повертаСФ ознаку успiшностi вирiшування:}SolveMultiCritLTask: Boolean;
{Процедури для змiни позицiювання таблицi з заголовками у
екраннiй таблицi CurGrid. Працюють лише у режимi fs_FreeEdit:}SetHeadColNum (Value: Integer);SetHeadRowNum (Value: Integer);
{Прапорцi для керування кроками вирiшування:- продовжити на один крок;- при продовженнi йти всi кроки до кiнця вирiшування без
вiдображення таблицi на кожному кроцi;- припинити вирiшування.
Для керування прапорцi можуть встановлюватися iншими потоками
програми, або i тим самим потоком (коли процедури даного класу
викликають Application. ProcessMessages):}, GoToEnd, Stop: Boolean;
{Властивiсть для керуання станом форматування:}TableFormatState:TTableFormatState read CurFormatStateSetNewState default fs_NoFormatting;
{Прапорець про те, що зараз задача у ходi вирiшування
(мiж кроками вирiшування):}Solving: Boolean read InSolving;
SolutionFound: Boolean read SolWasFound;NoRoots: Boolean read WasNoRoots;ManyRoots: Boolean read WasManyRoots;
{Властивiсть для задавання екранноСЧ таблицi:}StringGrid:TGrowingStringGrid read CurGrid write SetNewGridNil;
{Поле для вiдображення повiдомлень:}MemoForOutput:TMemo read CurOutConsole write SetNewMemoNil;
{Номери стовпця i рядка-заголовкiв у CurGrid. Змiнювати можна
тiльки у режимi fs_FreeEdit. В iнших режимах змiна iгноруСФться:}HeadColNumInGrid: Integer read CHeadColNum write SetHeadColNum;HeadRowNumInGrid: Integer read CHeadRowNum write SetHeadRowNum;
{Таблиця i СЧСЧ заголовки у пам'ятi:}Table:TFloatMatrix read CurTable;HeadRow:TValOrNameMas read CurHeadRow;HeadCol:TValOrNameMas read CurHeadCol;
{Читання i запис таблицi та режиму редагування у файл
(тiльки у режимах редагування):}ReadFromFile (Const SPath: String):Boolean;SaveToFile (Const SPath: String):Boolean;
{Процедури для читання i змiни таблицi i СЧСЧ заголовкiв.
Не рекомендуСФться застосовувати пiд час вирiшування
(