Багатокритерiальна задача лiнiйного програмування

Дипломная работа - Компьютеры, программирование

Другие дипломы по предмету Компьютеры, программирование



?'язувальноСЧ комiрки для вирiшування системи рiвнянь

або при вирiшуваннi задачi максимiзацiСЧ/мiнiмiзацiСЧ лiнiйноСЧ форми

симплекс-методом (починаючи з комiрки [CurRowNum, CurColNum]).}sc_CurProcName='SearchNozeroSolveCell';CurSearchRowNum, CurSearchColNum: Integer;: String;

{Якщо комiрка, що хотiли взяти розв'язувальною, рiвна нулю:}Self. CurTable [CurRowNum, CurColNum]=0 thenSelf. CurOutConsole<>Nil then. CurOutConsole. Lines. Add (sc_CurProcName+sc_ZeroKoef+

' ['+IntToStr (CurColNum+1)+'; '+IntToStr (CurRowNum+1)+']'+_SearchingOther);

:=MaxRow+1;

{ШукаСФмо ненульову комiрку в заданiй областi (або в одному

СЧСЧ стовпцi CurColNum, якщо ToSearchInRightColsToo=False):}CurSearchColNum:=CurColNum to MaxCol do

{ШукаСФмо ненульову комiрку знизу у тому ж стовпцю:}CurSearchRowNum:=CurRowNum+1 to MaxRow doSelf. CurTable [CurSearchRowNum, CurSearchColNum]<>0 then Break;;

{Якщо немаСФ ненульових, то змiнна вiльна:}CurSearchRowNum>MaxRow thenSelf. CurOutConsole<>Nil then:=sc_CurProcName+sc_AllKoefIsZeroForVar;Self. CurHeadRow[CurSearchColNum].ElmType=bc_Number then:=st1+sc_Space+(Self. CurHeadRow[CurSearchColNum].AsNumber)st1:=st1+sc_Space+_DoubleQuot+Self. CurHeadRow[CurSearchColNum].AsVarName+_DoubleQuot;

. CurOutConsole. Lines. Add(st1);;

{Якщо потрiбна комiрка тiльки у даному стовпцi (для даноСЧ змiнноСЧ),

то в iнших стовцях не шукаСФмо:}Not(ToSearchInRightColsToo) then Break; {For CurSearchColNumтАж}{Якщо знайдено ненульовий:}. WaitForNewStep (HeadColNum, HeadRowNum);

{Якщо дано команду перервати розв'язування:}Self. Stop then:=True; Exit;;

{Ставимо рядок iз знайденим ненульовим замiсть поточного:}(Self. CurTable, Self. CurHeadCol, CurRowNum,);

{Якщо знайдена комiрка у iншому стовпцi, то мiняСФмо мiiями стовпцi:}CurColNum<>CurSearchColNum then(Self. CurTable, Self. CurHeadRow, CurColNum,);

; {For CurSearchColNum:=CurColNum to MaxCol doтАж};; {For CurSearchColNum:=CurColNum to MaxCol doтАж}

{Якщо ненульову комiрку не знайдено:}(CurSearchColNum>MaxCol) or (CurSearchRowNum>MaxRow) thenSelf. CurOutConsole<>Nil then. CurOutConsole. Lines. Add (sc_CurProcName+sc_AllKoefIsZero);

:=False;; {задача не маСФ розв'язкiв, або маСФ СЧх безлiчтАж};; {If Self. CurTable [CurRowNum, CurColNum]=0 thenтАж}:=True;;

{Вирiшування системи лiнiйних рiвнянь способом 1:}TGridFormattingProcs. SolveEqsWithM1: Boolean;

{Для таблицi виду:x2 x3тАж xn

тАж}sc_CurProcName='SolveEqsWithM1';CurRowNum, CurColNum: Integer;: String;, HeadColNum: Integer;: Boolean;

ShowResultCalc;

{ВiдображаСФ записи про обчислення значень змiнних (у текстовому полi)

такого зказка:

;

тАж

;

РЖ пiдраховуСФ значення, якщо можливо:

;

тАж

Nil then. CurOutConsole. Lines. Add (sc_ResultIs+sc_DoubleSpot);

:=False;

CurRowN:=0 to Length (Self. CurHeadCol) - 1 do:=''; ValueAvail:=True; CurVal:=0;Self. CurOutConsole<>Nil then

{=тАж:}Self. CurHeadCol[CurRowN].ElmType=bc_Number then:=st2+FloatToStr (Self. CurHeadCol[CurRowN].AsNumber):=st2+Self. CurHeadCol[CurRowN].AsVarName;

:=st2;:=st1+sc_Space+sc_Equal+sc_Space; {=};

CurColN:=0 to Length (Self. CurHeadRow) - 1 do{(aij*:)Self. CurOutConsole<>Nil then:=st1+sc_BrOp+FloatToStr (Self. CurTable [CurRowN, CurColN])+sc_Mul;

{рядj:}Self. CurHeadRow[CurColN].ElmType=bc_Number thenSelf. CurOutConsole<>Nil then:=st1+FloatToStr (Self. CurHeadRow[CurColN].AsNumber);

ValueAvail then CurVal:=CurVal +. CurTable [CurRowN, CurColN]*Self. CurHeadRow[CurColN].AsNumber;Self. CurOutConsole(Length (Self. CurHeadRow) - 1) then:=st1+sc_Space+sc_Plus+sc_Space {+}st1:=st1+sc_KrKm; {;};;

Self. CurOutConsole<>Nil then. CurOutConsole. Lines. Add(st1);:=st2;;

ValueAvail then:=False;Self. CurHeadCol[CurRowN].ElmType=bc_Number thenSelf. CurHeadCol[CurRowN].AsNumber<>CurVal thenNoRoots:=True; NotEqual:=True; End;;

Self. CurOutConsole}st1:=st1+sc_Space+sc_Equal+sc_Space; {=}

:=st1+FloatToStr(CurVal)+sc_KrKm; {Nil then st1:=st1+sc_Space+sc_ValNotAvail;. WasManyRoots:=True;;

Self. CurOutConsole<>Nil then Self. CurOutConsole. Lines. Add(st1);;

NoRoots thenSelf. CurOutConsoleNil then. CurOutConsole. Lines. Add (sc_CurProcName + sc_EmptyTable);:=False;;;

:=Self.CHeadRowNum;:=Self.CHeadColNum;

If Self. CurOutConsole<>Nil then. CurOutConsole. Lines. Add (sc_CurProcName + sc_StartSolving);

:=0; {починаСФмо з першого рядка}

{Проходимо по усiх стовпцях (по усiх змiнних), намагаючись брати

розв'язувальнi комiрки по головнiй дiагоналi. Якщо серед таких зустрiнеться

нуль, спробуСФмо знайти ненульову комiрку нижче, i помiняти рядки нульовоСЧ

з ненульовою, щоб ненульова стала на головнiй дiагоналi:}:=0;(CurColNum<Length (Self. CurHeadRow)) and

(CurRowNum<Length (Self. CurHeadCol)) do

{Координати розв'язувальноСЧ комiрки для помiтки кольором в екраннiй

таблицi:}. CurGridSolveCol:=CurColNum+HeadColNum+bc_LTaskColsBeforeVars;. CurGridSolveRow:=CurRowNum+HeadRowNum+bc_LTaskRowsBeforeVars;

{ПеревiряСФмо, чи не СФ поточна комiрка нулем, i при потребi шукаСФмо

ненульову:}Not (Self. SearchNozeroSolveCell (CurRowNum, CurColNum,(Self. CurHeadCol) - 1, Length (Self. CurHeadRow) - 1,, HeadColNum)) then; {якщо не знайденотАж}Self. Stop then Goto LStopLabel;

(HeadColNum, HeadRowNum);

{Якщо дано команду перервати розв'язування:}Self. Stop then Goto LStopLabel;

:=False;

{ОбробляСФмо таблицю звичайним Жордановим виключенням:}Not (Self.GI (CurColNum, CurRowNum, Self. CurHeadRow, Self. CurHeadCol,. CurTable, ColDeleted, False, True)) then:=False;;;

{Переходимо до наступного рядка, так як у цьому вже виразили одну iз

змiнних:}(CurRowNum);Not(ColDeleted) then Inc(CurColNum);;

;

:=True;;

:Self. CurOutConsole<>Nil then. CurOutConsole. Lines. Add (sc_CurProcName + sc_SolvingStopped);

:=False;;;

{Вирiшування системи лiнiйних рiвнянь способом 2:}TGridFormattingProcs. SolveEqsWithM2: Boolean;

{Для таблицi виду:x2 x3тАж xn 1

тАж

}sc_CurProcName='SolveEqsWithM2';CurRowNum, CurColNum: Integer;: String;, HeadColNum: Integer;: Boolean;

ShowResultCalc;

{ВiдображаСФ записи значень змiнних (у текстовому полi)

такого зказка:

;

тАж

;

та вiдображаСФ повiдомлення про наявнiсть коренiв i СЧх визначенiсть.}CurRowN, CurColN: Integer;:TWorkFloat;, NoRoots, FreeRoots: Boolean;Self. CurOutConsole<>Nil then. CurOut