Багатокритер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;

{Координати розв'я