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

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

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



; {рядок функцiСЧ мети}ToMax thenCol:=0 to CurWidth-2 do {коефiцiСФнти функцiСЧ мети мiняють знаки:}. CurTable [Row, Col]:=-Self. CurTable [Row, Col];{Якщо треба знайти мiнiмум:}{Множимо вiльний член функцiСЧ мети на -1:}. CurTable [Row, CurWidth-1]:=-Self. CurTable [Row, CurWidth-1];

{Назва функцiСЧ теж мiняСФ знак:}(Self. CurHeadCol[Row]);

{Тепер це протилежна функцiя для максимiзацiСЧ:}. CurHeadCol[Row].ElmType:=bc_DestFuncToMax;;:=True;;

TGridFormattingProcs. PrepareDestFuncInMultiDFuncLTask (, MinDestFuncRowNum: Integer):Boolean;

{ГотуСФ таблицю для розв'язування задачi ЛП вiдносно одноСЧ заданоСЧ функцiСЧ

мети iз багатокритерiальноСЧ задачi.

Вхiднi данi:- номер рядка у таблицi Self. CopyTable (i комiрки у

стовпцi-заголовку Self. CopyHeadCol), в якому записана портiбна

функцiя мети;- номер найвищого (з найменшим номером) рядка

функцiСЧ мети. Усi функцiСЧ мети мають бути зiбранi внизу таблицi;. CopyTable - таблиця коефiцiСФнтiв та вiльних членiв;. CopyHeadRow - рядок-заголовок зi змiнними та одиницею-множником

стовпця вiльних членiв (маСФ бути останнiм);. CopyHeadCol - стовпець-заголовок з iменами функцiй-нерiвностей,

нулями (заголовки рядкiв-рiвнянь), iменами функцiй мети

(що максимiзуються (тип комiрки bc_DestFuncToMax) або мiнiмiзуються

(тип bc_DestFuncToMin)).

Вихiднi данi:

Умова для одноСЧ функцiСЧ:. CurTable - таблиця коефiцiСФнтiв та вiльних членiв з одною

функцiСФю мети в останньому рядку, для максимiзацiСЧ симплекс-методом;. CurHeadRow - рядок-заголовок;. CurHeadCol - стовпець-заголовок з 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СФю мети.}Row, Col, CurWidth, CurHeight: Integer;sc_CurProcName='PrepareDestFuncInMultiDFuncLTask';LStopLabel;Not (Self. GoToEnd) then{ДемонструСФмо функцiю мети у таблицi, з якою будемо працювати:}

{Таблиця багатокритерiальноСЧ задачi для вiдображення:}. CurHeadRow:=Self. CopyHeadRow; Self. CurHeadCol:=Self. CopyHeadCol;. CurTable:=Self. CopyTable;

{Координати рядка функцiСЧ для помiтки його кольором:}. CurGridSolveCol:=Self.CHeadColNum;. CurGridSolveRow:=SFuncRowNum+Self.CHeadRowNum+bc_LTaskRowsBeforeVars;

{ВiдображаСФмо i чекаСФмо реакцiСЧ користувача:}(Self.CHeadColNum, Self.CHeadRowNum);Self. Stop then Goto LStopLabel;;

:=Length (Self. CopyHeadRow);:=Length (Self. CopyHeadCol);

(SFuncRowNum<0) or (MinDestFuncRowNum<0) or

(SFuncRowNum>=CurHeight) or (MinDestFuncRowNum>=CurHeight) thenSelf. CurOutConsole<>Nil then. CurOutConsole. Lines. Add (sc_CurProcName+sc_RowNumsIsOutOfTable);:=False; Exit;;

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

копiСЧ умови багатокритерiальноСЧ задачi:}

{КопiюСФмо заголовки i таблицю коефiцiСФнтiв:}(Self. CurHeadRow, CurWidth); {довжина для рядка заголовка така сама}Col:=0 to CurWidth-1 do Self. CurHeadRow[Col]:=Self. CopyHeadRow[Col];

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

та нерiвностей) i один рядок функцiСЧ мети:}(Self. CurHeadCol, MinDestFuncRowNum+1);(Self. CurTable, MinDestFuncRowNum+1, CurWidth);Row:=0 to MinDestFuncRowNum-1 do {копiюСФмо рядки умов:}. CurHeadCol[Row]:=Self. CopyHeadCol[Row];Col:=0 to CurWidth-1 do. CurTable [Row, Col]:=Self. CopyTable [Row, Col];;

{В останнiй рядок таблицi однокритерiальноСЧ задачi копiюСФмо заданий

рядок функцiСЧ мети iз багатокритерiальноСЧ задачi:}:=MinDestFuncRowNum; {номер останнього рядка у однокритерiальнiй задачi}. CurHeadCol[Row]:=Self. CopyHeadCol[SFuncRowNum];Col:=0 to CurWidth-1 do. CurTable [Row, Col]:=Self. CopyTable [SFuncRowNum, Col];

:=Self. PrepareDFuncForSimplexMaximize;;::=False; Exit;;

TGridFormattingProcs. ShowLTaskResultCalc (DualTaskVals: Boolean);

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

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

розв'язку. ВiдображаСФ значення цих змiнних, функцiй-нерiвностей, i

функцiСЧ мети в Self. CurOutConsole.

Вхiднi данi:- вмикач режиму вiдображення значень двоСЧстоСЧ задачi:

читаються значення змiнних i функцiй двоСЧстоСЧ задачi. РЗхнi

значення розмiщенi не на мiii стовпця вiльних членiв, а у рядку

коефiцiСФнтiв функцiСЧ мети (функцiСЧ мети прямоСЧ задачi). Вони СФ

значеннями змiнних чи функцiй, iмена яких у рядку-заголовку.

Змiннi чи функцiСЧ-нерiвностi двоСЧстоСЧ задачi з iменами у

стовпцi-заголовку СФ рiвними нулю.

Таблиця розв'язаноСЧ однокритерiальноСЧ (з одною функцiСФю мети) задачi:. CurTable - таблиця коефiцiСФнтiв та вiльних членiв;. CurHeadRow - рядок-заголовок з iменами змiнних, iменами

функцiй-нерiвностей (що перейшли в рядок-заголовок) та

одиницею-множником стовпця вiльних членiв (маСФ бути останнiм);. CurHeadCol - стовпець-заголовок з iменами функцiй-нерiвностей,

iменами змiнних (виключених), iменем функцiСЧ мети.}DestFuncsTypes=[bc_DestFuncToMax, bc_DestFuncToMin];st1: String; CurColNum, CurRowNum, LastColNum, LastRowNum: Integer;Self. CurOutConsole<>Nil then:=Length (Self. CurHeadRow) - 1;:=Length (Self. CurHeadCol) - 1;

:=sc_ResultIs;DualTaskVals then:=st1+sc_ForDualTaskst1:=st1+sc_ForDirectTask;

. CurOutConsole. Lines. Add(st1);. CurOutConsole. Lines. Add (sc_InHeadRow);

{ПоказуСФмо значення змiнних (або функцiй) у рядку-заголовку:}CurColNum:=0 to LastColNum-1 do:='';Self. CurHeadRow[CurColNum].ElmType=bc_Number then:=st1+FloatToStr (Self. CurHeadRow[CurColNum].AsNumber)st1:=st1+Self. CurHeadRow[CurColNum].AsVarName;:=st1 + sc_Space+sc_Equal+sc_Space;

{Усi змiннi прямоСЧ задачi (або функцiСЧ) у рядку-заголовку в точцi

задачi рiвнi нулю, а змiннi двоСЧстоСЧ - у рядку коефiцiСФнтiв функцiСЧ

мети:}DualTaskVals then:=st1+ FloatToStr (Self. CurTable [LastRowNum, CurColNum])st1:=st1+'0';:=st1+sc_KrKm;

. CurOutConsole. Lines. Add(st1);;. CurOutConsole. Lines. Add (sc_InHeadCol);

CurRowNum:=0 to LastRowNum do:='';Self. CurHeadCol[CurRowNum].ElmType=bc_Number then:=st1+FloatToStr (Self. CurHeadCol[CurRowNum].AsNumber)st1:=st1+Self. CurHeadCol[CurRowNum].AsVarName;:=st1 + sc_Space+sc_Equal+sc_Space;

{Усi змiннi прямоСЧ задачi (