Реферат: Статистичне моделювання сітьового графіка побудови судна

МІНІСТЕРСТВООСВІТИ  І НАУКИ УКРАЇНИ

УКРАЇНСЬКИЙДЕРЖАВНИЙ МОРСЬКИЙ ТЕХНІЧНИЙ УНІВЕРСИТЕТ

іменіадмирала Макарова

КафедраІнформаційних Технологій

ЗАВДАНЯ

Накурсову роботу з курсу

“Моделюваннявиробничих процесів у суднобудуванні”

Студент  5142 групи       Ковальов Д.В.

1)   Тема курсової роботи :Cтатистичне моделюваннясітьового графіка побудови судна           .

2)   Основні початкові дані наведено утаблиці 1.

3)   Структурарозрахунково-пояснювальної записки:

a)   Титульний лист;

b)   Завдання на курсову роботу;

c)   Анотація (українською, російською,англійською);

d)   Зміст;

e)   Перелік умовних означень;

f)   Вступ;

g)   Загальна частина (Розділ 1);

1)   Спеціальна частина (Розділ 2,3);

i)    Висновки;

j)    Список використаної  літератури;

k)   Додатки.

4)   Дата видачі завдання “    ”           ___            2006 року

5)   Строк здачі студентом готовоїроботи   “     ”           ____            2006 року

Керівник курсовоїроботи  Шнейдер  О. Б.

Студент                          н


 Таблиця 1 — Початкові дані

Коди робіт

Найменування робіт

Оцінка тривалості

Варіант 6 1-2 Підготовка стапеля до закладення судна 1          1.5 2-5 Зборка і зварювання днищевих секцій 1 будівельного району (79-134 шп.) 13        14 2-3 Зборка і зварювання днищевих секцій у районі 75-79 шп. 4          4.3 3-6 Зборка і зварювання секцій  перегородок, бортів і палуб у районі 75-79 шп. 20        21 3-4 Зборка і зварювання днищевих секцій у районі 71-75 шп. 5          5.1 5-8 Іспит на непроникливість міждонних відсіків 1 будівельного району 8.7       8,8 6-12 Монтаж систем (вантажний, зачистний і обігріву) у районі 75-79 шп. 16        16.6 6-7 Залежність 0          4-7 Зборка і зварювання секцій  перегородок, бортів і палуб у районі 71-75 шп. 15        16 4-10 Зборка і зварювання секцій у районі 67-71 шп. 5          5.8 7-12 Монтаж систем у районі 71-75 шп. 13        14 7-11 Залежність 10-11 Зборка і зварювання секцій  перегородок, бортів і палуб у районі 67-71 шп. 18        19 10-13 Зборка і зварювання днищевих секцій у районі 63-67 шп. 7          8 11-12 Монтаж систем у районі 67-71 шп. 17        18 11-14 Залежність 12-20 Іспит на непроникливість вантажних танків у районі 67-79 шп. 6          7 13-16 Зборка і зварювання днищевих секцій у районі 59-63 шп. 9          10 13-14 Зборка і зварювання секцій  перегородок, бортів і палуб у районі 63-67 шп. 15        16 14-19 Монтаж систем у районі 63-67 шп. 15        17 14-17 Залежність 16-17 Зборка і зварювання секцій  перегородок, бортів і палуб у районі 59-63 шп. 20        25 17-19 Монтаж систем у районі 59-63 шп. 20        23 8-22 Фарбування підводної частини корпусу в районі 79 шп. – корми 30        35 20-22 Фарбування підводної частини корпусу в районі 67-79 шп. 4          7 19-21 Іспит на непроникливість вантажних танків у районі 59-67 шп. 8          12 21-22 Фарбування підводної частини корпусу в районі 59-67 шп. 2          8

АННОТАЦИЯ

В данном курсовом проектемоделируется сетевой график (СГ) построения судна методом статистическихиспытаний.

В работе проводитсяразработка программного обеспечения,решающего две задачи:

1)     реализующего модель сетевогографика и позволяющего расчитывать временные параметры проекта, а такжеизображать модель в виде диаграммы Гантта;

2)     моделирующего  сетевой графметодом статистических испытаний.

Курсовой проект изложен на 41страницах машинописного текста, содержит 5 рисунков, 3 таблицы, 1приложение.

Работа выполнена на украинском языке.

АНОТАЦІЯ

В даному курсовомупроекті моделюється сітьовий графік (СГ) побудови судна методом статистичнихвипробувань.

В роботіпроводиться розробка двох типів програмного забезпечення:

1)  того, що реалізує модельсітьового графіка і дозволяє розрахувати часовіпараметри проекту, а також зобразити модель у виді діаграми Гантта;

2)  того, що моделює  сітьовийграфік методом статистичних випробувань.

Курсовий проект виконано на 41 сторінках друкованого тексту, містить 5рисунка, 3 таблиці, 1  доданок.

Робота виконана українською мовою.

ANOTATION

The shipbuilding net graph modeling wasdone in the term work. It’s introduced with the purpose ofreception of the maximal profit from work of some enterprise.

The work is done on 41 pages of the printed text, contains 5illustrations. The work also has 1 appendices, which contain the textand results of performance of the program. For creation of this work were used three sources of information.

    The work is done in the Ukrainian language.


ЗМІСТПерелік умовних означень… 4 Вступ… 6 1.     Загальна характеристика предметної області… 61.1   Дослідження процесу побудови судна ……………………………………….7

1.1.1   Аналіз процесупобудови судна якоб’єкта управління…...……………7

1.1.2   Поняття технологічного тавиробничого процесів у суднобудуванні…………………………………….…………………..….8

1.1.3   Особливості виробничого процесу  усуднобудуванні............................81.1.4   Принципи формування планово-обліковиходиниць…...........................91.1.5   Етапипобудовисуден.................................................................................9

1.1.6  Причини використання СУПС………………………………………..…10

1.2   Аналіз методів управління проектами………………………………………..10

                   1.2.1    Метод критичного шляху…………………………………………….…11

                    1.2.2    Метод критичного шляху та основні параметри сітьовогографіка…12

1.3   Вітчизняний ізакордонний досвід використання СУПС…………………...13

1.4   Змістовнапостановка задачі………………………………………………….16

2.   Розробкадетермінованої моделі сітьового графіка і моделювання ……………17

2.1 Розробка програмного забезпечення для моделювання детермінованої моделі………………………………………………………………………….....17

3.  Моделюваннясітьового графіка методом статистичних випробувань …………19

3.1 Описання теоретичної суті методу …………………………………………...19

3.2 Розробка програмного забезпечення длямоделювання……………………..23

3.3 Результати розрахунків…………………………………………………….…..24

Висновки ………………………………………………………………………………..29   Списоквикористаної літератури ……………………………………………………...30

ДодатокА — Текст програми …………………………………………………………..31


ПЕРЕЛІКУМОВНИХ ОЗНАЧЕНЬ

 

В курсовій роботі використовуютьсянаступні умовні означення:

1.   СУПС – система управлінняпроектами у суднобудуванні

2.   СГ– сітьовий граф

3.   СПК – сітьове планування ікерування

4.   CPM – Critical Path Method

5.   PERT – Program Evolution and Review Technique

6.   ВП – виробничий процес


ВСТУП

Собівартість судна яквиду продукції багато в чому визначається прийнятими конструктивними рішеннями.У силу зростання ролі вартості проектних і конструкторських робіт у виробничихвитратах варто прагнути до прийняття конструкторами раціональних рішень замінімальний час. Для цього використовується спеціальне ПЗ, що дозволяєпланувати роботи у побудові судна — системауправління проектами у суднобудуванні (СУПС). В свою чергу СУПС використовує технологіюсітьового планування і керування.

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

Для досягнення вказаної мети потрібно зробитинаступні кроки:

·             проаналізуватипредметну область дослідження;

·             виконати змістовну постановку задачі, щорозв’язується у роботі;

·             описати теоретичну суть тапослідовність розрахунків імовірнісних
              характеристик параметрів проекту для методу статистичних випробувань;

·             розробитидетерміновану модель сітьового графіка, що дозволяє розрахувати
              часові параметри проекту і зобразити модель у виді діаграмиГантта і
              провести моделювання за початковими даними;

·             розробитипрограмне забезпечення для статистичного моделювання сітьового
              графіка  за початковими даними;

·             зробитивисновки по роботі та досягнутим результатам.


1    ЗАГАЛЬНАХАРАКТЕРИСТИКА ПРЕДМЕТНОЇ ОБЛАСТІ

 

1.1 Дослідження процесу побудовисудна

 

1.1.1  Аналіз процесупобудови судна як об’єкта управління

Структуравиробничого процесу Р(I) виготовлення виробу I   умашинобудуванні і приладобудуванні визначена державними стандартами Єдиноїсистеми технологічної документації (ЕСТД) і є, як і структура виробу,ієрархічною.

Структуризаціявиробничого процесу Р(I) і визначаючої його організаційної ітехнологічної документації полягає у побудові графа типу „дерево", у якомуР(I) є коренем (нульовий ступінь входження):

/>/>, />Æ    />;   />

де n — змінна: n ³2; Г(Р(I)) визначає сукупність технологічних процесів Тi, що складають нульову ступінь входження структуривиробничого процесу;

/>/>,

/>,  />;  />,  де n, m — зміннi: n, m ³ 2;

/> визначає сукупність технологічних операцій Тij,, що складають другу ступінь входження структуривиробничого процесу, і кожна операція входить тільки в один відповіднийтехнологічний процес.

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

Розмаїтість типівсудів, значні номенклатура і число (десятки, сотні тисяч) деталей корпуса судна(середньо -, крупнотоннажного) вимагає автоматизації всіх стадій їхньогостворення, що здійснюється інтеграцією систем різного функціональногопризначення: автоматизованих систем наукових досліджень, системавтоматизованого проектування судів, систем автоматизованого проектуваннятехнологічної підготовки виробництва верфі, нормування трудомісткості, системуправління проектами у суднобудуванні (СУПС).

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

Робота – деякадіяльність, яка потрібна для досягнення конкретних результатів на самомунизькому рівні. Є дискретною компонентою проекту на самому низькому рівнідеталізації та є основою для організації даних.

Веха(подія) –визначена дата в процесі виконання проекту. Використовується для відображеннястану завершеності тих чи інших дій.

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

1.1.2  Поняттятехнологічного та виробничого процесів у суднобудуванні.

Виробничий процес – сукупність усіхдій, спрямованих на перетворення матеріалів та напівфабрикатів в кінцевупродукцію – предмет виробництва.

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

Частина виробничогопроцесу, яка пов’язана  зі зміною та наступним визначенням станів предметувиробництва, називається технологічним процесом.

Технологічний процес– сукупність дій необхідних безпосередньо для виробництва або ремонту судна.

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

Технологічний процесділиться на операції.

Операція – цезакінчена  частина  технологічного процесу, яка виконується на одному робочомумісці. Операція є основною частиною при плануванні та обліку процесівиробництва.

1.1.3 Особливостівиробничого процесу  у суднобудуванні.

Виробничий процес усуднобудуванні має відмінності порівняно з іншими промисловостями. Цеобумовлено специфікою об’єкту виробництва. Виробничий процес складається звеликою кількості операцій та має наступні особливості:

² Проектування та побудова судів ведеться паралельно зробочим проектуванням та побудовою головного судна.

² Число конструктивних елементів та кількістьтехнологічних змін досягає декількох тисяч.

² Необхідність в використанні спеціальних побудовочнихмісць.

² Число контрагентів (поставників), які приймають участьв побудові досягає декількох сотен.

² Номенклатура найменованій деталей та зборочниходиниць  досягає 106.

² Нерівномірність споживання матеріальних та трудовихресурсів.

² Конструктивна складність виробу та як висновокнеобхідність використання планово-облікових одиниць.

/> 


1.1.4 Принципипобудови планово-облікових одиниць.

Так як судно цескладний об’єкт, то планово-облікові одиниці будуються методом “з веху – донизу”. Тобто починаючи з кінцевого продукту і до дрібних операцій. Схемапобудови  планово-облікових одиниць: 

1)  Судно (замовлення).

2)  Технологічний етап –відносно крупний, кінцевий комплекс робіт, що характеризує досягненнявизначеного ступеня фізичної готовності.

3)  Цехоетап – комплекс робіт,що виконуються цехом в технологічному етапі.

4)  Технологічний комплект –сукупність робіт, що виконуються без перерив у строго технологічнійпослідовності цехом. Результатом завершення технологічного комплекту є кінцевапродукція цеху,  яка передається по побудованому документу.

5)  Технологічний під комплект– сукупність робіт у складі технологічного комплекту, що виконуються дільницею.

6)  Бригадо-комплект –сукупність робіт, що виконуються бригадою.

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

1.1.5 Періодипобудови суден.

Так як час побудовисудна досить тривалий, то для зручного обліку виконання робіт прийнято поділятийого на періоди. Хоча періоди досить обособлені але вони можуть виконуватисьпаралельно, але більш раціонально щоб вони виконувались послідовно.

Виробничий циклпобудови судна поділяється на періоди:

²  Заготовчий період – частина ВВ, що включає роботи, яківиконуються від початку обробки метала до початку зборки секцій та блоків. Напротязі заготов чого періоду виготовлюють деталі корпуса судна, вузлові секціїкорпуса, труби, елементи систем, пристроїв, обладнання суднових приміщень.

²  Блочний період – частина ВВ, включає роботи, яківиконуються від початку зборки блоків до початку формування корпуса. В цьомуперіоді збирають блоки, секції, встановлюють в них механізми, ділянки трубопроводів,елементи суднових систем та пристроїв.

²  Стапельний період – частина ВВ, включає роботи, яківиконуються від початку формування корпуса на стапелі до спуску судна на воду.На протязі цього періоду формується корпус, іспитується на непроникливістьблоки секцій, виконується монтаж головних та частини допоміжних механізмів,монтаж валопроводів, систем та пристроїв, монтаж ізоляції.

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

²  Здаточний період – роботи, що виконуються від початкушвартових випробувань та до здачі  замовнику.

1.1.6  Причини використанняСУПС.

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

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

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

1.2Аналіз методів управління проектами

Технологія сітьовогопланування і керування (СПК), що є основою системуправління проектами у суднобудуванні, складається з наступних методів: метод діаграм Гантта і мережні методипланування.

Діаграма Гантта (рис.1) уявляє собою лінійний графік, що задає терміни початку і закінченнявзаємозалежних дій, що складають єдиний технологічний процес, який потрібновиконати для досягнення мети проекту.  Основні недоліки методу діаграм Гантта:складність формалізації процедур їх (діаграм) аналізу; відсутність можливостівстановлення залежностей між різними діями.

/>

Рисунок 1 — Діаграма Гантта

Допозитивних якостей варто віднести простоту і наочність. Сучасні системипланування використовують модифіковані діаграми Гантта, у яких перелічені вищенедоліки більшою мірою усунуті.

Докласичних методів у групі мережних методів планування відносяться:

— метод критичного шляху (Critical Path Method — CPM);

— метод аналізу й оцінки програм (Program Evalution and Review Techique-PERT).

1.2.1Метод критичного шляхута основні параметри сітьового графіка

Застосуванняметоду CPM дозволяє представити комплекс взаємозалежних дій у вигляді графічноїнотації сітьової моделі — сітьового графіка. Сітьовий графік — це орієнтованийграф без контурів. Орієнтовані дуги графа інтерпретують роботи. Вершини графа,з'єднані дугами, називають подіями (віхами). Та сама подія-вершина може служитипочатком одних і кінцем інших дуг-робіт. Подія виражає готовий результат: усіроботи, що входять у подію, кінчені. Вона також виражає логічний зв'язок міжроботами, що полягає в тому, що роботи, що входять у дану подію, безпосередньопередують роботам, що виходять з нього; жодна вихідна з даної події робота неможе починатися до закінчення всіх робіт, що входять у цю подію. Якщо робота немає попередньої, то вона виходить з події, що є початком проекту, тобто зподії, що не має вхідних дуг. Роботи, що не передують ніяким іншим, входять уподію, що є кінцем проекту, тобто в подію, що не має вихідних дуг. Будь-якаінша подія має вхідні і вихідні дуги.

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

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

Доосновних розрахункових параметрів сітьового графіка відносяться: t(Lкр) — довжина критичного шляху; tp(i) — можливий ранній терміннастання події i; tn(i) — пізній припустимий терміннастання події i; P(i) — резерв часу події; tр.н.(ij) — можливий ранній термін початку роботи (ij); tп.н.(ij) — пізній припустимий термін початку роботи (ij); tр.о.(ij) — можливий ранній термін закінчення роботи (ij); tп.о.(ij) — пізній припустимий термін закінчення роботи (ij); Pп(i) — повний резерв часу роботи (ij); Pс(i) — вільнийрезерв часу роботи (ij).

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

/> ,

деt(L’max) — тривалість максимального з попередніх подіїi шляхів.

Пізнійприпустимий термін настання події i — це такий термін здійснення  події,перевищення якого викликає аналогічну затримку настання завершального події.Іншими словами, пізній термін настання події — це різниця між довжиноюкритичного шляху і максимальним по тривалості шляхом, що виходить з цієїподієї:

tn(i) = t(Lкр) — t(L”max),

деt(L”max) — тривалість максимального з усіх шляхів, щопочинаються з події i.

Резервомчасу події називається різниця між пізнім і раннім терміном настання цієїподії:

P(i) = tn(i) — tp(i).

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

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

Раннійтермін початку роботи (ij) дорівнює ранньому терміну настання подіїі:

tр.н.(ij) = tp(i)

Знаючиранній термін початку роботи і її очікувану тривалість t(ij), визначаютьранній термін закінчення роботи:

tр.о.(ij) = tp.н(ij) + t(ij).

Пізнійтермін закінчення роботи (ij) визначається як пізній термін настанняподії />j, тобто події, що є кінцевою для даної роботи:

tп.о.(ij) = tп.(j).

Знаючипізній термін закінчення роботи й очікувану тривалість, можна визначити пізнійтермін початку цієї роботи:

tп.н.(ij) = tп.o.(ij) — t(ij).

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

Pn(ij) = tn(j) — tp(i)- t(ij).

Вільнийрезерв часу роботи — це максимальна кількість часу, на яке можна збільшититривалість роботи, не змінюючи при цьому термінів початку наступних робіт.Вільний резерв визначається по формулі

Pс(ij) = tр(j) — tp(i)- t(ij).

1.2.2 Метод аналізу й оцінкипрограм

Методи сіткового планування — методи, основна метаяких полягає в тім, щоб скоротити до мінімуму тривалість проекту. Ґрунтуються нарозроблених практично одночасно і незалежно методі критичного шляху МКП іметоді оцінки і перегляду планів PERT (Program Evaluation and ReviewTechnique). Перший метод розроблений у 1956 році для складання планів-графіківвеликих комплексів робіт з модернізації заводів фірми «Дюпон». Другийметод розроблений корпорацією «Локхид» і консалтинговою фірмою«Буз, Аллен энд Гамильтон» для реалізації великого проекту розробкиракетної системи «Поларис».

Якщов методі CPM тривалості планованих дій характеризуються детермінованимивеличинами, тобто час виконання дії відомо, то в методі PERT — випадковими, щохарактеризуються трьома видами оцінок: оптимістична, песимістична, найбільшймовірна тривалість. Тимчасові параметри сітьового графіка визначаються зааналогією з методом CPM, з тією лише різницею, що за час виконання робітприймається середнє значення.

Описанівище методи CPM і PERT є класичними і спочатку використовувалися незалежно другвід друга. Зараз вони складають єдиний метод сітьового планування і керування,що включає наступні три етапи: структурне планування, календарне планування,оперативне керування планом.

Етап структурногопланування починається зі складання переліку (упорядкованого) робіт, виконанняяких приведе до досягнення мети проекту. Потім визначаються тривалості робіт ібудується сітьовий графік, що є основою календарного планування.

1.3  Вітчизняний і закордонний досвідвикористання СУПС

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

Досягти реальногоскорочення термінів проектування при використанні локальних системавтоматизації неможливо. Відповідно до основної специфікації на створенняінтегрованої системи коло розв'язуваних задач повинне охоплювати всі стадіїпроектування, починаючи від передконтрактної документації, генераціїтривимірної моделі корпуса, оббудовування приміщень, мехчастини, трубопроводіві систем, электрочастини і т.і., випуску двох- і тривимірних робочих креслень,суднової звітної документації по всім спеціалізаціям, технологічну підготовкувиробництва аж до видачі керуючих програм для верстатів із ЧПУ, а такожвирішення задач по організації і керуванню виробництвом.

Комплексна(інтегрована) інформаційна система (КІС) — це сукупність технічних і програмнихзасобів підприємства, що реалізують ідеї і методи автоматизації. Комплекснаавтоматизація має на увазі переклад у площину комп'ютерних технологій всіх основнихділових процесів організації. Структура виробничого підприємства (об'єднання)дозволяє здійснити системний підхід у забезпеченні високого рівня взаємодіїпідрозділів на основі наскрізної комп'ютеризації всіх стадій створення суднашляхом розробки і впровадження інтегрованої системи автоматизованогопроектування, технологічної підготовки, організації і керування суднобудівнимвиробництвом з використанням єдиної бази даних.

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

Прикладом вітчизняних розробок є складова частинаінтегрованої системи – система нормування трудомісткості САНТ (розробник Г. І.Карпов).

Системаавтоматизованого нормування трудомісткості (САНТ) формує в єдиній базі данінормативи трудомісткостей технологічних операцій у різних видах суднобудівноговиробництва. В окремому випадку ці нормативи разом з розмірами (нормообразуючіпоказники) деталей корпусних конструкцій (САПР ТПП верфі) складуть основуавтоматизованого розрахунку норм часу виконання технологічних операцій задопомогою гнучких виробничих модулів обробки деталей з листового і профільногопрокату.

Інформаційні масивиСАНТ у єдиній базі даних містять аналітичні залежності нормативів часу,упорядкованих по ключових реквізитах, а також необхідні зварювальні дані.Визначено ключові реквізити (позначення — технологічних операцій, нормативівчасу, причин зміни трудомісткостей, коефіцієнтів серійності судна), щозабезпечують однозначну ідентифікацію нормативів часу кожної технологічноїоперації, а також інформаційний взаємозв'язок із САПР ТПП верфі.

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

У той же час якпоказав аналіз можливостей САПР реалізованих у вітчизняній суднобудівнійпромисловості, а також технічних можливостей апаратних засобів вітчизняноговиробництва, необхідно орієнтуватися на закордонних постачальників апаратного іпрограмного забезпечення при розробці і впровадженні інтегрування системи набазі закуплених апаратних і програмних засобів, адаптованих до умов кожногосуднобудівного підприємства (об'єднання) і використовуючих наявні власнірозробки.

Досить популярною СКПє російське ПЗ Spider Projects. Проте цяпрограма має досить багато недоліків, що обмежує її застосування усуднобудівництві.

З зарубіжних СУПпоширені Microsoft Project, Symantec Time Line, Open Plan, Primavera. Так  в українському судобудівництвідосить часто використовують MicrosoftProject.

На базі аналізуринку ПЗ СКП, виконаного консалтінговою компанією Gather, була складена порівняльна таблиця (табл. 2).

Таблиця 1 – порівняння MS Project, Primavera и Spider 

Критерий оценки

Microsoft Project 2002 Professional

Primavera P3e

Spider Project

Планирование проекта

Интерфейс аналогичен MS Office Да Нет Нет Интерактивный самоучитель Да Нет Нет Трудоемкость разработки структур работ Низкая Высокая Низкая Более чем 1 связь между работами Нет Да Нет

Планирование от «Объема»
("реалии управления в 80-х годах прошлого века")

Требуется знать методику
использования

Нет Да Структуры ресурсов Да Да Да Мастера предоставления и оптизации ресурсов для проекта Да Нет Нет Профили загрузки Да Да Нет

Разделяемые пулы
(Управление ресурсами проектного подразделения в целом)

Да Да Нет Управление портфелями проектов Да Да Нет Планирование затрат Да Да Да Сверхурочные затраты Да Да Нет

Оценка влияния рисков через имитационное моделирование
"а что если?"

Да Да Нет Анализ вероятности окончания проекта по условиям Нет Нет Да Интерактивная оптимизация планов проекта Да Да Нет Автоматическая оптимизация без интерактивности Да Да

Да

Отслеживание и управление проектом

План/фактный анализ Да Да Да Профессиональная проектная статистика на базе промышленного OLAP-сервера Да Нет Нет Автоматический запрос о статусе работе исполнителям Да Да Нет Информирование о статусе работ топ-менджеров Да Да Нет Отслеживание объемов Требуется знать методику  использования Нет Да Освоенный объем Да Да Да

Коллективная работа

Работа на основе промышленной СУБД (SQL Server) Да Да Нет Web-доступ к проектной информации Да Да Нет Web-анализ состояния ресурсов Да Да Нет Поддержка мобильных средств класса Palm Нет Да Нет Взаимодействие с исполнителями Да Да Нет Средства для информирования высшего управленческого звена Да Да Нет

Средства для принятия стратегических решений
топ-менеджерами

Да Да Нет Отслеживание запросов по контролю качества Да Нет Нет Интегрированная поддержка проектного документооборота Да Нет Нет

Поддержка высшего руководства

Средства для информирования высшего управленческого звена Да Да Нет

Средства для принятия стратегических решений
топ-менеджерами

Да Да Нет

Оценки применимости

Оптимальное сочетание цена/качество Да Нет Нет Сеть внедренцев Широкая Узкая Узкая Консалтинговая поддержка Широкая Узкая Узкая «Сегмент успеха» Лидерство в малых и средних компания

Ниша:
решения       свыше 350  раб. мест.

Компании с советскими методиками управления

1.4Змістовна постановка задачі

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

I.Розробка детермінованої моделі сітьового графіка, що дозволяє розрахуватичасові параметри проекту та зобразити модель у виді діаграми Ганта, тапроведення моделювання за отриманими початковими даними. Цю підзадачу можнарозбити на такі кроки:

1.   Розробитипрограмні структури для обраного представлення сітьового графа (СГ).

2.   Розробитипрограмне забезпечення для топологічного аналізу СГ на наявність обривів таконтурів.

3.   Розробитипрограмне забезпечення для розрахунку критичного шляху, визначення ранніх іпізніх термінів настання подій, ранніх і пізніх термінів початку і закінченняробіт, повних і вільних резервів часу виконання робіт.

4.   Результатирозрахунків представити у виді таблиці.

5.   Розробитипрограмне забезпечення для графічного представлення СГ у  вигляді діаграмиГанта.

II.Розробка алгоритмічного та програмного забезпечення для статистичногомоделювання сітьового графіка методом статистичних випробувань за отриманимипочатковими даними. Друга підзадача поділяється на два кроки:

1.   Описатитеоретичну суть та послідовність розрахунків імовірнісних характеристик параметрівпроекту.

2.   Навестиалгоритми основної програми, структуру вхідних і вихідних даних.

III.Основні висновки по роботі та аналіз досягнутихрезультатів.


2   РОЗРОБКА  ДЕТЕРМІНОВАНОЇ   МОДЕЛІ   СІТЬОВОГО   ГРАФІКА  І ПРОВЕДЕННЯ  МОДЕЛЮВАННЯ

 

2.1 Розробка програмного забезпечення для моделювання детермінованої моделі

Розробка програмних структур для СГ

Маємоорієнтований граф G =(V, E), кожній дузі vàw цього графа відповідає невід’ємна ціна С [v, w]. Загальна задача знаходженнянайдовших шляхів полягає в знаходженні для кожної вершини впорядкованої паривершин (v, w) любого шляху від вершини v до вершини w,довжина якого максимальна серед усіх можливих шляхів від v до w.

Існує прямий спосіброзв’язання цієї задачі, використовуючий алгоритм Флойда (R. W. Floyd).  Для визначеності установимо, що вершини графапослідовно пронумеровани від 1 до n. Алгоритм Флойда використовуєматрицю А розміру nхn, в якій обчислюються довжини найдовших шляхів. Напочатку А[i, j]=C[i, j] для усіх i≠j. Якщо дуга iàj відсутня, то C[i,j]=-∞. Кожний діагональний елемент матриці А дорівнює 0.

Над матрицею Авиконується n ітерацій. Після k-тої ітерації A[i, j]містить значення шляхів найменшої довжини з вершиниi в вершину j,які не проходять через вершини з номером, більшим за k. Іншими словами,між кінцевими вершинами шляху i и  j можуть знаходитися вершини,номера яких менше чи рівні k.

На k-тійітерації для обчислення матриці А застосовується наступна формула:

Ak[i,j] = min(Ak-1[i,j], Ak-1[i, k] + Ak-1[k, j]).

Нижній індекс kпозначає значення матриці А після k-тої ітерації, однак це означає, щоіснує n різних матриць, цей індекс використовується для скороченнязапису.

Для обчисленняAk[i,j] проводиться порівняння вершини Ak-1[i, j] (тобто ціна отшляху від вершини i до вершини j без участі вершини k чиіншої вершини з більш високим номером) з величиною Ak-1[i, k] + Ak-1[k,j] (ціна шляху від вершини i до вершини k плюс шляху відвершини k до вершини j). Якщо шлях через вершину kдорожче, ніж Ak-1[i, j], то величина Ak[i, j]змінюється.

Рівності Ak[i,k] = Ak-1[i, k] и Ak[k, j] = Ak-1[k, j]означають, що на  k-тій ітерації елементи матриці А, що стоять в k-тійстроці и в k-м стовпці, не змінюються. Усі обчислення можливо проводитилише з однією копією матриціА.

Щоб встановитипри необхідності найдорожчі шляхи, можна в алгоритмі Флойда ввести ще однуматрицю P, в якій елемент P[i, j] містить вершину k, отриману при знаходженні найбільшогозначення A[i, j]. Якщо P[i, j] =, то найдовший шлях з вершиниi ввершину j складається з однієї дуги iàj.

Модифікована версія алгоритму Флойда, щодозволяє відновити найдовші шляхи:

privatevoid AlgorithmFloyda(double [,]C, int [,]P)

{

      inti,j,k;

      intnn = (int)Math.Sqrt(C.Length)-1;

      double[,]A = new double[nn+1,nn+1];

      for(i=1;i<=nn; i++)

            for(j=1;j<=nn; j++)

            {

                 A[i,j]= C[i,j];

                 P[i,j]= 0;

            }

      for(i=1;i<=nn; i++)

            A[i,i]= 0;

      for(k=1;k<=nn; k++)

            for(i=1;i<=nn; i++)

                 for(j=1;j<=nn; j++)

                      if(A[i,k]+ A[k,j] >A[i,j])

                      {

                           A[i,j]=A[i,k]+A[k,j];

                           P[i,j]=k;

                      }

}

 

Програма повиннавиконувати топологічний аналіз СГ на існування обривів та контурів. Якщо у СГіснує i-та вершина, з якої не виходить жодна дуга-робота (тобто  i-йрядок матриці містить лише від’ємні числа), то знайден обрив. Тоді вершина, щовисить, видаляється з графа шляхом заміни i-го стовпця матриці числами,що символізують  -¥.Повідомлення про відповідні дії будуть записуватися у вихідний файл. Аналіз наіснування контурів буде проводиться під час знаходження максимального шляху міжвершинами: СГ є топологічно відсортованим, тому виявлення зворотної дуги vàw (v>w) свідчить про наявність контуру. У цьому разідля попередження зациклювання виконання програми буде припинятися.

Розрахунокчасових параметрів проекту буде виконуватися на основі наведеного алгоритмуФлойда, що знаходить найдовші шляхи між парами вершин.

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

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

Результатирозрахунків будуть записуватися до файлу у вигляді таблиць, що містять часовіпараметри СГ.

Також програма будеформувати графічне представлення СГ — діаграму  Ганта. На діаграмі кожнійроботі буде відповідати два часових параметра: безпосередньо тривалість роботита її повний резерв.

Структура файлувхідних даних: кожній роботі графа буде відповідати рядок, що складається здвох цілих та одного/двох дійсних чисел, вигляду

ij Назва роботи C_min C_max.


3   МОДЕЛЮВАННЯ СІТЬОВОГО ГРАФІКА МЕТОДОМСТАТИСТИЧНИХВИПРОБУВАНЬ

3.1 Описання теоретичної суті методу

Системи сітьовогопланування і керування в загальному випадку застосовуються для комплексівробіт, тривалість більшості яких не має нормативів.

У суднобудівнійпромисловості до них відносяться різні роботи на передпроектній і проектнійстадіях, науково-дослідницькі, дослідно-конструкторські й експериментальніроботи, а також роботи з виготовлення та іспиту нових експериментальних зразків.

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

1.            по однієї і тієї ж роботиоцінки даються декількома експертами;

2.            для робіт, що частоповторюються чи типових, установлюються найбільш імовірна tн.і.чи нормативна тривалість tнорм, що у розрахунках сітьовогографіка приймається за очікувану тривалість роботи tоч;

3.            даються дві оцінкитривалості роботи:

·             мінімальна tmin,тобто при найбільш сприятливому збігу обставин;

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

4.            даються три оцінкитривалості:

·             мінімальна;

·             найбільш імовірна;

·             максимальна.

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

·             математичного сподівання ідисперсії тривалості всього комплексу операцій (Lкр), щоописується даною сітьовою моделлю;

·             довірчих інтервалів, щоутримують значення тривалості комплексу операцій при заданих значенняхнадійності;

·             довірчої імовірностізакінчення комплексу робіт зі створення об'єкта в директивний термін призаданих значеннях довжини довірчих інтервалів;

·             математичних сподівань ідисперсій ранніх і пізніх термінів здійснення подій сітьової моделі;

·             довірчих інтервалів, щоутримують значення  ранніх і пізніх термінів здійснення подій сітьової моделіпри заданих значеннях надійності;

·             довірчих імовірностейздійснення подій сітьової моделі в запланований термін при заданих значенняхдовжини довірчих інтервалів;

У наш час розв’язанняперелічених задач здійснюється такими способами:

I.         зведенням імовірнісноїмоделі до детермінованого СГ, у якому математичні сподівання тривалості робітприймаються за їхні детерміновані тривалості;

II.        дослідженням імовірнісноїмоделі методом статистичних іспитів (метод Монте-Карло).

У випадку зведенняімовірнісної моделі до детермінованого СГ приймаються наступні допущення:

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

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

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

Внаслідок цього першедопущення не має теоретико-ймовірносного обґрунтування. При моделюванні заметодом Монте-Карло створюється послідовність реалізацій СГ з випадковимитривалостями робіт. При цьому змінюється довжина критичного шляху та інодісписок вершин, через які він проходить.

При моделюваннісітьового графіка методом статистичних випробувань       (м.  Монте-Карло)тривалості робіт реалізації СГ дорівнюють фіксованим значенням, отриманим звикористанням статистичного моделювання по початковим даним.

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

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

1)            апаратний — найбільшскладний, бо заснований на фізичному явищі;

2)            табличний — потребуєдодаткової пам`яті, бо заздалегідьбудуються таблиці випадкових чисел;

3)            програмний — за допомогоюспеціальних алгоритмів.

Останні два методи навідміну від першого генерують псевдовипадковічисла.

Існує програмнийметод конгруентних генераторів, що дозволяє отримати числа з рівномірнимзаконом розподілу. У ньому застосовується наступна формула:

                                                           />

де коефіцієнти a,b, c  не можуть бути довільними.В цій роботі a=97, b=1113, c=131072.

Повний період циклу цього генератора будеотриманий в тому разі, якщо коефіцієнти будуть обиратися наступним чином:

C = 2B, B — розрядністьвикористовуємого комп’ютера. Повний період буде 2B;

a — вибирається за формулою a = 1+4×k, де k — ціле число;

b — просте число відносно с (найбільшийспільний дільник буде 1).

/>


Рисунок 3 — Методвилучення

Метод вилучення (рис.3) дозволяє отримати випадкове число, якщо ми знаємо щільність розподілу f(x) випадкової величини Х. Його суть полягає в наступних діях:

·             спочатку генеруєтьсявипадкове число x з рівномірним розподілом на сегменті />;

·             потім ще одне — число Y,але на сегменті />;

·             ці два числа беруться яккоординати точки, якщо вона підпадає під криву f(x) (тобтов межах кривої щільності імовірності), то перше число X і є випадковимчислом з шуканим розподілом, якщо ні — знову генеруємо пари чисел.

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

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

3.2  Знаходженняхарактеристик вибіркового розподілу

При статистичній обробці експериментальнихданих випадкової величини X знаходять оцінки числових характеристик, якінайбільш часто зустрічаються, себто математичного сподівання і дисперсії:

1)            />         -математичне сподівання (вибіркове середнє);

2)            /> -виправлена (незміщена) дисперсія;

3)            />            - середньоквадратичне відхилення.

Розглянуті оцінкиназиваються точковими, так як вони визначаються одним числом, зображеним точкоюна числовій осі. Але при малому об’ємі вибірки точкова оцінка />може значно відрізнятися від оцінюваного параметру а.Тому у ряді задач матстатистики вимагається знайти не тільки параметр а,але  його точність та надійність.

Для визначенняточності оцінки /> в матстатистиці користуються надійним інтервалом, адля визначення надійності — надійною ймовірністю.

Нехай для параметра аодержана із досліду незсунена  оцінка />. Ми хочемо оцінити можливу при цьому помилку.Задаємо деяку велику ймовірність g(наприклад, g=0,9; 0,95; 0,99; ...) таку, щоб подію з ймовірністю g  можна було б вважати практично вірогідною, ізнайдемо таке значення d>0,для якого

/>                                          (3.1)

Подамо (1) у виглядіміри довіри

/>                              (3.2)

Рівність (2) показує,що невідомі значення параметра а з ймовірністю b попадають у інтервал       />                                                                                           (3.3)

Відмітимо, що тутневідоме значення параметра а являється випадковою величиною, а інтервалlg і випадковою величиною, так як положенняінтервалу на вісі залежить від в.п. /> (центр інтервалу), довжина також у загальномувипадку являється випадковою величиною. Тому ймовірність gу даному випадку тлумачать не як ймовірність попадання випадковоївеличини а в інтервал lg, а як ймовірність того, що випадковий інтервал lg  накриває точку а.

/>


Рисунок 4 — Надійний інтервал />  

Інтервал lg (рис. 4) називаєтьсянадійним інтервалом, а b — надійною ймовірністю абонадійністю. Розглянемо приклад знаходження надійного інтервалу дляматематичного сподівання.

Треба побудувати надійнийінтервал lg,що відповідає надійній ймовірності g,для математичного сподівання в.в. Х.

 Для цьогокористуються формулою  />.    (3.4)  Зміст співвідношення (4): з надійністю b можна стверджувати, що надійний інтервал /> накриває невідомий параметр mx;точність оцінки />.

Отже, поставлена вищезадача розв’язана. З рівності />  або  /> по таблиці функції Лапласа /> знаходимо аргумент t, якому відповідаєзначення функції Лапласа />.

Також необхіднопровести групування і побудову гістограми для Lкр, а такожз’ясувати чи розподілена дана в.в. за нормальним законом за допомогою критеріюПірсона.

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

Увесьінтервал, одержаних значень хі розбивають на часткові інтервали (якправило рівні): (х1, х2), (х2, х3),..., (хm+1, хm) і підраховують число nівеличини Х, яка попала в інтервал (хі, хі+1). Значення,які  попали на кінець інтервалу, відносять або до правого, або до лівогоінтервалу (хі, хі+1). Відмітимо, що />. На основі результатів обробки дослідів будуємотаблицю 2, що є групуванням або інтервальний варіаційний ряд.

   Таблиця 2 — Інтервальний варіаційний ряд

Ii

(х1, х2)

(х2, х3)

...

(хk, хk+1)

ni

n1

n2

...

nk

pi*

p1*

p2*

...

pk*

   Відкладемо на вісі ОХ точки х1, х2, х3,..., хk, хk+1,…, хm. На відрізку [хі, хі+1] як наоснові будуємо прямокутник, площа якого дорівнює рі*. Ізспособу побудови гістограми випливає, що повна площа її дорівнює 1.

/> <td/> />
Рисунок 5 — Гістограма і графікщільності випадкової величини Х

Очевидно, що призбільшенні числа  дослідів можна вибирати все більше і більше дрібні інтервали.При цьому гістограма (рис. 5) все більше і більше наближатиметься до деякоїкривої, що обмежує площу рівну одиниці. Неважко бачити, що крива уявляє собоюграфік щільності випадкової величини Х.

Критерій Пірсона дляперевірки гіпотези про нормальний розподіл обчислюється наступним чином:

/>,

де   /> - теоретичні частоти, що обчислюються як  />;                                      /> - емпіричні частоти;                                                                                                        

      /> - кількість інтервалів варіаційного ряду.

/>  -  функція щільності для нормального закону.

Якщо />, то гіпотеза приймається, в противному разі — відкидається.

3.2 Розробкапрограмного забезпечення для моделювання

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

3.3 Результати розрахунків

 

/>

Рисунок 1 – Временные параметры для tmin

/>

Рисунок 2 – Диаграмма Ганта для tmin

/>

Рисунок 3 – Временные параметры для tmax

/>

Рисунок 4 – Диаграмма Ганта для tmax

/>

Рисунок 5 – Временные параметры для tavg

/>

Рисунок 6 – Диаграмма Ганта для tavg

/>

Рисунок 7 –Розрахунок імовірностниххарактеристик L_kp

/>

Рисунок 8 – График статистическогораспределения T_kp 

Данное распределение можно считать нормальным

Результати виконання прогрими зберігаються у файлах.


ВИСНОВКИ

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

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


СПИСОКВИКОРИСТАНОЇ ЛІТЕРАТУРИ

1.   Ахо, Альфред, В.,Хопкрофт, Джон, Ульман, Джеффи, Д. Структуры данных и алгоритмы.: Пер. сангл.: Уч. пос. – М.: Издательский дом «Вильямс», 2000. – 384 с.: ил. – Парал.тит. англ.

2.   Брехов А. М., Волков В. В.Организация судостроительного производства в условиях рынка. – СПб.:Судостроение, 1992. – 224 с., ил.

3.   Колде Я. К. Практикум потеории вероятностей и математической статистике: Учеб. пособие для техникумов.– М.: Высш. шк., 1991. – 157 с.: ил.

4.   Полковников А.В.,Корпоративная система управления проектами, Электронный офис, 1997, Октябрь

5.    Полковников А.В., Линия на которой побеждаютвремя, Электронный офис, 1997, Октябрь


Додаток А – Текст программи

using System;

usingSystem.Drawing;

usingSystem.Drawing.Drawing2D;

usingSystem.Collections;

usingSystem.ComponentModel;

usingSystem.Windows.Forms;

usingSystem.Data;

usingSystem.IO;

usingSystem.Diagnostics;

namespaceWindowsApplication1

{

       publicclass Form1: System.Windows.Forms.Form

       {

             privateconst int mx=5;

             privateconst int ht=8;

             privateconst int zz=130;

             privateint n,m,k,v;

             staticint /*nij,*/n_ij;

             privatedouble Mx,S2x,Sx,X_2;

             privatedouble L_kp_min,L_kp_max,L_kp_avg;

             privatedouble L_kp_mat,L_kp_dsp,L_kp_otk;

             privateSystem.Windows.Forms.MainMenu mainMenu1;

             privateSystem.Windows.Forms.MenuItem menuItem1;

             privateSystem.Windows.Forms.MenuItem menuItem2;

             privateSystem.Windows.Forms.OpenFileDialog openFileDialog1;

             privateArrayList codi,codj,naim,mint,maxt;

             privatedouble []tp_min; private double []tp_max; private double []tp_avg;

             privatedouble []tn_min; private double []tn_max; private double []tn_avg;

             privatedouble []R_min; private double []R_max; private double []R_avg;

             privatedouble []r_min; private double []r_max; private double []r_avg;

             privatedouble [,]tpn_min; private double [,]tpn_max;

private double [,]tpn_avg;

             privatedouble [,]tnn_min; private double [,]tnn_max;

private double [,]tnn_avg;

             privatedouble [,]tpo_min; private double [,]tpo_max;

private double [,]tpo_avg;

             privatedouble [,]tno_min; private double [,]tno_max;

private double [,]tno_avg;

             privatedouble [,]Rn_min; private double [,]Rn_max;

private double [,]Rn_avg;

             privatedouble [,]Rcb_min; private double [,]Rcb_max;

private double [,]Rcb_avg;

             privatedouble [,]C_min; private double [,]C_max; private double [,]C_avg;

             privateint [,]P_min; private int [,]P_max; private int [,]P_avg;

             privatedouble [,]C_rev_min; private double [,]C_rev_max;

private double [,]C_rev_avg;

             privateint [,]P_rev_min; private int [,]P_rev_max;

private int [,]P_rev_avg;

             privateSystem.Windows.Forms.TabControl tabControl1;

             privateSystem.Windows.Forms.TabPage tabPage1;

             privateSystem.Windows.Forms.TabPage tabPage2;

             privateSystem.Windows.Forms.TabControl tabControl2;

             privateSystem.Windows.Forms.TabPage tabPage3;

             privateSystem.Windows.Forms.TabPage tabPage4;

             privateSystem.Windows.Forms.TabPage tabPage5;

             privateSystem.Windows.Forms.TabControl tabControl3;

             privateSystem.Windows.Forms.TabPage tabPage6;

             privateSystem.Windows.Forms.TabPage tabPage7;

             privateSystem.Windows.Forms.TabPage tabPage8;

             privateSystem.Windows.Forms.TabControl tabControl4;

             privateSystem.Windows.Forms.TabPage tabPage9;

             privateSystem.Windows.Forms.TabPage tabPage10;

             privateSystem.Windows.Forms.DataGrid dataGrid1;

             privateSystem.Windows.Forms.DataGrid dataGrid2;

             privateSystem.Windows.Forms.PictureBox pictureBox1;

             privateSystem.Windows.Forms.DataGrid dataGrid3;

             privateSystem.Windows.Forms.PictureBox pictureBox2;

             privateSystem.Windows.Forms.DataGrid dataGrid4;

             privateSystem.Windows.Forms.PictureBox pictureBox3;

             privateSystem.Windows.Forms.Label label1;

             privateSystem.Windows.Forms.Label label2;

             privateSystem.Windows.Forms.Label label3;

             privateSystem.Windows.Forms.MenuItem menuItem3;

             privateSystem.Windows.Forms.MenuItem menuItem4;

             privateSystem.Windows.Forms.Label label4;

             privateSystem.Windows.Forms.Label label5;

             privateSystem.Windows.Forms.Label label6;

             privateSystem.Windows.Forms.TabPage tabPage11;

             privateSystem.Windows.Forms.Label label7;

             privateSystem.Windows.Forms.Label label8;

             privateSystem.Windows.Forms.Label label9;

             privateSystem.Windows.Forms.PictureBox pictureBox4;

             privateSystem.Windows.Forms.Label label10;

             privateSystem.Windows.Forms.Button button1;

             privateSystem.ComponentModel.Container components = null;

             publicForm1()

             {

                    InitializeComponent();

             }

             protectedoverride void Dispose( bool disposing )

             {

                    if(disposing )

                    {

                           if(components != null)

                           {

                                  components.Dispose();

                           }

                    }

                    base.Dispose(disposing );

             }

             [STAThread]

             staticvoid Main()

             {

                    Application.Run(newForm1());

             }

             staticvoid Read_Data(string FileName,ArrayList codi,ArrayList codj,

ArrayList naim,ArrayList mint,ArrayList maxt)

             {

                    FileStreamf = new FileStream(FileName,FileMode.Open);

                    StreamReaderr = new StreamReader(f);

                                 

                    stringdelimStr = "\t";

                    char[] delimiter = delimStr.ToCharArray();

                    strings;

                    string[] split = null;

                   

                    codi.Add(0);

                    codj.Add(0);

                    naim.Add(0);

                    mint.Add(0);

                    maxt.Add(0);

                    while((s= r.ReadLine())!= null)

                    {

                           split= s.Split(delimiter,5);    

                           codi.Add(split[0]);

                           codj.Add(split[1]);

                           naim.Add(split[2]);

                           mint.Add(split[3]);

                           maxt.Add(split[4]);

                          

                    }

                   

                    r.Close();

                    f.Close();

             }

            

             privatevoid ShowGrid1(DataGrid grid,ArrayList codi, ArrayList codj,

ArrayList naim, ArrayList mint, ArrayList maxt)

             {

                    DataTabletab = new DataTable(«tabl»);

                    DataColumnc0 = new DataColumn(«Код работыi»);

                    DataColumnc1 = new DataColumn(«Код работыj»);

                    DataColumnc2 = new DataColumn(«Наименование работы»);

                    DataColumnc3 = new DataColumn(«Минимальное времяt»);

                    DataColumnc4 = new DataColumn(«Максимальное времяt»);

                   

                    tab.Columns.Add(c0);

                    tab.Columns.Add(c1);

                    tab.Columns.Add(c2);

                    tab.Columns.Add(c3);

                    tab.Columns.Add(c4);

                    for(inti=1; i<codi.Count; i++)

                    {

                           DataRowrow = tab.NewRow();

                           row[«Код работыi»] = codi[i];

                           row[«Кодработы j»] = codj[i];

                           row[«Наименованиеработы»] = naim[i];

                           row[«Минимальноевремя t»] = mint[i];

                           row[«Максимальноевремя t»] = maxt[i];

                                                     

                           tab.Rows.Add(row);

                    }

                   

                    grid.DataSource= tab;

             }

             privatevoid ShowGrid2(DataGrid grid,double [,]C, double [,]tpn,

double [,]tpo, double [,]tnn, double [,]tno, double [,]Rn, double[,]Rcb)

             {

                    intnn = (int)Math.Sqrt(C_avg.Length)-1;

                    DataTabletab2 = new DataTable(«tabl2»);

                    DataColumnc0 = new DataColumn(«Код i,j»);

                    DataColumnc1 = new DataColumn(«t(i,j)»);

                    DataColumnc2 = new DataColumn(«tpn(i,j)»);

                    DataColumnc3 = new DataColumn(«tpo(i,j)»);

                    DataColumnc4 = new DataColumn(«tnn(i,j)»);

                    DataColumnc5 = new DataColumn(«tno(i,j)»);

                    DataColumnc6 = new DataColumn(«Rn(i,j)»);

                    DataColumnc7 = new DataColumn(«Rcb(i,j)»);

                   

                    tab2.Columns.Add(c0);

                    tab2.Columns.Add(c1);

                    tab2.Columns.Add(c2);

                    tab2.Columns.Add(c3);

                    tab2.Columns.Add(c4);

                    tab2.Columns.Add(c5);

                    tab2.Columns.Add(c6);

                    tab2.Columns.Add(c7);

                   

                    stringstr;

                    n_ij=0;

                    for(inti=1; i<=nn; i++)

                           for(intj=1; j<=nn; j++)

                                  if(C[i,j]>=0)

                                  {

                                        DataRowrow = tab2.NewRow();

                                                           

                                        row[«Кодi,j»] = i.ToString()+"-"+j.ToString();

                                        str= String.Format("{0:F2}",C[i,j]);

                                        row[«t(i,j)»]= str;

                                        str= String.Format("{0:F2}",tpn[i,j]);

                                        row[«tpn(i,j)»]= str;

                                        str= String.Format("{0:F2}",tpo[i,j]);

                                        row[«tpo(i,j)»]= str;

                                        str= String.Format("{0:F2}",tnn[i,j]);

                                        row[«tnn(i,j)»]= str;

                                        str= String.Format("{0:F2}",tno[i,j]);

                                        row[«tno(i,j)»]= str;

                                        str= String.Format("{0:F2}",Rn[i,j]);

                                        row[«Rn(i,j)»]= str;

                                        str= String.Format("{0:F2}",Rcb[i,j]);

                                        row[«Rcb(i,j)»]= str;

                                                                  

                                        tab2.Rows.Add(row);        n_ij++;

                                  }

                    grid.DataSource= tab2;

             }

             privatevoid AlgorithmFloyda(double [,]C, int [,]P)

             {

                    inti,j,k;

                    intnn = (int)Math.Sqrt(C.Length)-1;

                    double[,]A = new double[nn+1,nn+1];

                    for(i=1;i<=nn; i++)

                           for(j=1;j<=nn; j++)

                           {

                                  A[i,j]= C[i,j];

                                  P[i,j]= 0;

                           }

                    for(i=1;i<=nn; i++)

                           A[i,i]= 0;

                    for(k=1;k<=nn; k++)

                           for(i=1;i<=nn; i++)

                                  for(j=1;j<=nn; j++)

                                        if(A[i,k]+ A[k,j] >A[i,j])

                                        {

                                               A[i,j]=A[i,k]+A[k,j];

                                               P[i,j]=k;

                                        }

             }

             privatevoid Path(int [,]P, double [,]C, int i, int j, ref double l,

ref int sec)

             {

                    intk;

                    k=P[i,j];

                    if(k!=0)

                    {

                           sec=k;

                           Path(P,C,i,k, ref l, ref sec);

                           l=l+C[k,j];

                           Path(P,C,k,j, ref l, ref sec);

                    }

             }

             privatedouble MaxPath(double [,]C, int [,]P, int i, int j)

             {

                    doublel;int sec_v;

                   

                    l=0;

                    sec_v=0;

                    Path(P,C,i,j,ref l, ref sec_v);

                    if(sec_v!=0)return l+C[i,sec_v];//между ними min одна вершина –

вторая

                    elsereturn C[i,j];

             }

             privatedouble GetMat(double tmin,double tmax,double tver)

             {

                    doubleavg;

                    avg= (tmin+4*tver+tmax)/6;

                    returnavg;

             }

             privatedouble GetDsp(double tmin,double tmax)

             {

                    doubleDs;

                    Ds= 0.4*Math.Pow(tmax-tmin, 2);

                    returnDs;

             }

             privatedouble GetOtk(double tmin,double tmax)

             {

                    doubleot;

                    ot= (tmax-tmin)/6;

                    returnot;

             }

             privatevoid GetPar(double [,]C, double []tp,double []tn, double [,]tpn,

double [,]tpo, double [,]tno, double [,]tnn, double [,]Rn, double[,]Rcb)

             {

                          

                    for(inti=1; i<=n; i++)

                           for(intj=1; j<=n; j++)

                                  if(C[i,j]>=0)

                                  {

                   

                                        //ранниесроки начала и окончания работы

                                        tpn[i,j]=tp[i];tpo[i,j]=tpn[i,j]+C[i,j];

                                        //поздниесроки начала и окончания работы

                                        tno[i,j]=tn[j];tnn[i,j]=tno[i,j]-C[i,j];

                                        //полныйрезерв времени работы

                                        Rn[i,j]=tno[i,j]-tpo[i,j];

                                        //свободныйрезерв времени работы

                                        Rcb[i,j]=tp[j]-tpo[i,j];

                                  }

                   

             }

             privatedouble GetNorm(Random r)

             {

                    doubleU1,U2,V1,V2,S,X1,Norm;

                    l1:

                    U1= r.NextDouble();

                    U2= r.NextDouble();

                    V1= 2*U1-1;

                    V2= 2*U2-1;

                    S= V1*V1+V2*V2;

                    if(S>=1)goto l1;

                    X1= V1*Math.Sqrt(-2*Math.Log(S,Math.E)/S);

                   

                    Norm= X1;

                    returnNorm;

             }

            

             privatedouble GetCC(Random r,double mint,double maxt,ref double Norm)

             {

                   

                    doubleC;

                    Norm= GetNorm(r);

                    C= mint+Norm*(maxt-mint);

                    returnC;

             }

            

             privateint GetMax(ArrayList codjj)

             {

                    intMax;

                    Max=0;

                    for(inti=1; i<codi.Count; i++)

                           Max=Math.Max(Max,Convert.ToInt32(codjj[i]));

                    returnMax;

             }

             privatedouble GetMax(double [,]C)

             {

                    doubleMax;

                    Max=0;

                    intnn = (int)Math.Sqrt(C.Length)-1;

                    for(inti=1; i<=nn; i++)

                           for(intj=1; j<=nn; j++)

                                  if(C[i,j]>=0)

                                        Max=Math.Max(Max,C[i,j]);

                    returnMax;

             }

            

private void menuItem2_Click(object sender, System.EventArgs e)

             {

                    inti,j;

                    openFileDialog1.FileName=«test.txt»;

                    openFileDialog1.ShowDialog();

                   

                    codi= new ArrayList();

                    codj= new ArrayList();

                    naim= new ArrayList();

                    mint= new ArrayList();

                    maxt= new ArrayList();

                   

                   

                    Read_Data(openFileDialog1.FileName,codi,codj,naim,mint,maxt);

                   

                    ShowGrid1(dataGrid1,codi,codj,naim,mint,maxt);

                   

            

                    n=GetMax(codj);

                   

            

                    C_min= new double[n+1,n+1]; C_max = new double[n+1,n+1];

C_avg = new double[n+1,n+1];

                    P_min= new int[n+1,n+1]; P_max = new int[n+1,n+1];

P_avg = new int[n+1,n+1];

C_rev_min= new double[n+1,n+1]; C_rev_max = new double[n+1,n+1]; C_rev_avg = newdouble[n+1,n+1];

                    P_rev_min= new int[n+1,n+1]; P_rev_max = new int[n+1,n+1];

P_rev_avg = new int[n+1,n+1];

            

                    ArrayListLi = new ArrayList();

                    for(intc=0; c<zz; c++)

                    {

                           for(i=1;i<=n; i++)

                                  for(j=1;j<=n; j++)

                                  {

                                        C_min[i,j]=-1000;

                                        C_max[i,j]=-1000;

                                        C_avg[i,j]=-1000;

                                  }

                           Randomr = new Random();

                           m=codi.Count;

                   

                           doublenrm=0;

                          

                           for(i=1;i<m; i++)

                           {

                                 C_min[Convert.ToInt32(codi[i]),

Convert.ToInt32(codj[i])]=Convert.ToDouble(mint[i]);

                                  C_max[Convert.ToInt32(codi[i]),

Convert.ToInt32(codj[i])]=Convert.ToDouble(maxt[i]);

                                 

C_avg[Convert.ToInt32(codi[i]),

Convert.ToInt32(codj[i])]=GetCC(r,C_min[Convert.ToInt32(codi[i]),Convert.ToInt32(codj[i])],C_max[Convert.ToInt32(codi[i]),Convert.ToInt32(codj[i])],refnrm);

                                 

                           }

                           for(i=1;i<=n; i++)

                                  for(j=1;j<=n; j++)

                                  {

                                        C_rev_min[n-j+1,n-i+1]=C_min[i,j];

                                        C_rev_max[n-j+1,n-i+1]=C_max[i,j];

                                        C_rev_avg[n-j+1,n-i+1]= C_avg[i,j];

//GetMat(C_rev_min[n-j+1,n-i+1],C_rev_max[n-j+1,

n-i+1]);

                                  }

                           AlgorithmFloyda(C_min,P_min);

                           AlgorithmFloyda(C_rev_min,P_rev_min);

                   

                           AlgorithmFloyda(C_max,P_max);

                           AlgorithmFloyda(C_rev_max,P_rev_max);

                           AlgorithmFloyda(C_avg,P_avg);

                           AlgorithmFloyda(C_rev_avg,P_rev_avg);

                           tp_min= new double[n+1]; tp_max = new double[n+1];

tp_avg = new double[n+1];

                           tn_min= new double[n+1]; tn_max = new double[n+1];

tn_avg = new double[n+1];

                           R_min= new double[n+1]; R_max = new double[n+1];

R_avg = new double[n+1];

                           r_min= new double[n+1]; r_max = new double[n+1];

r_avg = new double[n+1];

            

      

                           tp_min[1]=0;tp_max[1]=0; tp_avg[1]=0;

                           for(i=2;i<=n; i++)

                           {

                                  tp_min[i]=MaxPath(C_min,P_min,1,i);

                                  tp_max[i]=MaxPath(C_max,P_max,1,i);

                                  tp_avg[i]=MaxPath(C_avg,P_avg,1,i);

                           }

                   

                           L_kp_min=tp_min[n];L_kp_max=tp_max[n]; L_kp_avg = tp_avg[n];

Li.Add(L_kp_avg);

                    }

                    label1.Text= «L_kp = „+String.Format(“{0:F2}»,L_kp_min);

                    label2.Text= «L_kp = „+String.Format(“{0:F2}»,L_kp_max);

                    label3.Text= «L_kp = „+String.Format(“{0:F2}»,L_kp_avg);

                    L_kp_mat= GetMat(L_kp_min,L_kp_max,L_kp_avg); L_kp_otk =

GetOtk(L_kp_min,L_kp_max);

                    L_kp_dsp= Math.Pow(L_kp_otk,2);

                    tn_min[n]=L_kp_min;tn_max[n]=L_kp_max; tn_avg[n]=L_kp_avg;

                   

                    for(i=2;i<=n; i++)

                    {

                           tn_min[n-i+1]=L_kp_min-MaxPath(C_rev_min,P_rev_min, 1, i);

                           tn_max[n-i+1]=L_kp_max-MaxPath(C_rev_max,P_rev_max, 1, i);

                           tn_avg[n-i+1]=L_kp_avg-MaxPath(C_rev_avg,P_rev_avg, 1, i);

                    }

                    label4.Text=«Накритическом пути расположены следующие вершины: »;

                    label5.Text=«Накритическом пути расположены следующие вершины: »;

                    label6.Text=«Накритическом пути расположены следующие вершины: »;

                    for(i=1;i<=n; i++)

                    {

                           R_min[i]=tn_min[i]-tp_min[i];

                           R_max[i]=tn_max[i]-tp_max[i];

                           R_avg[i]=tn_avg[i]-tp_avg[i];

                          

                           if(R_min[i]==0)

                                  label4.Text+=i.ToString()+"";

                           if(R_max[i]==0)

                                  label5.Text+=i.ToString()+"";

                           if(R_avg[i]==0)

                                  label6.Text+=i.ToString()+"";

                          

                    }

                   

                   

                   

                    tpn_min= new double[n+1,n+1]; tpn_max = new double[n+1,n+1];

tpn_avg = new double[n+1,n+1];

                    tnn_min= new double[n+1,n+1]; tnn_max = new double[n+1,n+1];

tnn_avg = new double[n+1,n+1];

           

tpo_min = new double[n+1,n+1]; tpo_max = new double[n+1,n+1];

tpo_avg = new double[n+1,n+1];

                    tno_min= new double[n+1,n+1]; tno_max = new double[n+1,n+1];

tno_avg = new double[n+1,n+1];

                    Rn_min= new double[n+1,n+1]; Rn_max = new double[n+1,n+1];

Rn_avg = new double[n+1,n+1];

                    Rcb_min= new double[n+1,n+1]; Rcb_max = new double[n+1,n+1];

Rcb_avg = new double[n+1,n+1];

                   

                    /*nij=

*/GetPar(C_min,tp_min,tn_min,tpn_min,tpo_min,tno_min,tnn_min,

Rn_min,Rcb_min);

                   

                    ShowGrid2(dataGrid2,C_min,tpn_min,tpo_min, tnn_min, tno_min,

Rn_min, Rcb_min);

                                 

                    /*nij=

*/GetPar(C_max,tp_max,tn_max,tpn_max,tpo_max,tno_max,tnn_max,

Rn_max,Rcb_max);

                   

                    ShowGrid2(dataGrid3,C_max,tpn_max,tpo_max, tnn_max, tno_max,

Rn_max, Rcb_max);

GetPar(C_avg,tp_avg,tn_avg,tpn_avg,tpo_avg,tno_avg,tnn_avg,

Rn_avg,Rcb_avg);

                   

                    ShowGrid2(dataGrid4,C_avg,tpn_avg,tpo_avg, tnn_avg, tno_avg,

Rn_avg, Rcb_avg);

                   

                    k=(int)(1+3.32*Math.Log10(n));

                   

                    MainStatistics(Li,outMx,out S2x,out Sx,out X_2);

                   

                    label7.Text=«МатожиданиеT_kp=»+String.Format("{0:F2}",Mx);

                    label8.Text=«Дисперсия T_kp= „+String.Format(“{0:F2}»,S2x);

                    label9.Text=«Ср. кв. от.T_kp=»+String.Format("{0:F2}",Sx);

                    label10.Text=«Хі квадрат=»+String.Format("{0:F2}",X_2)+

", число ступеней свободы v="+v.ToString();

                   

             }

            

             privatevoid MainStatistics(ArrayList x,out double Mx,out double

S2x,out double Sx,out double X_2)

             {

                    inti, j;

                    double/*m2, m4,*/ x_max, x_min, h;

                    FileStreamf = new FileStream(«test.xls»,FileMode.Create);

                    StreamWriterw = new StreamWriter(f);

                   

                    int[]n_ = new int[k+1];

                    double[]p_ = new double [k+1];

                    double[]x_cp = new double [k+1];

                   

                    Mx=0;S2x=0; Sx=0;

                    x_max=Convert.ToDouble(x[0]);

                    x_min=Convert.ToDouble(x[0]);

                   

                    for(i=0;i<x.Count; i++)

                    {

                           if(x_max < Convert.ToDouble(x[i]))

x_max=Convert.ToDouble(x[i]);

                           if(x_min > Convert.ToDouble(x[i]))

x_min=Convert.ToDouble(x[i]);

                    }

                    h=(x_max-x_min)/k;

                    for(j=1;j<=k; j++)

                    {

                           p_[j]=0;

                           n_[j]=0;

                           x_cp[j]=x_min+h*(j-1)+h/2;

                    }

                    n_[1]=1;

                    for(i=0;i<x.Count; i++)

                           for(j=1;j<=k; j++)

                                  if((Convert.ToDouble(x[i]) > x_min+(j-1)*h) &&

(Convert.ToDouble(x[i]) <= x_min+j*h) )

                                  {

                                   n_[j]++;

                                   break;

                                  }

                    for(i=1;i<=k; i++)

                           Mx=Mx+x_cp[i]*n_[i];

                    Mx=Mx/x.Count;

                    for(i=1;i<=k; i++)

                           S2x=S2x+Math.Pow(x_cp[i]-Mx,2)*n_[i];

                    S2x=S2x/(x.Count-1);

                    Sx=Math.Sqrt(S2x);

                    X_2=0;

                    for(j=1;j<=k; j++)

                    {

                           p_[j]=h*Math.Exp(-Math.Pow(x_cp[j]-Mx,2)/(2*S2x))/(

Math.Sqrt(2*Math.PI)*Sx);

                           w.WriteLine(x_cp[j].ToString()+"\t"+p_[j].ToString());

                           X_2=X_2+Math.Pow(n_[j]-p_[j]*x.Count,2)/(p_[j]*x.Count);

                    }

                    v= k-3;

                    w.Close();f.Close();

             }

            

             privatevoid DrawGant(Graphics g,/*int n_ij,*/double [,]C,

double [,]tpn,double [,]tpo,double [,]tno,double [,]tnn)

             {

                    inti,j;

                    Penpn = new Pen(Color.Black);

                    Penp = new Pen(Color.Black);

                    Penp1 = new Pen(Color.Green,ht);

                    Penp2 = new Pen(Color.Red,ht);

                    Fontfnt = new Font(«Courier New»,ht);

                    SolidBrushsbr = new SolidBrush(Color.Black);

                    intdy=17;

                    floaty0,y1,y2,x0,x1,x2,yn,xn;

                    x0=10;y0=10;

                    x1=x0;y1=y0;

                    doublemax = GetMax(tno);

                    doubledx = max/ 10;

                    doublesx=0;

                    xn=x0+(float)max*mx;

                    yn=m-1+dy*n_ij;

                    pn.EndCap= LineCap.ArrowAnchor;

            

                    g.DrawLine(pn,x0,yn,xn,yn);

                    g.DrawString(«Работы»,fnt,sbr,x0,y0-10);

                    //g.DrawString(max.ToString(),fnt,sbr,x0+(float)max*mx,yn);

                                       

                    for(i=0;i<=10; i++)

                    {

                           if(i<10)g.DrawLine(p,x0+(float)sx*mx,yn-2,

x0+(float)sx*mx,yn+2);

                          

g.DrawString(String.Format("{0:F2}",sx),fnt,sbr,

x0+(float)sx*mx,yn);

                           sx+=dx;

                    }

            

                    g.DrawLine(pn,x0,yn,x0,y0);

                    g.DrawString(«Время»,fnt,sbr,xn+(float)dx*mx,yn);

                    for(i=1;i<=n; i++)

                           for(j=1;j<=n; j++)

                                  if(C[i,j]>=0)

                                  {

                                        x1=x0+(float)tpn[i,j]*mx;

                                        x2=x1+(float)C[i,j]*mx;

                                        y1+=dy;y2=y1;

                                        g.DrawLine(p1,x1,y1,x2,y2);

                                       

                                        if(tpo[i,j]!=tno[i,j])

                                        {

                                               x1=x2;

                                               x2=x1+(float)(tno[i,j]-tpo[i,j])*mx;

                                               g.DrawLine(p2,x1,y1,x2,y2);

                                        }

                                       

                                        g.DrawString(i.ToString()+"-

"+j.ToString(),fnt,sbr ,x2,y2-ht);

                                       

                                  }

             }

      

             privatevoid pictureBox1_Paint(object sender,

System.Windows.Forms.PaintEventArgs e)

             {

                   

                    Graphicsg = e.Graphics;

                    DrawGant(g,/*nij,*/C_min,tpn_min,tpo_min,tno_min,tnn_min);

                   

             }

             privatevoid pictureBox2_Paint(object sender,

System.Windows.Forms.PaintEventArgs e)

             {

                   

                    Graphicsg = e.Graphics;

                    DrawGant(g,/*nij,*/C_max,tpn_max,tpo_max,tno_max,tnn_max);

                   

             }

             privatevoid pictureBox3_Paint(object sender,

System.Windows.Forms.PaintEventArgs e)

             {

                    Graphicsg = e.Graphics;

                    DrawGant(g,/*nij,*/C_avg,tpn_avg,tpo_avg,tno_avg,tnn_avg);

             }

             privatevoid button1_Click(object sender, System.EventArgs e)

             {

                    Process.Start(«test.xls»);

             }

                        private voidbutton2_Click(object sender, System.EventArgs e)

             {

                    int n =(int)Math.Sqrt(C_avg.Length)-1;

                    FileStreamf =new FileStream(«tavg.xls»,FileMode.Create);

                    StreamWriterw = new StreamWriter(f);

                    w.WriteLine(«Кодi,j\tt(i,j)\ttpn(i,j)\ttpo(i,j)\ttnn(i,j)\ttno(i,j)\t

Rn(i,j)\tRcb(i,j)»);

                    for(inti=1; i<=n; i++)

                           for(intj=1; j<=n; j++)

                                  if(C_avg[i,j]>=0)

                                  {

                                        w.WriteLine(i.ToString()+"-

"+j.ToString()+"\t"+C_avg[i,j]+"\t"+tpn_avg[i,j]+"\t"+

tpo_avg[i,j]+"\t"+tnn_avg[i,j]+"\t"+tno_avg[i,j]+"\t"+

Rn_avg[i,j]+"\t"+Rcb_avg[i,j]);

                                  }

                    w.Close();

                    f.Close();

                    DialogResultresult = MessageBox.Show(

«Просмотреть отчет?»,"",MessageBoxButtons.YesNo);

                    if(result==DialogResult.Yes)

                           Process.Start(«tavg.xls»);

             }

             private voidbutton3_Click(object sender, System.EventArgs e)

             {

                    int n =(int)Math.Sqrt(C_min.Length)-1;

                    FileStreamf =new FileStream(«tmin.xls»,FileMode.Create);

                    StreamWriterw = new StreamWriter(f);

                    w.WriteLine(«Кодi,j\tt(i,j)\ttpn(i,j)\ttpo(i,j)\ttnn(i,j)\ttno(i,j)\t

Rn(i,j)\tRcb(i,j)»);

                    for(inti=1; i<=n; i++)

                           for(intj=1; j<=n; j++)

                                  if(C_min[i,j]>=0)

                                  {

                                        w.WriteLine(i.ToString()+"-"+j.ToString()+"\t"+

C_min[i,j]+"\t"+tpn_min[i,j]+"\t"+tpo_min[i,j]+"\t"+

tnn_min[i,j]+"\t"+tno_min[i,j]+"\t"+Rn_min[i,j]+"\t"+Rcb_min[i,j]);

                                  }

                    w.Close();

                    f.Close();

                    DialogResultresult = MessageBox.Show(

«Просмотреть отчет?»,"",MessageBoxButtons.YesNo);

                    if(result==DialogResult.Yes)

                           Process.Start(«tmin.xls»);

             }

             private voidbutton4_Click(object sender, System.EventArgs e)

             {

                    int n =(int)Math.Sqrt(C_max.Length)-1;

                    FileStreamf =new FileStream(«tmax.xls»,FileMode.Create);

                    StreamWriterw = new StreamWriter(f);

                    w.WriteLine(«Кодi,j\tt(i,j)\ttpn(i,j)\ttpo(i,j)\ttnn(i,j)\ttno(i,j)\t

Rn(i,j)\tRcb(i,j)»);

                    for(inti=1; i<=n; i++)

                           for(intj=1; j<=n; j++)

                                  if(C_max[i,j]>=0)

                                  {

                                        w.WriteLine(i.ToString()+"-"+j.ToString()+"\t"+

C_max[i,j]+"\t"+tpn_max[i,j]+"\t"+tpo_max[i,j]+"\t"+tnn_max[i,j]+"\t"+tno_max[i,j]+"\t"+Rn_max[i,j]+"\t"+Rcb_max[i,j]);

                                  }

                    w.Close();

                    f.Close();

                    DialogResultresult = MessageBox.Show(

«Просмотреть отчет?»,"",MessageBoxButtons.YesNo);

                    if(result==DialogResult.Yes)

                           Process.Start(«tmax.xls»);

             }

       }

}

еще рефераты
Еще работы по информатике, программированию