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

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

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



або функцiСЧ) у стовпцi-заголовку в точцi

задачi мають своСЧ значення у стовпцi вiльних членiв,

а змiннi двоСЧстоСЧ - рiвнi нулю:}(Self. CurHeadCol[CurRowNum].ElmType in DestFuncsTypes) or(DualTaskVals) then:=st1+ FloatToStr (Self. CurTable [CurRowNum, LastColNum])st1:=st1+'0';

(Self. CurHeadCol[CurRowNum].ElmType in DestFuncsTypes) then:=sc_ResFunc+sc_Space+st1;

CurRowNum=LastRowNum then st1:=st1+sc_Spotst1:=st1+sc_KrKm;

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

TGridFormattingProcs. ReadCurFuncSolution (Var SDValVecs:TFloatMatrix;SDDestFuncVals:TFloatArr; SVecRow: Integer;: Boolean; DualTaskVals: Boolean);

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

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

розв'язку.

Вхiднi данi:- номер поточноСЧ функцiСЧ мети (нумерацiя з нуля) у масивахi SDDestFuncVals;- перемикач: якщо рiвний False, то зчитуються значення

змiнних (i значення функцiСЧ мети); True - зчитуються значення

функцiй-нер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СЧ мети. Функцiя мети

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

(для цих двох останнiх масивiв пам'ять маСФ бути вже видiленою).

Вихiднi данi:- масив векторiв значень змiнних iз заповненим вектором

номер SVecRow. Змiннi, яких немаСФ в таблицi розв'язку, вважаються

такими що можуть мати будь-яке значення, i приймаються рiвними нулю;- масив значень функцiй мети з поточни значенням

у комiрцi номер SVecRow.}CurColNum, CurRowNum, LastColNum, LastRowNum: Integer;:THeadLineElmTypes;

{РЖнiцiюСФмо нулями поточний вектор значень.

Змiннi чи функцiСЧ, iмена яких у рядку-заголовку, рiвнi нулю

для прямоСЧ задачi (для двоСЧстоСЧ - у стовпцi-заголовку).

Змiннi i функцiСЧ, яких немаСФ в таблицi, теж вважаСФмо рiвними нулю:}CurColNum:=0 to Length (SDValVecs[SVecRow]) - 1 do[SVecRow, CurColNum]:=0;

{ЧитаСФмо стовпець-заголовок i значення iз останнього стовпця таблицi:}:=Length (Self. CurHeadRow) - 1;:=Length (Self. CurHeadCol) - 1;

{Значення функцiСЧ мети:}[SVecRow]:=Self. CurTable [LastRowNum, LastColNum];

{ФункцiСЧ-нерiвностi прямоСЧ задачi вiдповiдають змiнним двоСЧстоСЧ задачi

за позицiюванням в заголовках (не за значеннями, значення рiзнi!),

змiннi прямоСЧ - функцiям двоСЧстоСЧ:}(ToReadFuncVals) xor (DualTaskVals) then:=[bc_FuncVal]WorkCellTypes:=[bc_IndependentVar, bc_DependentVar];

{ЧитаСФмо змiннi або функцiСЧ-нерiвностi (в залежностi вiд того, що

задано прочитати):}DualTaskVals thenCurColNum:=0 to LastColNum-1 do {усi стовпцi крiм стовпця вiльних членiв}{значення записуСФмо у заданий вектор (SVecRow):}(Self. CurHeadRow[CurColNum].ElmType in WorkCellTypes) then[SVecRow, Self. CurHeadRow[CurColNum].VarInitPos]:=. CurTable [LastRowNum, CurColNum];CurRowNum:=0 to LastRowNum-1 do {усi рядки крiм рядка функцiСЧ мети}{значення записуСФмо у заданий вектор (SVecRow):}(Self. CurHeadCol[CurRowNum].ElmType in WorkCellTypes) then[SVecRow, Self. CurHeadCol[CurRowNum].VarInitPos]:=. CurTable [CurRowNum, LastColNum];;;

TGridFormattingProcs. BuildPaymentTaskOfOptim (SOptimXVecs:TFloatMatrix; Const SOptimFuncVals:TFloatArr;: Integer);

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

коефiцiСФнтiв i компромiсного вектора значень змiнних для

усiх заданих функцiй мети.

Вхiднi данi:- масив векторiв оптимальних значень змiнних для

кожноСЧ з фунуцiй мети;- масив оптимальних значень функцiй мети;- номер першоСЧ (найвищоСЧ) функцiСЧ мети

у Self. CopyTable i Self. CopyHeadCol;. CopyTable - матриця коефiцiСФнтiв умови багатокритерiальноСЧ задачi;

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

Однокритерiальна задача ЛП для максимiзацiСЧ:. CurTable - матриця коефiцiСФнтiв оптимальностi,

вiльних членiв i коефiцiСФнтiв функцiСЧ мети;. CurHeadCol - iмена змiнних двоСЧстоСЧ задачi (як

функцiСЧ-нерiвностi прямоСЧ задачi);. CurHeadRow - iмена функцiй-нерiвностей двоСЧстоСЧ задачi

(як залежнi (тiльки бiльше нуля) змiннi прямоСЧ задачi).}jCol, iRow, FuncCount, FuncRow: Integer; MinQ, CurQ:TWorkFloat;sc_CurProcName='BuildPaymentTaskOfOptim';CalcQ (ZjFuncRow: Integer; Const XiVals:TFloatArr;ZjXj:TWorkFloat):TWorkFloat;

{ПiдраховуСФ мiру неоптимальностi.

Вхiднi данi:- номер рядка j-оСЧ функцiСЧ мети у таблицi Self. CopyTable;. CopyTable - таблиця коефiцiСФнтiв умови багатокритерiальноСЧ

задачi ЛП;- оптимальнi значення змiнних для i-оСЧ функцiСЧ мети

(для формування i-го рядка матрицi неоптимальностi);- значення j-оСЧ функцiСЧ мети за j-го набору оптимальних

значень змiнних (тобто оптимальне значення цiСФСЧ функцiСЧ). Для

формування j-го стовпця матрицi неоптимальностi.

Вихiднi данi: мiра неоптимальностi.}VarNum: Integer; ZjXi:TWorkFloat;:=0;

{ШукаСФмо суму добуткiв значень змiнних i коефiцiСФнтiв при них -

значення функцiСЧ у точцi, координатами якоСЧ СФ поданi значення змiнних:}VarNum:=0 to Length(XiVals) - 1 do:=ZjXi + Self. CopyTable [ZjFuncRow, VarNum]*XiVals[VarNum];

:=-Abs((ZjXi/ZjXj) - 1); {qij=-|(ZjXi-ZjXj)/(ZjXj)|};

{Заповнення iмен змiнних - iмен фукнцiй двоСЧстоСЧ задачi у рядку-заголовку:}FillHRowVarName (SCol: Integer);. CurHeadRow[SCol].VarInitPos:=SCol;. CurHeadRow[SCol].VarInitInRow:=True;. CurHeadRow[SCol].ElmType:=bc_DependentVar;. CurHeadRow[SCol].AsVarName:=sc_Minus+sc_DualTaskFuncNameStart+(SCol+1);