Метод бажаної точки при прийнятті рішень в умовах визначеності та його програмна реалізація

Автор: Пользователь скрыл имя, 23 Марта 2012 в 08:23, дипломная работа

Описание работы

Мета роботи полягає у вивченні теоретичних основ щодо прийняття рішень в умовах визначеності, задач багатокритеріальної оптимізації та програмної реалізації методу багатокритеріальної оптимізації, а саме методу бажаної точки.
Виходячи з поставленої мети, в роботі розв’язано низку наступних завдань:
- розгляд прикладів багатокритеріальності;
- ознайомлення із задачами багатокритеріального програмування;
- вивчення основних понять та принципів теорії прийняття рішень в умовах визначеності;
- з’ясування основних методів багатокритеріальної оптимізації;
- розробка програмної реалізації методу бажаної точки.

Содержание

ВСТУП………………………………………………………...……………………...3
РОЗДІЛ 1. ІНФОРМАЦІЙНИЙ ОГЛЯД…………………………………………...5
1.1. Огляд задач багатокритеріального програмування,
приклади багатокритеріальності………...………………………..……5
1.2. Поняття про багатокритеріальну оптимізацію……………...…………8
РОЗДІЛ 2. ТЕОРЕТИЧНА ЧАСТИНА………………………………..………….11
2.1. Основні поняття та визначення теорії прийняття рішень
в умовах визначеності…………………………..…………………….11
2.2. Загальні відомості про задачі багатокритеріальної оптимізації..….12
2.3. Постановка задачі багатокритеріальної оптимізації……..…………18
2.4. Методи багатокритеріальної оптимізації………..…………………..29
2.5. Метод бажаної точки при прийнятті рішень в умовах
визначеності…………………………………………………………...32
РОЗДІЛ 3. ПРАКТИЧНА РЕАЛІЗАЦІЯ…………………………………. ………36
3.1. Блок-схема алгоритму …………………….………………………...36
3.2. Опис програмної реалізації методу бажаної точки………………....38
ВИСНОВКИ………………………………………………………………………...45
СПИСОК ВИКОРИСТАНИХ ДЖЕРЕЛ ………………………………………..46
ДОДАТОК А………………….…………………………………………………….48

Работа содержит 1 файл

Жездріс.docx

— 437.85 Кб (Скачать)

Програма видає результат  на екран і в файл.

На екран виводиться:

– мінімальне значення , критеріїв, і точки, в яких ці значення досягаються;

– максимальні значення , критеріїв ;

– бажані значення критеріїв  , , які задовольнили особу, що приймає рішення;

– оптимальний розв’язок.

В файл виводиться:

– умова задачі;

– мінімальне значення , критеріїв, і точки, в яких ці значення досягаються, а також всі проміжні обчислення при знаходження мінімальних значень критеріїв градієнтним методом (спочатку для першого критерію; потім для другого);

  • максимальні значення , критеріїв;

– всі бажані значення критеріїв  , , які особа, що приймає рішення, вводила в програмі, і оптимальний розв’язок при цих , .

Файл буде створюватися в  тій же папці, що і програма, і  буде мати назву «result.txt». Якщо перед  запуском програми файл з такою назвою і розширенням в цій папці  існував, то після запуску програму він буде перезаписаний.

Опис модулів програми

Програма складається  з 4 модулів Unit1, Unit2, Unit3, Unit4 та двох форм Form1, Form4.

Form1 – це головне діалогове вікно, Form4 – діалогове вікно, в якому вводять бажані значення критеріїв.

Unit1 – відповідає формі Form1. В ньому реалізована такі підпрограми:

1) процедура Button1Click (Sender: TObject) – виникає при натисненні на  кнопку «Метод бажаної точки». Знаходить розв’язок многокритеріальної  задачі методом бажаної точки.

2) процедура Button2Click (Sender: TObject) – виникає при натисненні на  кнопку «Заново». Очищує компоненти  форми Form1 і приховує компоненти, що відображаються відповідь

3) процедура Button3Click (Sender: TObject) - відбувається при натисненні  на кнопку «Мінімізація критеріїв  градієнтним методом». Знаходить  мінімальні значень критеріїв  градієнтним методом.

4) процедура FormCreate (Sender: TObject) – виникає при створенні форми Form1. Викликає стандартну процедуру Delphi Randomize – для активізації датчика випадкових чисел.

5) процедура FormActivate (Sender: TObject) – виникає тоді, коли форма Form1 стає активною і в цьому випадку передає фокус компоненту Edit1. Тобто цей компонент стає активним і в ньому розміщується курсор.

6) процедури Edit1KeyPress (Sender: TObject; var Key: Char), …, Edit6KeyPress (Sender: TObject; var Key: Char). Вони викликають процедуру  IfKeyPress з модуля Unit4. За допомогою  даних процедур перевіряється,  що користувач ввів в компоненти Edit1, …, Edit6.

Unit2 – містить підпрограми:

1) процедуру GradientMethod (z, dz_dx1, dz_dx2, dz_dx3: func; Memo1: TMemo; x1_Edit, x2_Edit, x3_Edit: TEdit; var y_opt: real) для знаходження мінімального  значення критерію градієнтним  методом.

2) функцію w (ksi, max, min:real):real для перетворення бажаних значень цільових функцій до нормованого безрозмірного вигляду

3) процедуру MethodMonteKarlo (max_f, max_t, y_f, y_t: real; f, t: func; Ro_f, Ro_t: real; var x1_max,x2_max,x3_max:real) – для знаходження максимального  значення методом Монте-Карло.

В модулі Unit3 оголошується новий тип даних func, а також розміщуються функції, для знаходження значень критеріїв в деякій точці та для знаходження значень похідних критеріїв в деякій точці.

 

 

Отже в модулі Unit3 реалізовані функції:

1) f (x1,x2,x3:real):real –критерій  ;

2) df_dx1 (x1,x2,x3:real):real, df_dx2 (x1,x2,x3:real):real, df_dx3 (x1,x2,x3:real):real – похідні  ;

3) t(x1,x2,x3:real):real – критерій ;

4) dt_dx1 (x1, x2, x3: real) :real, dt_dx2 (x1, x2, x3: real), dt_dx3 (x1, x2, x3: real) :real– похідні  .

Модуль Unit4 відповідає формі Form4.

В модулі Unit4 розташовуються:

1) процедура IfKeyPress (var Key: Char) – написана для того, щоб перевіряти  чи в текстові полі Edit вводять  санкціоновані логікою програми  символи: цифри, знак мінус,  знак десяткової коми або натискаються  клавішу Backspace.

2) процедури Edit1KeyPress (Sender: TObject; var Key: Char); Edit2KeyPress (Sender: TObject; var Key: Char). Вони викликають процедуру IfKeyPress. За допомогою даних процедур  перевіряється, що користувач  ввів в компоненти Edit1, Edit2.

3) процедура Button1Click (Sender: TObject). Виникає при натисненні на  кнопку «Ок» на формі Form4. Перевіряє, щоб бажанні значення критеріїв були введені, і щоб не виходили за допустимі межі для критеріїв.

Більш детальна інформація щодо програмної реалізації (код програми) знаходить у додатку А.

 

 

 

 

 

 

 

Висновки

На основі проведеної роботи було розглянуто теоретичні основи щодо багатокритеріальної оптимізації, задач багатокритеріального програмування, методів багатокритеріальної оптимізації, а також розроблено програмну  реалізацію методу бажаної точки.

Дана програма має досить простий інтерфейс та алгоритмічну структуру.

Створена програмна реалізація максимально полегшує застосування методу бажаної точки в задачах  багатокритеріальної оптимізації. Програма розроблена у візуальному  середовищі Delphi 6 на мові Object Pascal. Містить 2 форми та 4 модулі.

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

 

 

 

 

 

 

 

 

 

 

 

 

 

Список  використаних джерел

 

  1. Штойер Р. Многокритериальная оптимизация / Р. Штойер; под. ред. А.В. Лотова. – М. : Радио и связь, 1992. – 504 с.
  2. Волошин О.Ф. Моделі та методи прийняття рішень: Навч. посібник / О.Ф. Волошин, С. О. Мащенко. – К. : ВПЦ «Київський університет», 2006. – 336 с.
  3. Розен В.В. Цель – оптимальность – решение / В.В. Розен. – М. : Радио и связь, 1982. – 168 с.
  4. Макаров И.М. Теория выбора и принятия решений: Учебное пособие / И.М. Макаров, Т.М. Виноградская. – М. : Наука, 1982. – 328 с.
  5. Фишберн П. Теория полезности для принятия решений / П. Фишберн. – М. : Наука, 1978. – 352 с.
  6. Мушик Э. Теория принятия технических решений / Э. Мушик, П. Мюллер. – М. : Мир, 1990. – 206 с.
  7. Тоценко В.Г. Методы и системы поддержки принятия решений. Алгоритмическмй аспект / В.Г. Тоценко. – К.: Наук. думка, 2002. – 381 с.
  8. Волошин О.Ф. Методичні рекомендації до виконання практичних і лабораторних робіт з теорії прийняття рішень / О.Ф. Волошин, С.О. Мащенко. – К. : ВПЦ «Київський університет», 2001. – 424 с.
  9. Орловский С. А. Проблемы принятия решений при нечеткой исходной информации / С. А. Орловский. – М. : Наука, 1981. – 206 с.
  10. Хоменюк В. В. Элементы теории многоцелевой оптимизации / В. В. Хоменюк. – М. : Наука, 1983. – 125 с.
  11. Юдин Д.Б. Вычислительные методы теории принятия решений /

Д.Б. Юдин. – М. : Наука, 1989. – 320 с.

  1.   Ларичев О.И. Теория и методы принятия решений / О.И. Ларичев. – М. : Логос, 2000. – 296 с.
  2. Ногин В.Д. Парето – оптимальные решения многокритериальных задач / В.Д. Ногин, В.В. Подиновский. – М. : Наука, 1982. – 254 с.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ДОДАТОК А

 

Програмний код  модуля Unit1.pas

 

unit Unit1; // даний модуль відповідає формі Form1

interface

uses

  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

  Dialogs, StdCtrls, ExtCtrls;

type

  TForm1 = class(TForm)

    Label1: TLabel;

    Label2: TLabel;

    Panel1: TPanel;

    Edit4: TEdit;

    Edit5: TEdit;

    Label8: TLabel;

    Label9: TLabel;

    Label10: TLabel;

    Label11: TLabel;

    Label12: TLabel;

    Edit6: TEdit;

    Edit1: TEdit;

    Edit2: TEdit;

    Label3: TLabel;

    Label4: TLabel;

    Label5: TLabel;

    Label6: TLabel;

    Label7: TLabel;

    Edit3: TEdit;

    Button3: TButton;

    Memo1: TMemo;

    Label13: TLabel;

    Button1: TButton;

    Button2: TButton;

    Label14: TLabel;

    Label15: TLabel;

    Label16: TLabel;

    Label17: TLabel;

    Label18: TLabel;

    Label19: TLabel;

    procedure Button3Click(Sender: TObject);

    procedure FormCreate(Sender: TObject);

    procedure FormActivate(Sender: TObject);

    procedure Button1Click(Sender: TObject);

    procedure Edit1KeyPress(Sender: TObject; var Key: Char);

    procedure Edit2KeyPress(Sender: TObject; var Key: Char);

    procedure Edit3KeyPress(Sender: TObject; var Key: Char);

    procedure Edit4KeyPress(Sender: TObject; var Key: Char);

    procedure Edit5KeyPress(Sender: TObject; var Key: Char);

    procedure Edit6KeyPress(Sender: TObject; var Key: Char);

    procedure Button2Click(Sender: TObject);

  private

    { Private declarations }

  public

    { Public declarations }

  end;

var

  Form1: TForm1;

implementation

{$R *.dfm}

// підключення модулів  Unit2, Unit3, Unit4

uses Unit2,Unit3,Unit4;

var

  r_opt:real; // r_opt - мінімальне  значення першої функції

  z_opt:real; // z_opt - мінімальне  значення  другої функції

// коли натиснули кнопку

// "Мінімізація критеріїв градієнтним методом"

procedure TForm1.Button3Click(Sender: TObject);

var

  g:textfile; //текстовий файл

begin

  // вказуємо, що працюємо  з файлом result_g.txt

  // файл повинен розміщуватися в тій же папці, що і програма

  assignfile(g,'result.txt');

  rewrite(g);  // rewrite - відкриваємо файл,

               //  якщо файл з таким іменем існував,

               // то стара інформація знищується  і записується нова

  // вивід в файл

  writeln(g,'Перша цільова функція:');

  writeln(g,'(x1-1)^2+(x2-3)^2+(x3-2)^2 -> min');

  writeln(g,'Друга цільова  функція:');

  writeln(g,'(x1-2)^2+(x2-4)^2+x3^2 -> min');

  closefile(g); // закриття файлу

  Memo1.Clear; // Clear - очищає компонент  Memo

  // якщо користувач пропустив і не ввів число

  // Text - рядок символів, що містить в компоненті

  If (Edit1.Text='') or (Edit2.Text='') or (Edit3.Text='')

  or (Edit4.Text='') or (Edit5.Text='') or (Edit6.Text='') then

  begin

    // то вивесті  йому повідомлення про це

    ShowMessage('Заповніть всі поля');

  // ShowMessage – функція для виведення повідомлення на екран

    exit; // exit - вихід з процедури

  end;

  Form1.Tag:=0; // властивість Tag  створена для програміста

// Tag  призначено для зберігання цілих чисел

// якщо Tag = 0, то шукаємо мінімум першої функції

// якщо Tag = 1, то шукаємо мінімум другої функції

// будемо використувати  ці числа

// при використання градієнтного  методому

  // компонент Memo - це багаторядковий текстовий редактор

  // призначений для  виведення інформації текстової

  // Memo1.Lines - звертання до рядків в компоненті Memo1

  // Memo1.Lines.Add - додати новий рядок в компонент Memo1

  // виводимо текст в  Memo1

  Memo1.Lines.Add('Мінімальне значення функції:');

  Memo1.Lines.Add('(x1-1)^2+(x2-3)^2+(x3-2)^2 -> min');

  // виклик процедури GradientMethod

  // для обчислення мінімального  значення функції 

// градієнтним методом

  // f  - функція, мінімальне значення якої шукаємо

  // df_dx1 - функція, похідная функції f по змінній х1

  // df_dx2 - функція, похідная функції f по змінній х2

  // df_dx3 - функція, похідная функції f по змінній х3

  // Memo1 - в цей компонент будемо виводити інформацію

  //  Edit1,Edit2,Edit3 - компоненти, з яких будемо зчитувати

  // значення точки

  // r_opt - мінімальне значення функції f

// (це значення поверне  процедура GradientMethod)

  GradientMethod(f,df_dx1,df_dx2,df_dx3,Memo1,Edit1,Edit2,Edit3,r_opt);

  Form1.Tag:=1;

  // виводимо інформацію  в компонент Memo1

  Memo1.Lines.Add('Мінімальне значення функції:');

  Memo1.Lines.Add('(x1-2)^2+(x2-4)^2+x3^2 -> min');

  // виклик процедури GradientMethod для

  // обчислення мінімального  значення другої функції градієнтним  методом

  // t  - функція, мінімальне значення якої шукаємо

  // dt_dx1 - функція, похідная функції t по змінній х1

  // dt_dx2 - функція, похідная функції t по змінній х2

  // dt_dx3 - функція, похідная функції t по змінній х3

  // Memo1 - передаємо в який компонент будемо виводити інформацію

  //  Edit4,Edit5,Edit6 - компоненти, з яких будемо зчитувати значення точки

  // z_opt - мінімальне значення функції t (це значення поверне процедура GradientMethod)

  GradientMethod(t,dt_dx1,dt_dx2,dt_dx3,Memo1,Edit4,Edit5,Edit6,z_opt);

  // Enabled задає, компонент є активним чі ні

  Button1.Enabled:=true;

// кнопка  "Метод бажаної  точки" стає активною

  Button3.Enabled:=false;

  // кнопка  "Мінімізація  критеріїв градієнтним методом"  стає неактивною

end;

// подія  FormCreate виникає при створенні форми Form1

procedure TForm1.FormCreate(Sender: TObject);

begin

  // для того, щоб запустити  датчик випадкових чисел

  //слід викликати один  раз  процедуру Randomize

  Randomize; 

end;

// подія  FormCreate виникає, коли форма Form1 стає актвиною

procedure TForm1.FormActivate(Sender: TObject);

begin

  Edit1.SetFocus; //SetFocus - встановити  фокус в компнент, тобто він  в ньому розміщується курсор

end;

// натиснення на кнопку "Метод бажаної точки"

procedure TForm1.Button1Click(Sender: TObject);

begin

  // виклик процедури  MethodBaganTochki

  // реалізація методу  бажаної точки

  MethodBaganTochki(r_opt,z_opt,f,t);

   // Enabled задає, компонент є активним чі ні

  Button1.Enabled:=false; // кнопка "Метод бажаної точки" стає активною

end;

// подія, яка виникає  при натиснені клавіші в полі  Edit1

procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);

//Key - символ який ввели в компонент

begin

  IfKeyPress (Key);// виклик процедури, яка перевіряє, чи санкціоновані символи були введенні

end;

// подія, яка виникає  при натиснені клавіші в полі  Edit2

procedure TForm1.Edit2KeyPress(Sender: TObject; var Key: Char);

//Key - символ який ввели в компонент

begin

  IfKeyPress (Key);// виклик процедури, яка перевіряє, чи санкціоновані символи були введенні

end;

// подія, яка виникає  при натиснені клавіші в полі  Edit3

procedure TForm1.Edit3KeyPress(Sender: TObject; var Key: Char);

//Key - символ який ввели в компонент

begin

  IfKeyPress (Key);// виклик процедури, яка перевіряє, чи санкціоновані символи були введенні

end;

// подія, яка виникає  при натиснені клавіші в полі  Edit4

procedure TForm1.Edit4KeyPress(Sender: TObject; var Key: Char);

//Key - символ який ввели в компонент

begin

  IfKeyPress (Key);// виклик процедури, яка перевіряє, чи санкціоновані символи були введенні

end;

// подія, яка виникає  при натиснені клавіші в полі  Edit5

procedure TForm1.Edit5KeyPress(Sender: TObject; var Key: Char);

//Key - символ який ввели в компонент

begin

  IfKeyPress (Key);// виклик процедури, яка перевіряє, чи санкціоновані символи були введенні

end;

// подія, яка виникає  при натиснені клавіші в полі  Edit6

procedure TForm1.Edit6KeyPress(Sender: TObject; var Key: Char);

//Key - символ який ввели в компонент

begin

  IfKeyPress (Key);// виклик процедури, яка перевіряє, чи санкціоновані символи були введенні

end;

// процедура виникає при  натисненні на кнопку "Заново"

procedure TForm1.Button2Click(Sender: TObject);

begin

  // очищення всіх компонентів

  // Clear - знищує текст  в компоненті

  Edit1.Clear;

  Edit2.Clear;

  Edit3.Clear;

  Edit4.Clear;

  Edit5.Clear;

  Edit6.Clear;

  Memo1.Clear;

  // Enabled задає, компонент  є активним чі ні

  Button3.Enabled:=true;  // кнопка  "Мінімізація критеріїв градієнтним  методом"   стає неактивною

  Button1.Enabled:=false; // кнопка  "Метод бажаної точки"   стає не активною

  Button2.Enabled:=false; // кнопка  "Заново"   стає неактивною

  // Visible задає, компонент є видими чі ні

  // родимо невидими  компоненти, які виводять відповідь

  Label1.Visible:=false;

  Label2.Visible:=false;

  Label13.Visible:=false;

  Form1.Label14.Visible:=false;

Информация о работе Метод бажаної точки при прийнятті рішень в умовах визначеності та його програмна реалізація