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