Багатокритер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шування

(