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

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

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



для помiток для змiнних}=array of TByteArr;

{Стани об'СФкта форматування таблицi у GrowingStringGrid:}=(fs_EnteringEqs, fs_EnteringLTask, fs_SolvingEqsM1,_SolvingEqsM2, fs_SolvingLTask,_NoFormatting, fs_FreeEdit);

{Тип переходу до двоСЧстоСЧ задач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нiмiзацiСЧ

виходять рiзнiтАж}=(dt_MaxToMin, dt_MinToMax);

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

роботи з нею у потрiбному форматi, а також для вирiшування

задач ЛП i вiдображення промiжних чи кiнцевих результатiв у

такiй таблицi:}=class(TObject)

{Робочi масиви:}, CurHeadCol:TValOrNameMas; {заголовки таблицi}:TFloatMatrix; {таблиця}

{Масиви для зберiгання умови (використовуються для

багатокритерiальноСЧ задачi):}, CopyHeadCol:TValOrNameMas; {заголовки таблицi}:TFloatMatrix; {таблиця}

, SolWasFound, WasNoRoots, WasManyRoots,TaskPrepared, EqM2TaskPrepared, LTaskPrepared: Boolean;

{Прапорець про те, що вмiст CurGrid ще не був прочитаний

даним об'СФктом з часу останнього редагування його користуваем:}: Boolean;

{В режимах розв'язування (CurFormatState=fs_SolvingEqsM1,_SolvingEqsM2, fs_SolvingLTask)

координати розв'язувальноСЧ комiрки у GrowingStringGrid

(вiдносно екранноСЧ таблицi);

в режимах редагування (CurFormatState=fs_EnteringEqs, fs_EnteringLTask)

координати комiрки, для якоСЧ викликано контекстне меню

(вiдносно верхньоСЧ лiвоСЧ комiрки таблицi коефiцiСФнтiв (що маСФ

тут координати [0,0])):}, CurGridSolveRow: Integer;

{Номери стовпця i рядка-заголовкiв у CurGrid:}, CHeadRowNum: Integer;

{Режим форматування i редагування чи розв'язування задачi:}:TTableFormatState;

{Екранна таблиця для редагування чи вiдображення результатiв:}:TGrowingStringGrid;:TMemo; {поле для вiдображення повiдомлень}

{Адреси обробникiв подiй екранноСЧ таблицi CurGrid, якi цей

об'СФкт замiняСФ своСЧми власними:}:TNewColEvent;:TNewRowEvent;:TDrawCellEvent;:TNotifyEvent;:TMouseEvent;:TSetEditEvent;

{Процедура встановлюСФ довжину рядка-заголовка CurHeadRow вiдповiдно

до ширини екранноСЧ таблицi CurGrid i заповнюСФ новi елементи

значеннями за змовчуванням. ВикористовуСФться при змiнi розмiрiв

екранноСЧ таблицi. Пiсля СЧСЧ виклику можна вказувати типи змiнних

у рядку-заголовку (користувач вибираСФ залежнi та незалежнi):}UpdateLTaskHeadRowToStrGrid (SGrid:TStringGrid);

{Процедура для пiдтримки масиву стовпця-заголовка пiд час

редагування таблицi. ВстановлюСФ довжину масиву вiдповiдно до висоти

екранноСЧ таблицi i координат вписування в неСЧ таблицi задачi,

заповнюСФ новi комiрки значеннями за змовчуванням:}UpdateLTaskHeadColToStrGrid (SGrid:TStringGrid;: array of Integer);

{ФункцiСЧ для переходiв з одного режиму до iншого:}SetNewState (Value:TTableFormatState);PrepareToSolveEqsWithM1: Boolean;PrepareToSolveEqsWithM2: Boolean;PrepareToSolveLTask: Boolean;

SetNewGrid (Value:TGrowingStringGrid); {перехiд до нового CurGrid}SetNewMemo (Value:TMemo); {перехiд до нового CurOutConsole}

{Процедури форматування GrowingStringGrid для набору таблицi

лiнiйних рiвнянь:}EditLineEqsOnNewRow (Sender: TObject; NewRows: array of Integer);EditLineEqsOnNewCol (Sender: TObject; NewCols: array of Integer);EditLineEqsOnDrawCell (Sender: TObject; ACol, ARow: Integer;: TRect; State: TGridDrawState);

{Процедура форматування GrowingStringGrid вiдображення таблицi

у процесi розв'язання системи рiвнянь способом 1 i 2:}SolveLineEqsM1OrM2OnDrawCell (Sender: TObject;, ARow: Integer; Rect: TRect; State: TGridDrawState);

{Процедури форматування GrowingStringGrid для набору таблицi

задачi максимiзацiСЧ чи мiнiмiзацiСЧ лiнiйноСЧ форми (функцiСЧ з

умовами-нерiвностями чи рiвняннями):}EdLineTaskOnNewRow (Sender: TObject; NewRows: array of Integer);EdLineTaskOnNewCol (Sender: TObject; NewCols: array of Integer);EdLineTaskOnDrawCell (Sender: TObject; ACol, ARow: Integer;: TRect; State: TGridDrawState);EdLineTaskOnDblClick (Sender: TObject);

{Процедура реагуСФ на вiдпускання правоСЧ кнопки мишi на

комiрках рядка-заголовка та стовпця-заголовка таблицi.

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

типiв для цiСФСЧ комiрки:}EdLineTaskOnMouseUp (Sender: TObject;: TMouseButton; Shift: TShiftState; X, Y: Integer);

{Процедура перевiряСФ наявнiсть об'СФкта TPopupMenu. Якщо його немаСФ

(SGrid. PopupMenu=Nil), то створюСФ новий.

ВидаляСФ усi пунтки (елементи, теми) з меню:}InitGridPopupMenu (SGrid:TStringGrid);

{ДодаСФ пункт меню для вибору типу комiрки в таблицi з заданим

написом SCaption i кругом того кольору, що асоцiйований з даним

типом SAssocType. Для нового пункту меню настроюСФ виклик

процедури обробки комiрки для задавання СЧй обраного типу SAssocType.

Значення SAssocType записуСФ у поле Tag об'СФкта пункту меню:}AddCellTypeItemToMenu (SMenu:TPopupMenu;: String; IsCurrentItem: Boolean; SAssocType:THeadLineElmType;: Boolean=True);

{Обробник вибору пункту в меню типiв для комiрки

рядка - чи стовпця-заголовка.}ProcOnCellTypeSelInMenu (Sender: TObject);

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

таблиць у ходi вирiшення задачi, або з результатами. Лише

проставляють номери у першому стовпцю i першому рядку:}NumerationOnNewRow (Sender: TObject; NewRows: array of Integer);NumerationOnNewCol (Sender: TObject; NewCols: array of Integer);

{Процедура для реагування на редагування вмiсту комiрок

пiд час редагування вхiдних даних. ВстановлюСФ прапорець:=True про те, що екранна таблиця маСФ змiни:}ReactOnSetEditText (Sender: TObject; ACol, ARow: Longint;Value: string);

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

Вхiднi данi:- номер комiрки у рядку-заголовку.

Для екранноСЧ таблицi використовуються координати комiрки вiдповiдно до

коо