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