1   2   3   4   5   6
Ім'я файлу: Melynuk Т. P. КSМм-51.pdf
Розширення: pdf
Розмір: 1138кб.
Дата: 04.06.2021
скачати

x
x
Введемо відповідні значення у перше вікно підсистеми рисунок 3.4.

53
Рисунок 3.4 - Головне вікно підсистеми розв’язку задач багатокритеріальної оптимізації методом поступок
Після цього натискаємо кнопку «Далі», на екран монітора підсистема виведе форму, яка наведена на рисунку 3.5. Підсистема відобразить інформацію про вхідні дані задачі багатокритеріальної оптимізації (критерії, обмеження, значення поступок). Після вводу вхідних даних, згідно зазначеного вище алгоритму натиснувши кнопку «Наступний крок» отримуємо перші результати розв’язку задачі (3.1) рисунок 3.6. Призначаємо поступку і натискаємо кнопку
«Добре». Після цього на екран монітора підсистема виведе форму приклад якої зображено на рисунку 3.7.

54
Рисунок 3.5 - Результати виконня введення вхідних даних тестового прикладу
Рисунок 3.6 - Результат виконання першого короку алгоритму

55
Рисунок 3.7 - Призначення поступок для розв’язку тестового прикладу задачі оптимізації
Послідовно призначаємо всі наступні поступки і доходимо до кінця розв’язку задачі багатокритеріальної оптимізації методом послідовних поступок
(рис. 3.8).
Підсистема автоматизації розв’язання задач багатокритеріальної оптимізації дозволяє графічно відобразити результати роботи. На рисунку 3.9 наведено результати зміни значень цільових функцій, а на рисунку 3.10 зміна аргумента.
Графіки та протокол роботи програми можуть бути записані у файли
(графічному та текстовому форматі відповідно) для подальшого опрацювання
(рис. 3.11).

56
Рисунок 3.8 - Кінцеві результати роботи підсистеми
Рисунок 3.9 - Зміна значення цільових функцій Q1, Q2, Q3

57
Рисунок 3.10 - Зміна значення аргументів Х1, Х2, Х3, Х4, Х5
Рисунок 3.11 - Меню збереження графічної інформації у файл

58
Дана структура даних забезпечує високу ефективність представлення
інформації, необхідної для роботи підсистеми та є зручним засобом інтеграції даних у середовище різних підсистем подібного характеру. Вихідний файл включає інформацію про процес розв’язання задачі (протокол роботи підсистеми), де наведені результати основних та допоміжних результатів розрахунків.
Отримані дані співпадають з теоретичними отриманими з літеранурних джерел.
Лістинг файлу з результатами виконання програми:
>>> Вхідні дані:
Критерії
==================================================
2 3 1 2 0 ---> max
3 -1 0 0 0 ---> max
1 4 0 0 0 ---> max
==================================================
Обмеження
==================================================
1 2 1 0 0 = 6 2 1 0 1 0 = 8
-1 1 0 0 1 = 4
==================================================
>>> Початок розв'язання задачі
>>> Крок1
==================================================
Q1=22
Q2=0
Q3=0 x1=0 x2=0 x3=6

59 x4=8 x5=4 dQ1=0 dQ2=0
==================================================
>>> Призначено поступку
================================================== dQ1=33% dQ1=7,26
==================================================
>>> Введено додаткове обмеження
==================================================
Q1>=Q*1-dQ1 2*x1+3*x2+1*x3+2*x4+0*x5>=14,7
==================================================
>>> Крок2
==================================================
Q2=7,26
Q1=14,74
Q3=2,42 x1=2,42 x2=0 x3=3,58 x4=3,16 x5=6,42 dQ1=7,26 dQ2=0
==================================================
>>> Призначено поступку
================================================== dQ2=40%

60 dQ2=2,904
==================================================
>>> Введено додаткове обмеження
==================================================
Q2>=Q*2-dQ2 3*x1-1*x2+0*x3+0*x4+0*x5>=4,36
==================================================
>>> Крок3
==================================================
Q3=7,744
Q1=14,74
Q2=4,356 x1=1,936 x2=1,452 x3=1,16 x4=2,676 x5=4,484 dQ1=7,26 dQ2=2,904
==================================================
>>> Досягнуто останього кроку
>>> Роботу завершено
>>> Графік значень Q успішно записаний в файл
E:\OptimMEMS\Results\2a.bmp
>>> Графік значень X успішно записаний в файл
E:\OptimMEMS\Results\2b.bmp
>>> Протокол успішно записаний в файл E:\OptimMEMS\Results\2.txt

61 3.6 Висновок
Описано розлоблене програмне та технічне забезпечення підсистеми для розв’язання задач багатокритеріальної оптимізації.
Наведені результати розв’язку тестових задач багатокритеріальної оптимізації методом послідовних поступок.
Описані особливості
інтерфейсу підсистеми розв’язку задач багатокритеріальної оптимізації та алгоритм їх рішення з допомогою розробленої підсистеми.

62
ВИСНОВКИ
Розроблено структуру підсистеми розв’язку задач багатокритеріальної оптимізації методом послідовних поступок, яка включає підсистему вводу вхідних даних, підсистему розрахунків, підсистему виведення даних та інтерфейс.
Побудова модель оптимізації структури компютерної мережі, яка може включати такі критерії як вартість, надійність, пропускна здатність та
інтенсивність відмов з відповідними обмеженнями.
Описано розлоблене програмне та технічне забезпечення підсистеми для розв’язання задач багатокритеріальної оптимізації.
Наведені результати розв’язку тестових задач багатокритеріальної оптимізації методом послідовних поступок.
Описані особливості
інтерфейсу підсистеми розв’язку задач багатокритеріальної оптимізації та алгоритм їх рішення з допомогою розробленої підсистеми.

63
СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ
1.
Вентцель Е.С. Исследование операций. М.:Советское радио, 1972 2.
Кофман А., Фор Р. Займемся исследованием операций. М:Мир, 1966 3.
Р.Л. Кини, Х.Райфа Принятие решений при многих критериях: предпочтения и замещения. М.:Радио и связь
4.
Таха, Хэмди А. Введение в исследование операций – М.:Мир,2001 5.
Р. Штойер. Многокритериальная оптимизация: теория, вычисления, приложения. М.:Наука, 1982 6.
Многокритериальная оптимизация. Математические аспекты. М.:Наука,
1989 7.
Акулич И. Л. Математическое программирование в примерах и задачах. -
М.: Высшая школа, 1986.
8.
Алексеев В. М.. Галеев Э. М.. Тихомиров В. М. Сборник задач по оптимизации. Теория, примеры, задачи. - М.: Наука, 1984.
9.
Ашманов С. А., Тимохов А. В. Теория оптимизации в задачах и упражнениях. - М.: Наука, 1991.
10.
Базара М., Шетти К. Нелинейное программирование. Теория и алгоритмы. -
М.: Мир, 1982.
11.
Банди Б. Методы оптимизации. Вводный курс. - М.: Радио и связь, 1988.
12.
Банди Б. Основы линейного программирования. - М.: Радио и связь, 1989 13.
С.А.Исаев.
Решение многокритериальных задач.
Інтернет-ресурс http://bspu.ab.ru/Docs/

saisa/ga/idea1.html.
14.
Розділ
„Математика\Optimization
Toolbox‖.
Інтернет-ресурс http://www.matlab.ru/optimiz/index.asp.
15.
Е.В. Никульчев. Разработка многокритериальных систем управления динамическими объектами.
Інтернет-ресурс http://do.sssu.ru/ito2001/mater/mgapi.html.
16.
Пападимитриу Х., Стайглиц К. Комбинаторная оптимизация. Алгоритмы и сложность. - М.: Мир, 1985. - 510 с.

64 17.
Грень Е. Статистические игры и их применение. –М.: Статистика, 1975. –
176 с.
18.
Де Гроот М. Оптимальные статистические решения. –М.: Мир, 1974. –492 с.
19.
Сухарев А.Г. Оптимальный поиск экстремума. – М.: Изд МГУ, 1975.
20.
Черноусько Ф.Л., Меликян. Игровые задачи управления и поиска.–М.:
Наука, 1978 21.
Гермейер Ю.Б. Введение в теорию исследования операций. М.: Наука, 1971.
22.
Жилинскас А.Г. Глобальная оптимизация. Аксиоматика статистических моделей, алгоритмы, применение. –Вильнюс: Мокслас, 1986.

65
Додаток А
Лістинг програми MainUnit.pas - головного модуля unit MainUnit; interface uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, SimplexUnit, Grids, ComCtrls, ExtCtrls, TeEngine,
Series, TeeProcs, Chart, jpeg; type
TForm1 = class(TForm)
PageControl1: TPageControl;
TabSheet1: TTabSheet;
TabSheet2: TTabSheet;
TabSheet3: TTabSheet;
TabSheet4: TTabSheet;
TabSheet5: TTabSheet;
NumberInputPanel: TPanel;
LabeledEdit1: TLabeledEdit;
LabeledEdit2: TLabeledEdit;
LabeledEdit3: TLabeledEdit;
Button3: TButton;
MatrixInputPanel: TPanel;
CrutStringGrid: TStringGrid;
Label2: TLabel;
ConsStringGrid: TStringGrid;
Label3: TLabel;
Button4: TButton;

66
Memo1: TMemo;
Button2: TButton;
Button1: TButton;
Label4: TLabel;
XStringGrid: TStringGrid;
Label5: TLabel;
Label6: TLabel;
QStringGrid: TStringGrid;
Label7: TLabel; dQStringGrid: TStringGrid;
Label1: TLabel;
SaveDialog1: TSaveDialog;
Bevel1: TBevel;
Bevel2: TBevel; dQPanel: TPanel;
Label8: TLabel;
Button5: TButton;
Edit1: TEdit;
Label9: TLabel;
Label11: TLabel;
Label10: TLabel;
Button6: TButton;
QChart: TChart;
Series1: TBarSeries;
Series2: TBarSeries;
Series3: TBarSeries;
Series4: TBarSeries;
Series5: TBarSeries;
Series6: TBarSeries;
Series7: TBarSeries;
Series8: TBarSeries;

67
Series9: TBarSeries;
Series10: TBarSeries;
XChart: TChart;
BarSeries1: TBarSeries;
BarSeries2: TBarSeries;
BarSeries3: TBarSeries;
BarSeries4: TBarSeries;
BarSeries5: TBarSeries;
BarSeries6: TBarSeries;
BarSeries7: TBarSeries;
BarSeries8: TBarSeries;
BarSeries9: TBarSeries;
BarSeries10: TBarSeries;
Series11: TBarSeries;
Series12: TBarSeries;
Series13: TBarSeries;
Series14: TBarSeries;
Series15: TBarSeries;
SaveDialog2: TSaveDialog;
SaveDialog3: TSaveDialog;
Button7: TButton;
Button8: TButton;
Label13: TLabel;
Label14: TLabel;
Label15: TLabel;
Label16: TLabel;
Label17: TLabel;
Label18: TLabel;
Label12: TLabel;
Label19: TLabel;
Label20: TLabel;

68
Label21: TLabel;
Label22: TLabel;
Label23: TLabel;
Timer1: TTimer;
Image1: TImage; procedure Button1Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure CrutStringGridKeyPress(Sender: TObject; var Key: Char); procedure ConsStringGridKeyPress(Sender: TObject; var Key: Char); procedure Button4Click(Sender: TObject); procedure Button2Click(Sender: TObject); function GetQ(nQ:word;R:TExtArray):extended; procedure Edit1KeyPress(Sender: TObject; var Key: Char); procedure Button6Click(Sender: TObject); procedure Button5Click(Sender: TObject); procedure Button7Click(Sender: TObject); procedure Button8Click(Sender: TObject); procedure TabSheet5Show(Sender: TObject); procedure Timer1Timer(Sender: TObject); private
{ Private declarations } public
{ Public declarations } end; var
Form1: TForm1;
Simplex:TSimplex;
CrutCount:word;

69
ConsCount:word;
ZminCount:word;
Cr:array of TCruterij;
Con:array of TConstrain;
X:TExtArray;
Q:TExtArray; dQ:array[1..2] of TExtArray;
StepNumber:word;
Ser:array of TBarSeries; implementation
{$R *.dfm}
{$R WindowsXP.res} procedure TForm1.Button1Click(Sender: TObject); begin if SaveDialog1.Execute then begin
Memo1.Lines.Add('');
Memo1.Lines.Add('>>>
Протокол успішно записаний в файл '+SaveDialog1.FileName);
Memo1.Lines.Add('');
Memo1.Lines.SaveToFile(SaveDialog1.FileName); end; end; procedure TForm1.Button3Click(Sender: TObject);

70 var i,j:word; begin
CrutCount:=StrToInt(LabeledEdit1.Text);
ConsCount:=StrToInt(LabeledEdit2.Text);
ZminCount:=StrToInt(LabeledEdit3.Text);
NumberInputPanel.Enabled:=false;
MatrixInputPanel.Enabled:=true;
//==========================================================
=
CrutStringGrid.ColCount:=ZminCount+3;
CrutStringGrid.RowCount:=CrutCount+1; for i:=1 to ZminCount do begin
CrutStringGrid.Cells[i,0]:=' x'+IntToStr(i); end; i:=ZminCount+1;
CrutStringGrid.Cells[i,0]:=' ---> '; i:=i+1;
CrutStringGrid.Cells[i,0]:='M/m'; for i:=1 to CrutCount do begin
CrutStringGrid.Cells[0,i]:=' Q'+IntToStr(i); end; for i:=1 to CrutCount do begin for j:=1 to ZminCount do begin
CrutStringGrid.Cells[j,i]:=' 0'; end; end;

71 j:=ZminCount+1; for i:=1 to CrutCount do
CrutStringGrid.Cells[j,i]:=' --->'; j:=j+1; for i:=1 to CrutCount do
CrutStringGrid.Cells[j,i]:='max';
//==========================================================
=
ConsStringGrid.ColCount:=ZminCount+3;
ConsStringGrid.RowCount:=ConsCount+1; for i:=1 to ZminCount do begin
ConsStringGrid.Cells[i,0]:=' x'+IntToStr(i); end; i:=ZminCount+1;
ConsStringGrid.Cells[i,0]:=' <=> '; i:=i+1;
ConsStringGrid.Cells[i,0]:=' B'; for i:=1 to ConsCount do begin
ConsStringGrid.Cells[0,i]:=' A'+IntToStr(i); end; for i:=1 to ConsCount do begin for j:=1 to ZminCount do begin
ConsStringGrid.Cells[j,i]:=' 0'; end; end; j:=ZminCount+1;

72 for i:=1 to ConsCount do
ConsStringGrid.Cells[j,i]:=' ='; j:=j+1; for i:=1 to ConsCount do
ConsStringGrid.Cells[j,i]:=' 0';
//==========================================================
= xStringGrid.ColCount:=ZminCount; for i:=0 to (ZminCount-1) do begin xStringGrid.Cells[i,0]:=' x'+IntToStr(i+1); xStringGrid.Cells[i,1]:=' 0' end;
//==========================================================
=
QStringGrid.ColCount:=CrutCount; for i:=0 to (CrutCount-1) do begin
QStringGrid.Cells[i,0]:=' Q'+IntToStr(i+1);
QStringGrid.Cells[i,1]:=' 0' end;
//==========================================================
= dQStringGrid.ColCount:=CrutCount; for i:=0 to (CrutCount) do begin dQStringGrid.Cells[i+1,0]:=' dQ'+IntToStr(i+1); dQStringGrid.Cells[i+1,1]:=' 0';

73 dQStringGrid.Cells[i+1,2]:=' 0'; end; dQStringGrid.Cells[0,1]:=' %'; dQStringGrid.Cells[0,2]:=' abs'; end; procedure TForm1.CrutStringGridKeyPress(Sender: TObject; var Key: Char); begin if not ((key='0') or (key='1') or (key='2') or (key='3') or
(key='4') or (key='5') or (key='6') or (key='7') or
(key='8') or (key='9') or (key='-') or (key='i') or
(key='m') or (key='a') or (key='x') or (key='n') or
(key=#13) or (key=#8)) then key:=#0; end; procedure TForm1.ConsStringGridKeyPress(Sender: TObject; var Key: Char); begin if not ((key='0') or (key='1') or (key='2') or (key='3') or
(key='4') or (key='5') or (key='6') or (key='7') or
(key='8') or (key='9') or (key='-') or (key='=') or
(key='>') or (key='<') or
(key=#13) or (key=#8)) then key:=#0; end; procedure TForm1.Button4Click(Sender: TObject); var i,j:word; st:string; begin
MatrixInputPanel.Enabled:=false;

74
SetLength(Cr,CrutCount);
SetLength(Con,ConsCount); for i:=0 to (CrutCount-1) do begin
SetLength(Cr[i].Cr,ZminCount); for j:=0 to (ZminCount-1) do begin
Cr[i].Cr[j]:=StrToFloat(CrutStringGrid.Cells[j+1,i+1]); end; end; for i:=0 to (CrutCount-1) do begin if CrutStringGrid.Cells[ZminCount+2,i+1]='min' then Cr[i].F:=false else Cr[i].F:=true; end; for i:=0 to (ConsCount-1) do begin
SetLength(Con[i].A,ZminCount); for j:=0 to (ZminCount-1) do begin
Con[i].A[j]:=StrToFloat(ConsStringGrid.Cells[j+1,i+1]); end; end; for i:=0 to (ConsCount-1) do begin
Con[i].B:=StrToFloat(ConsStringGrid.Cells[ZminCount+2,i+1]); end; for i:=0 to (ConsCount-1) do

75 begin if ConsStringGrid.Cells[ZminCount+1,i+1]='<' then Con[i].Sign:=Less else if ConsStringGrid.Cells[ZminCount+1,i+1]='>' then Con[i].Sign:=Greater else Con[i].Sign:=Equal; end;
Memo1.Lines.Add('>>> Вхідні дані:');
Memo1.Lines.Add('');
Memo1.Lines.Add(' Критерії');
Memo1.Lines.Add('============================================
======'); for i:=0 to (CrutCount-1) do begin st:=' '; for j:=0 to (ZminCount-1) do begin st:=st+(FloatToStr(Cr[i].Cr[j])+' '); end; st:=st+' ---> '; if Cr[i].F then st:=st+'max' else st:=st+'min';
Memo1.Lines.Add(st); end;
Memo1.Lines.Add('============================================
======');
Memo1.Lines.Add('');
Memo1.Lines.Add(' Обмеження');
Memo1.Lines.Add('============================================
======'); for i:=0 to (ConsCount-1) do begin

76 st:=' '; for j:=0 to (ZminCount-1) do begin st:=st+(FloatToStr(Con[i].A[j])+' '); end; if Con[i].Sign=Less then st:=st+'< '; if Con[i].Sign=Greater then st:=st+'> '; if Con[i].Sign=Equal then st:=st+'= '; st:=st+FloatToStr(Con[i].B);
Memo1.Lines.Add(st); end;
Memo1.Lines.Add('============================================
======');
Memo1.Lines.Add('');
Memo1.Lines.Add('>>> Початок розв''язання задачі');
SetLength(dQ[1],CrutCount);
SetLength(dQ[2],CrutCount); for i:=0 to (CrutCount-1) do begin dQ[1,i]:=0; dQ[2,i]:=0; end;
SetLength(Q,CrutCount);
StepNumber:=0;
TabSheet2.Enabled:=true;
PageControl1.ActivePage:=TabSheet2;
SetLength(Ser,CrutCount); for i:=0 to (CrutCount-1) do begin

77
QChart.Series[i].ShowInLegend:=true; end; for i:=0 to (ZminCount-1) do begin
XChart.Series[i].ShowInLegend:=true; end; end; procedure TForm1.Button2Click(Sender: TObject); var i:word; begin
StepNumber:=StepNumber+1; if (StepNumber=0) then Label1.Caption:='Крок № 0 (початок роботи)' else Label1.Caption:='Крок № '+IntToStr(StepNumber);
Label11.Visible:=false;
Memo1.Lines.Add('');
Memo1.Lines.Add('>>> Крок'+IntToStr(StepNumber));
Memo1.Lines.Add('============================================
======');
Simplex:=TSimplex.Create(Cr[StepNumber-1].Cr,Cr[StepNumber-1].F); for i:=0 to (ConsCount-1) do begin

1   2   3   4   5   6

скачати

© Усі права захищені
написати до нас