Розробка програмного забезпечення автоматизованого дослідження операції про оптимальну закупівлю обчислюваних засобів інформаційно-об
Курсовая работа, 01 Ноября 2012, автор: пользователь скрыл имя
Описание работы
У теперішній час математичне програмування належить до числа найбільш інтенсивно використовуваних дисциплін прикладної математики. Так звані задачі математичного програмування (які полягають у знаходженні в заданій області точок найбільшого чи найменшого значення деякої функції, залежної від великого числа змінних) виникають у найбільш різноманітних сферах людської діяльності. Вони є найбільш актуальні в економічних дослідженнях, у плануванні та організації виробництва.
Содержание
Вступ………………………………………………………………………...……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.16 - Форма налаштування звіту
Рисунок 2.17 – Сгенерований звіт
Опис використаних програмних засобів
Система об'єктно-орієнтованого програмування C++ Builder виробництва корпорації Borland призначена для операційних систем Windows 9x/Me і NT/2000/XP. Інтегроване середовище C++ Builder забезпечує швидкість візуальної розробки, продуктивність повторно використовуваних компонентів у комбінації з міццю язикових засобів C++, удосконаленими інструментами й різномасштабними засобами доступу до баз даних.
C++ Builder може бути використаний
скрізь, де потрібно доповнити
існуючі додатки розширеним
Замість окремого інструментарію, що оперує візуальними елементами керування, в C++ Builder інтегрована так звана Палітра компонентів, розділена картотечними вкладками на кілька функціональних груп. Функціональні можливості компонентів, що поставляються, можна досить просто модифікувати, а також розробляти компоненти, що володіють зовсім новою оригінальною поведінкою.
Система містить Бібліотеку з більше ніж 100 повторно використовуваних візуальних компонентів, які перетягаються мишею на форму й відразу стають елементами керування прототипу вашої програми. Крім відомих елементів керування Windows (кнопки, лінійки прокручування, поля редагування, прості й комбіновані списки і т.д.) Бібліотека містить нові компоненти підтримки діалогів, обслуговування баз даних і багато інші. А якщо стандартної бібліотеки вам усе-таки не вистачить, можна завжди створити власний компонент.
C++Builder підтримує основні принципи об'єктно-орієнтованого програмування - інкапсуляцію, поліморфізм і множинне спадкування, а також нововведені специфікації й ключові слова в стандарті мови C++.
При створенні інтерфейсу використовувалися наступні компоненти Візуальної Бібліотеки компонентів (VCL) :