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

Автор: Пользователь скрыл имя, 01 Ноября 2012 в 01:45, курсовая работа

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

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

Содержание

Вступ………………………………………………………………………...……9
1. Теоретичні основи розробки програмного забезпечення автоматизованого дослідження операцій………………………………11
1.1 Завдання на розробку програмного забезпечення………………….…….11
1.2 Теоретичні основи методу…………..……………………..………………12
1.2.1 Загальні положення…………………….………………………………...12
1.2.2 Ознака оптимальності………………………………………………....…13
1.2.3 Метод послідовного поліпшення плану (І алгоритм)……..……….…..16
1.2.4 Загальні положення М-методу…………………………………………..19
1.2.5 Перший алгоритм М-методу………………………………………….....21
2. Розробка алгоритмічного та програмного забезпечення автоматизованого дослідження операцій…………………………….….……24
2.1 Алгоритмічне забезпечення автоматизованого дослідження операцій…………………………………………………………………...…….24
2.1.1Структура класів математичної моделі……………………………….…24
2.2 Програмне забезпечення автоматизованого дослідження операцій………………………………………………………..………………..27
2.2.1 Розробка головного меню…………………………………….……....…28
2.2.2 Опис екранних форм програмного продукту…….…………....…….…29
2.2.3 Опис використаних програмних засобів………………………..……....37
2.2.4 Відлагодження програмного забезпечення. Класифікація помилок…………………………………………………………………...….…40
2.2.5 Способи знаходження та усунення помилок…………………….…..…41
3 Використання розробленого програмного забезпечення для розв’язання задачі про оптимальну закупівлю обчислювальних засобів ІОЦ…………………………………………….…………………..….…..….….42
3.1 Постановка задачі дослідження операцій………..………………....…..42
3.1.1 Якісна постановка задачі дослідження…………………….………….43
3.1.2 Кількісна постановка задачі дослідження………………………….…44
3.1.3 Економічна інтерпретація задачі……………………………………...44
3.2 Формування вхідної інформації…………………………………………47
3.3 Описання процесу автоматизованого дослідження операції з використанням комп’ютеру…………………………………………….……48
3.4 Результати розрахунків з використанням ПО………………………...…49 3.4.1 Інтерпретація результатів розрахунків……………………………..….49
3.5 Дослідження області стійкості…………………………………..……….51
Висновок…………………………………………………………………….…53
Список джерел інформації…………………………………………...…….…55
Додаток А Алгоритм рішення ЗЛП М-методом(1 алгоритм)…………...…56
Додаток Б Діаграма класів……………………………………………….…..57
Додаток В Діаграма варіантів використання…………………………….…58
Додаток Г Структурно-функціональна схема операції…………………….59

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

записка укр.docx

— 3.20 Мб (Скачать)

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

   з) побудувати новий  базис FS , вектори s,s шляхом заміни ASr  на Ak Sk  на k ,Sr на k ;

   и) обчислити елементи  таблиці, які відповідають новому  опорному плану по формулам:

де i=, j= та перейти до виконання етапу етапу «г»;

  к) здійснити аналіз  рішення М-задачі у відповідності  з етапом «д» загальної схеми  М-метода.

 

 

 

 

 

 

 

 

 

 

 

2. РОЗРОБКА АЛГОРИТМІЧНОГО ТА ПРОГРАМНОГО ЗАБЕЗПЕЧЕННЯ АВТОМАТИЗОВАНОГО ДОСЛІДЖЕННЯ ОПЕРАЦІЙ

2.1 Алгоритмічне  забезпечення автоматизованого  дослідження операцій

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

Після цього за допомогою  уніфікованої мови моделювання була розроблена діаграма класів (Додаток Б) математичної моделі з подальшим розгляданням основних функцій у вигляді діаграми варіантів використання (Додаток В).

 

2.1.1 Структура класів математичної моделі

class Terminating_algorithm (абстрактний клас, який описує множину кінцевих алгоритмів рішення ЗЛП)

Атрибут

Математична интерпретація

phase : int

Фаза решення

last_phase : int

Остання фаза

t_main : Task

Умова основної ЗЛП

L_opt : double

Оптимальне значення цільової функції

X_opt : vector<double>

Оптимальний план

Fs_opt : vector<int>

Оптимальний базис


Таблица 2.1 – Атрибути класу Terminating_algorithm

    • void solve() – функція, яка розв’язує задачи лінійного програмування
    • virtual void solving_algorithm() = 0 – абсолютно віртуальна функція, яка являє собою конкретний алгоритм рішення
  • void decide() – функція, яка перечитує симплекс таблицю до виникнення ситуації 1 чи 2
  • void solving_algorithm() - функція, являю собою перший алгоритм послідовного поліпшення плану
  • class Artificial_basis (класс, описує алгоритм штучного базису)

Атрибут

Математична інтерпретація

T_secondary : Task

Умова допоміжної ЗЛП

intersection : vector <int>

Вектор пересічення початкового та оптимального базисів допоміжної ЗЛП


Таблица 2.2 – Атрибуту класу Artificial_basis

  • void calc_Intersection() – функція, що обчислює intersection
  • void sit_Two() - функція, що обробляє другу ситуацію, що виникає при аналізі рішення допоміжної ЗЛП
  • class Task (клас, що описує умову ЗЛП)

Атрибут

Математична інтерпретація

A_initial : vector<vector<double>>

Початкова матриця умов

B_initial : vector <double>

Початковий вектор обмежень

C_initial : vector <double>

Початковий вектор коефіцієнтів цільової функції

sign : int

Вектор знаків нерівності

Extremum : int

Екстремум(max или min)

A : vector<vector<double>>

Оптимальний базис

b : vector <double>

Матриця умов

c : vector <double>

Вектор обмежень

Fs : vector <int>

Вектор коефіціентів цільової функції


Таблица 2.3 – Атрибути класу Task

 

  • void canonize() – функція, що приводить задану ЗЛП до канонічної форми
  • void make_Nonnegative() – функція, що забезпечує невід’ємність вектора обмежень
  • void make_Sec_Task(Task) – функція, що формує допоміжну ЗЛП за основною
  • vector <vector<double > > get_Afs(vector<int >) – функція, що формує матрицю відповідно заданому базису
  • class Stable (клас, визначає симплекс таблицю)

Атрибут

Математична інтерпретація

m : Matrix

Об’єкт для роботы з матрицями

RS : RoundingSet

Об’єкт для роботы з округленням даних

X : vector<vector<double>>

Матриця коефіцієнтів розкладання векторів умов за базисом Fs

C : vector <double>

Вектор коефіцієнтів цільової функції

delta : vector <double>

Вектор напрямків руху

Fs : vector <int>

Вектор поточного базису

K : int

Номер змінюємого вектора базису

R : int

Номер вектора що змінює

epsilon : double

Допустима похибка


Таблица 2.4 – Атрибути класу Stable

  • void make(Task) – функція, що формує симплекс таблицю за умовами ЗЛП
  • void make_Sec_Table(Task) - функція, що формує симплекс таблицю допоміжної ЗЛП за її умовами
  • STable make_Main_Table(Task) - функція, що формує симплекс таблицб основної ЗЛП за її умовами із симплекс таблиці допоміжної ЗЛП
  • bool if_Sit_One() – функція, що перевіряє наявність ситуації 1
  • bool if_Sit_ Two() – функція, що перевіряє наявність ситуації 2
  • void calculate_K() – функція, що перевіряє заміщуємий вектор базису (приблизний метод)
  • void calculate_R() – функція, що визначає вектор базису що заміщує (приблизний метод)
  • void exactly_calculate_K_R() – точний метод визначення K та R
  • vector<double > calculate_Delta() - функція, що визначає вектор delta для даної симплекс таблиці
  • STable recount(int,int) – функція, що перераховує дану симплекс таблицю при зміні вектора поточного базису на інший
  • int validity_Check() – функція, що виконує контроль достовірності проміжних обчислень

class RoundingSet (клас, що призначений для округлення ланих)

  • vector<double > round(vector<double >) – функція, що округлює числа одномірного масива

class Matrix (клас, що призначено для роботи з матрицями)

  • vector <vector<double > > multiply(vector <vector<double > >, vector <vector<double > >) – функція, що повертає результати множення двух матриць
  • vector <vector<double > > join(vector<double >, vector <vector<double > >) - функція, що повертає результат обєднання стовпчика та матриці
  • vector <vector<double > > get_Conv(vector <vector<double > >) – функція, що повертає зворотню матрицю

 

2.2 Програмне забезпечення автоматизованого дослідження операцій

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

Програмне забезпечення розроблялося на алгоритмічній мові С++ у середовищі Borland C++Builder 6.0, що дозволило достатньо просто розробити якісний інтерактивний  додаток  зі зручним інтерфейсом користувача.

 

2.2.1Розробка головного меню

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

У результаті головне меню складається  з наступних пунктів:

1. Проект

1.1. Создать

1.2. Открыть

1.3. Сохранить

1.4. Сохранить как…

1.5. Выход

2. ЗЛП

2.1. Ввод

2.2. Редактирование

3. Решение

3.1. Решение

3.2. Пошаговое решение

4. Достоверность

4.1. Проверить

4.2. Подробности

5. Устойчивость

5.1. Исследовать

6. Отчет

6.1. Просмотр

6.2. Печать

7. Справка

7.1. Содержание

2.2.2 Опис екранних форм програмного продукту

Головна форма являє собою  центр дослідження операцій. На ній  розташовані області для умов ЗЛП (вхідні дані) та відповіді (вихідні  дані). Також на ній розташоване  головне меню за допомогою якого  можна здійснити різноманітні дії, що необхідні для розв’язання  ЗЛП

Рисунок 2.5 - Головна форма

За допомогою форми  «Ввод данных ЗЛП» вводяться вхідні дані нової ЗЛП, а саме:

  • кількість змінних;
  • кількість обмежень;
  • коефіцієнти цільової функції;
  • вектор обмежень b;
  • матриця коефіцієнтів А;

 

Рисунок 2.6 – Форма «Ввод данных ЗЛП»

За допомогою наступної  форми можна редагувати умови  поточної ЗЛП. Для цього необхідно  вибрати вкладку, яка відповідає даним, що потребують корегування, вибрати  номер елемента та ввести корегуючи  значення.

 

 

Рисунок 2.7 - Форма для редагування даних

Наступна форма  «Пошаговое решение» має три вкладки

  • Умови ЗЛП
  • Допоміжна ЗЛП
  • Основна ЗЛП

Для допоміжної  та основної ЗЛП ми можемо продивитися:

  • Умови в канонічній формі
  • Ітерації
  • Динаміка зміни цільової функції
  • Результат

Рисунок 2.8 - Форма «Пошаговое решение» вкладка «Условия ЗЛП»

 

Рисунок 2.9 - Форма «Пошаговое решение» вкладка «Ітерації»

 

Рисунок 2.10 - Форма «Пошаговое решение» вкладка «Динамика изменения L»

 

За допомогою форми  «Проверка допустимости» ми маємо  змогу перевірити допустимість, опірність  та оптимальність заданої ЗЛП.

Рисунок 2.11 – Перевірка допустимості

 

Рисунок 2.12 – Перевірка опірності

 

Рисунок 2.13 – Перевірка оптимальності

 

За допомогою цієї форми  можна дослідити отримані результати на стійкість при зміненні двох компонент  вектора обмежень. Для заданих  номерів обмежень та границь змінення можна побудувати область стійкості, яка буде відображатися на формі  графіку.

 

 

 

Рисунок 2.14 – Перевірка на стійкість

 

На цій формі представлена область стійкості, заштрихованим  червоним кольором.

Рисунок 2.15 – Область стійкості

 

За допомогою  форми  «Настройка отчета»  можна задавати, які дані відображати у генерованому звіті. Після збереження звіту він  з’являється на екрані.

Рисунок 2.16 - Форма налаштування звіту

Рисунок 2.17 – Сгенерований звіт

      1. Опис використаних програмних засобів

Система об'єктно-орієнтованого  програмування C++ Builder виробництва корпорації Borland призначена для операційних  систем Windows 9x/Me і NT/2000/XP. Інтегроване  середовище C++ Builder забезпечує швидкість  візуальної розробки, продуктивність повторно використовуваних компонентів  у комбінації з міццю язикових засобів C++, удосконаленими інструментами  й різномасштабними засобами доступу  до баз даних.

C++ Builder може бути використаний  скрізь, де потрібно доповнити  існуючі додатки розширеним стандартом  мови C++, підвищити швидкодію й  додати користувацькому інтерфейсу  якості професійного рівня.

Замість окремого інструментарію, що оперує візуальними елементами керування, в C++ Builder інтегрована так звана  Палітра компонентів, розділена  картотечними вкладками на кілька функціональних груп. Функціональні можливості компонентів, що поставляються, можна досить просто модифікувати, а також розробляти компоненти, що володіють зовсім новою оригінальною поведінкою.

Система містить Бібліотеку з більше ніж 100 повторно використовуваних візуальних компонентів, які перетягаються мишею на форму й відразу стають елементами керування прототипу вашої програми. Крім відомих елементів керування Windows (кнопки, лінійки прокручування, поля редагування, прості й комбіновані списки і т.д.) Бібліотека містить нові компоненти підтримки діалогів, обслуговування баз даних і багато інші. А якщо стандартної бібліотеки вам усе-таки не вистачить, можна завжди створити власний компонент.

C++Builder підтримує основні принципи об'єктно-орієнтованого програмування - інкапсуляцію, поліморфізм і множинне спадкування, а також нововведені специфікації й ключові слова в стандарті мови C++.

При створенні інтерфейсу використовувалися наступні компоненти Візуальної Бібліотеки компонентів (VCL) :

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