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

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

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



? невiд'СФмнi, то

система несумiсна:}Self. CurOutConsole<>Nil then. CurOutConsole. Lines. Add (sc_CurProcName+sc_DoubleSpot+sc_Space+_NoVals);

. WasNoRoots:=True;. WriteTableToGrid (HeadColNum, HeadRowNum, True);:=True; Exit;;

{Якщо вiд'СФмний коефiцiСФнт у рядку обрано, шукаСФмо МНВ

(мiнiмальне невiд'СФмне серед вiдношень вiльних членiв до членiв

стовпця, у якому обрали цей коефiцiСФнт):}(CurColNum, HiNoIndepRow, Length (Self. CurHeadCol) - 2,N, False);CurRow2N<0 then {Якщо МНВ не знайдено:}. WriteTableToGrid (HeadColNum, HeadRowNum, True);:=False; Exit;;

{Якщо МНВ знайдено:}. CurGridSolveCol:=CurColNum + HeadColNum+bc_LTaskColsBeforeVars;. CurGridSolveRow:=CurRow2N + HeadRowNum+bc_LTaskRowsBeforeVars;

(HeadColNum, HeadRowNum);Self. Stop then Goto LStopLabel;

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

CurRow2N<>CurRowNum then {Якщо виключили не цей рядок:}. Continue; {продовжуСФмо працювати з цим рядком}; {If Self. CurTable [CurRowNum, Length (Self. CurHeadRow) - 1]<0 thenтАж}(CurRowNum);; {While CurRowNum<=(Length (Self. CurHeadCol) - 2) doтАж}

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

{ХоваСФмо розв'язувальну комiрку у екраннiй таблицi:}. CurGridSolveCol:=0; Self. CurGridSolveRow:=0;(HeadColNum, HeadRowNum); {вiдмiчаСФмо новий крок}Self. Stop then Goto LStopLabel;

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

{############## ШукаСФмо оптимальний розв'язок задачi: ##############}:=0;CurColNum<=(Length (Self. CurHeadRow) - 2) do:=False;

{Якщо знайшли вiд'СФмний коефiцiСФнт у рядку функцiСЧ мети:}CurTable [Length(Self. CurHeadCol) - 1, CurColNum]<0 then

{ШукаСФмо МНВ (мiнiмальне невiд'СФмне серед вiдношень вiльних членiв

до членiв стовпця, у якому обрали цей коефiцiСФнт) серед усiх рядкiв

умов, окрiм рядкiв вiльних змiнних i рядка функцiСЧ мети:}(CurColNum, HiNoIndepRow, Length (Self. CurHeadCol) - 2,N, False);CurRow2NNil then. CurOutConsole. Lines. Add (sc_CurProcName+sc_DoubleSpot+sc_Space+_UnlimitedFunc);

. WasManyRoots:=True;. WriteTableToGrid (HeadColNum, HeadRowNum, True);:=True; Exit;;

{Якщо МНВ знайдено:}. CurGridSolveCol:=CurColNum + HeadColNum+bc_LTaskColsBeforeVars;. CurGridSolveRow:=CurRow2N + HeadRowNum+bc_LTaskRowsBeforeVars;

(HeadColNum, HeadRowNum);Self. Stop then Goto LStopLabel;

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

:=0; {пiсля виключення могли з'явитися новi вiд'СФмнi комiрки}. Continue;;

Not(ColDeleted) then Inc(CurColNum);;

{Якщо назва функцiСЧ мети вказана зi знаком -, то це протилежна

функцiя мети. Змiнимо знаки у СЧСЧ рядку, i отримаСФмо шукану

мiнiмiзацiю функцiСЧ:}:=Length (Self. CurHeadCol) - 1;ValSign (Self. CurHeadCol[CurRowNum])=bc_Negative then(CurRowNum);. CurHeadCol[CurRowNum].ElmType:=bc_DestFuncToMin;;

Self. CurOutConsole<>Nil then. CurOutConsole. Lines. Add (sc_CurProcName+sc_DoubleSpot+sc_Space+_ValFound);

. ShowLTaskResultCalc(DualTaskVals);

. SolWasFound:=True;:=True;

{ХоваСФмо розв'язувальну комiрку у екраннiй таблицi:}. CurGridSolveCol:=0; Self. CurGridSolveRow:=0;(HeadColNum, HeadRowNum);

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

. CurGridSolveCol:=0; Self. CurGridSolveRow:=0;

:=False;;;

TGridFormattingProcs. EditLineEqsOnNewRow (Sender: TObject;: array of Integer);

{ПiдтримуСФ форматування стовпця нумерацiСЧ таблицi у такому виглядi:

тАж}CurNum: Integer; CurGrid:TStringGrid;Sender=Nil then Exit;

{Якщо до вмикання форматування був якийсь обробник подiСЧ, запускаСФмо його:}@Self. OldOnNewRow<>Nil then Self. OldOnNewRow (Sender, NewRows);

Sender is TStringGrid then:=TStringGrid(Sender);CurNum:=0 to Length(NewRows) - 1 do

{Нумерацiя з третього рядка, бо два перших - заголовки:}NewRows[CurNum]>=(Self.CHeadRowNum+1) then. Cells [0, NewRows[CurNum]]:=IntToStr (NewRows[CurNum]-.CHeadRowNum);;;;;TGridFormattingProcs. EditLineEqsOnNewCol (Sender: TObject;: array of Integer);

{ПiдтримуСФ форматування рядка нумерацiСЧ та рядка-заголовка таблицi у

такому виглядi:

2 3 4 5тАж n n+1x2 x3 x4 x5тАж xn 1

}CurNum: Integer; CurGrid:TStringGrid;: String;Sender=Nil then Exit;

{Якщо до вмикання форматування був якийсь обробник подiСЧ, запускаСФмо його:}@Self. OldOnNewCol<>Nil then Self. OldOnNewCol (Sender, NewCols);

Sender is TStringGrid then:=TStringGrid(Sender);CurNum:=0 to Length(NewCols) - 1 do

{Заголовки лише для комiрок, якi можна редагувати:}NewCols[CurNum]>=(Self.CHeadColNum+1) then:=IntToStr (NewCols[CurNum] - Self.CHeadColNum);. Cells [NewCols[CurNum], 0]:=CurColNumStr;

{Останнiй стовпець - числа у правих частинах рiвнянь:}(NewCols[CurNum]+1)=CurGrid. ColCount then. Cells [NewCols[CurNum], 1]:=sc_RightSideValsHdr

{в усiх iнших - коефiцiСФнти при змiнних X1тАжXn:}. Cells [NewCols[CurNum], 1]:=sc_XVarName+CurColNumStr;;;

Length(NewCols)>0 then

{Якщо перед оновленими або новими стовпцями були iншi стовпцi, то

в останному з них оновлюСФмо пiдпис: тепер вiн буде з iменем змiнноСЧ

(xn), а не з iменем стовпця правих частин рiвнянь (a).

(Тут покладаСФмося на те, що номери оновлених стовпцiв сортованi

за зростанням):}NewCols[0]>(Self.CHeadColNum+1) then. Cells [NewCols[0] - 1, 1]:=sc_XVarName+IntToStr (NewCols[0]-

(Self.CHeadColNum+1));{Якщо нових стовпцiв немаСФ (тобто кiлькiсть стовпцiв зменшилася):}{ОновлюСФмо пiдпис останнього стовпця (правi частини рiвнянь):}. Cells [CurGrid. ColCount-1, 1]:=sc_RightSideValsHdr;;;;

TGridFormattingProcs. EditLineEqsOnDrawCell (Sender: TObject; ACol,: Integer; Rect: TRect; State: TGridDrawState);

{Процедура виконуСФться при малюваннi кожноСЧ комiрки StringGrid

у режимi набору вхiдних даних системи лiнiйних рiвнянь.

ЗафарбовуСФ в iнший колiр останнiй стовпець - стовпець

правих частин рiвнянь.}CurGrid:TStringGrid; SafeBrushColor:TColor;Sender=Nil then Exit;

{Якщо до вмикання форматування був якийсь обробник подiСЧ, запускаСФмо його:}@Self. OldOnDrawCell<>Nil then Self. OldOnDrawCell (Sender, ACol, ARow, Rect,);

Sender is TStringGrid then:=TStringGrid(Sender);:=CurGrid. Canvas. Brush. Color;

{Комiрки останнього стовпця СФ стовпцем правих сторiн рiвнянь.

ФарбуСФмо СЧх у блакитний колiр (окрiм комiрок заголовка):}(ACol>=(CurGrid. ColCount-bc_LineEqM2ColsAfterVars)) and

(Not (gdFixed in State)) then. Canvas. Brush. Color:=lwc_RightSideColColor;

{МалюСФмо текст на фонi з кольором Brush:}. Canvas. TextRect (Rect, Rect. Left, Rect. Top,. Cells [ACol, ARow]);;

. Canvas. Brush. Color:=SafeBrushColor;;;

TGridFormatt