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