Багатокритерiальна задача лiнiйного програмування
Дипломная работа - Компьютеры, программирование
Другие дипломы по предмету Компьютеры, программирование
?у таблицi i вiдповiднiй комiрцi у стовпцi-заголовку.}CurColNum: Integer;CurColNum:=0 to Length (Self. CurHeadRow) - 1 do[CurRowNum, CurColNum]:=-CurTable [CurRowNum, CurColNum];(Self. CurHeadCol[CurRowNum]);;
TGridFormattingProcs. ChangeSignsInCol (CurColNum: Integer);
{Змiна знакiв у стовпцi таблицi i вiдповiднiй комiрцi у рядку-заголовку.}CurRowNum: Integer;CurRowNum:=0 to Length (Self. CurHeadCol) - 1 do[CurRowNum, CurColNum]:=-CurTable [CurRowNum, CurColNum];(Self. CurHeadRow[CurColNum]);;
TGridFormattingProcs. ShiftRowsUp (SHeadColElmTypes:THeadLineElmTypes;: Boolean=False):Integer;
{Функцiя перемiщуСФ рядки таблицi CurTable (разом iз вiдповiдними
комiрками у стовпцi-заголовку CurHeadCol) з заданими типами комiрок
стовпця-заголовка вгору.
Вхiднi данi:- множина типiв комiрок, що мають бути перемiщенi вгору
(у стовпцi-заголовку);- вмикач змiни позначок номера по порядку та
позначки розташування в таблицi як рядка чи стовпця.
Якщо рiвний True, то рядки при перемiщеннi змiнюють цi позначки
на позначки тих рядкiв, що були в тих мiiях, на якi рядки перемiщенi;. CurTable - таблиця коефiцiСФнтiв;. CurHeadCol - стовпець-заголовок.
Вихiднi данi:. CurTable i Self. CurHeadCol - таблиця коефiцiСФнтiв i
стовпець-заголовок з перенесеними вгору рядками i комiрками;
функцiя повертаСФ номер найвищого рядка iз тих, що не було задано
перемiщувати вгору (вище нього - тi, що перемiщенi вгору).}HiNotInSetRow, CurRowToUp, CurRowNum: Integer;
{Номер найвищого рядка, що не СФ в множинi тих, якi перемiщуються вгору.
Спочатку ставимо тут номер неiснуючого рядка:}:=-1;
{Йдемо по рядкам згори вниз:}CurRowNum:=0 to Length (Self. CurHeadCol) - 1 do{ШукаСФмо перший рядок з типом комiрки, що не маСФ перемiщуватися вгору:}Not (Self. CurHeadCol[CurRowNum].ElmType in SHeadColElmTypes) then:=CurRowNum;
{шукаСФмо найнижчий рядок, який портiбно перемiщувати вгору:}CurRowToUp:=Length (Self. CurHeadCol) - 1 downto CurRowNum+1 doSelf. CurHeadCol[CurRowToUp].ElmType in SHeadColElmTypes then Break;;
{Якщо таких рядкiв не знайдено, то усi вони вже вгорi:}CurRowToUp<=CurRowNum then Break{МiняСФмо мiiями рядок, що маСФ бути вгорi, i рядок, що не маСФ,
але розташований вище:}(Self. CurTable, Self. CurHeadCol, CurRowNum,, ToChangeInitPosNums);;;:=HiNotInSetRow;;
TGridFormattingProcs. ShiftRowsDown (:THeadLineElmTypes;: Boolean=False):Integer;
{Функцiя перемiщуСФ рядки таблицi CurTable (разом iз вiдповiдними
комiрками у стовпцi-заголовку CurHeadCol) з заданими типами комiрок
стовпця-заголовка вниз.
Вхiднi данi:- множина типiв комiрок, що мають бути перемiщенi вниз
(у стовпцi-заголовку);- вмикач змiни позначок номера по порядку та
позначки розташування в таблицi як рядка чи стовпця.
Якщо рiвний True, то рядки при перемiщеннi змiнюють цi позначки
на позначки тих рядкiв, що були в тих мiiях, на якi рядки перемiщенi;. CurTable - таблиця коефiцiСФнтiв;. CurHeadCol - стовпець-заголовок.
Вихiднi данi:. CurTable i Self. CurHeadCol - таблиця коефiцiСФнтiв i
стовпець-заголовок з перенесеними донизу рядками i комiрками;
функцiя повертаСФ номер найвищого рядка iз тих, що перемiщенi вниз
(вище нього - рядки тих типiв, що не було задано перемiщувати донизу).}AllOtherHeadTypes:THeadLineElmTypes;
{ОтримуСФмо протилежну множину типiв комiрок:}:=[bc_IndependentVar..bc_OtherType] - SHeadColElmTypes;
{ЗсуваСФмо рядки з усiма iншими типами вгору (i рядки з заданими
типами залишаються внизу):}:=Self. ShiftRowsUp (AllOtherHeadTypes, ToChangeInitPosNums);;
TGridFormattingProcs. SolveLTaskToMax (DualTaskVals: Boolean):Boolean;
{Вир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. РЗхнi
значення розмiщенi не на мiii стовпця в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шування);
Функцiя повертаСФ ознаку успiшностi вирiшування.}sc_CurProcName='SolveLTaskToMax';CurRowNum, CurRow2N, CurColNum: Integer;, HeadColNum: Integer;: Integer;, RowDeleted, AllExcluded, WasNothingToDo: Boolean;: String;
SearchMNNCellForCol (CurColNum: Integer;, EndRowNum: Integer;DRowNum: Integer; AllowNegatCellIfZero: Boolean=False);
{Пошук у стовпцi CurColNum комiрки з МНВ (мiнiмального невiд'СФмного
вiдношення вiльного члена до значення комiрки у стовпцi).- дозволити вiд'СФмне значення комiрки i при
нульовому вiльному членi.}CurRowNum, FoundRow: Integer; MNN, CurRelat:TWorkFloat;
{ШукаСФмо МНВ у заданому iнтервалi рядкiв:}:=-1; MNN:=-1;CurRowNum:=StartRowNum to EndRowNum do{Перевiрка виконання умов невiд'СФмного вiдношення:}(CurTable [CurRowNum, CurColNum]<>0) and
(AllowNegatCellIfZero or
(CurTable [CurRowNum, Length (Self. CurHeadRow) - 1]<>0) or
(CurTable [CurRowNum, CurColNum]>0)) and
((ValSign (CurTable[CurRowNum, Length (Self. CurHeadRow) - 1])*(CurTable[CurRowNum, CurColNum]))>=0) then:=CurTable [CurRowNum, Length (Self. CurHeadRow) - 1]/[CurRowNum, CurColNum];
{Якщо знайшли менше, або знайшли перше значення:}(CurRelat<MNN) or (FoundRow=-1) then:=CurRelat; FoundRow:=CurRowNum;;;;
(Self. CurOutConsole<>Nil) and (FoundRow<0) then. CurOutConsole. Lines. Add (sc_CurProcName+sc_NoMNN+sc_Space+(CurColNum+1)+sc_Space+sc_TriSpot);
:=FoundRow;;
LStopLabel;Self. TaskWidthNil then. CurOutConsole. Lines. Add (sc_CurProcName + sc_EmptyTable);:=False;;;:=Self.CHeadRowNum;:=Self.CHeadColNum;
Self. CurOutConsole<>Nil then. CurOutConsole. Lines. Add (sc_CurProcName + sc_StartSolving);. CurOutConsole. Lines. Add (sc_CurProcName + sc_ExcludingFreeVars);;
{############## ВиключаСФмо незалежнi змiннi: ##############}:=0;:=True; AllExcluded:=True;:=0;CurColNum<(Length (Self. CurHeadRow) - 1) do {усi стовпцi окрiм останнього}:=False;
{Координати розв'я