- •Мережі Петрі
- •3.1. Прості мережі Петрі
- •3.1.1. Розмітка мережі Петрі
- •3.1.2. Формальне визначення мереж Петрі
- •3.2. Моделювання систем за допомогою мереж Петрі
- •3.2.1. Розширення простих мереж Петрі
- •3.2.2. Формалізоване зображення моделі за допомогою мережі Петрі
- •3.2.3. Розширення можливостей вузлів під час моделювання
- •3.3.3. Розширення можливостей дуг під час моделювання
- •3.3.4. Розширення можливостей переходів під час моделювання
- •Висновки
- •Контрольні запитання та завдання
- •Сети Петри
- •Теория сетей Петри.
- •Простые сети Петри.
- •Цветные сети Петри.
3.2.3. Розширення можливостей вузлів під час моделювання
Подальше розширення можливостей мереж Петрі для виконання завдань моделювання пов'язане з переходом від використання вузлів з маркерами і переходів до використання сховищ даних (вузол з деякою структурою даних) і потоків даних.
Вище зазначалось, що в мережі Петрі всі допустимі стани моделі позначаються вузлами з маркерами. У загальному випадку вузли виступають як сховища даних заданого об'єму, а переходи — як потоки даних. Можливості вузлів мережі Петрі можна значно розширити, якщо маркерам призначати різні типи даних, наприклад рядки символів, цілі або дійсні числа, множини, структури, як це робиться в мовах програмування. Тоді у разі зображення вузлів з такими маркерами необхідно вказувати типи даних і визначати максимальну кількість маркерів кожного типу, які можуть знаходитись у вузлі.
Існує ще одна можливість розширення функцій вузлів — зазначити режим доступу до маркерів, тобто задати, яким чином маркери (дані) надходять до вузлів та як вони з них вилучаються. Це дає змогу формувати у вузлах черги маркерів подібно тому, як створюються черги вимог у СМО. У табл. 3.1 наведено основні режими доступу до вузлів.
Таблиця 3.1. Основні режими доступу до вузлів у розширеннях мереж Петрі
Режими доступу |
Опис |
RAM |
Принцип випадкового доступу. Маркер, який надійшов до вузла, розміщується в черзі випадково. У разі спрацювання переходу маркер, який вилучається з черги, вибирається випадково |
FIFO |
Принцип «першим прийшов — першим покинув». Маркер, який надійшов до вузла, розміщується в черзі останнім. У разі спрацювання переходу вилучається перший маркер черги |
LIFO |
Принцип «останнім прийшов — першим покинув». Маркер, який надійшов до вузла останнім, розміщується в черзі першим. У разі спрацювання переходу вилучається перший маркер черги |
FIFORAM |
Принцип «прийшов випадково — першим покинув». Маркер, який надійшов, розміщується в черзі випадково. У разі спрацювання переходу з черги вилучається перший маркер |
LIFORAM |
Принцип «прийшов випадково — останній першим покинув». Маркер, який надійшов, розміщується в черзі випадково. У разі спрацювання переходу з черги вилучається останній маркер |
Вибір режимів формування черги і вилучення із неї маркерів залежить від того, в якій послідовності потрібно перевіряти маркери у вузлах. Тому навряд чи можна дати загальну пораду відносно того, які режими доступу використовувати. У простих мережах Петрі автоматично використовується режим довільного доступу (порядок поставлення маркерів у чергу та порядок їх вилучення для них не має значення).
Розширення можливостей вузлів мереж Петрі є досить зручним засобом для моделювання матеріальних та інформаційних потоків у виробничих системах.
3.3.3. Розширення можливостей дуг під час моделювання
Зміни стану мережі Петрі, тобто переміщення маркерів, спричинені діями переходів, у разі спрацювання яких маркери вилучаються із одних вузлів і поміщаються в інші; таким чином формуються потоки даних. Способи вилучення і розміщення маркерів визначаються спрямованими дугами, які з'єднують вузли та переходи. У системах моделювання з кожною дугою можна пов'язати не тільки певний ваговий коефіцієнт (вагу), а й будь-яку функцію, що визначається як вираз дуги. У загальному випадку вираз дуги — це функція або значення (числове, символьне і т. ін.), згідно з яким збуджується перехід і змінюється положення маркера під час моделювання.
Якщо під час моделювання значення виразу дуги не змінюється, то для спрацювання переходу необхідна наявність у вузлі маркера, який співпадав би із значенням виразу дуги (рис. 3.13).
Рис. 3.13. Дуги з постійними виразами
Наприклад, лівий перехід, зображений на рис. 3.13, спрацьовує тільки за умови, що у вузлі Р1 знаходиться хоча б один маркер 1, у вузлі Р2 – хоча б один маркер # (у системі моделювання POSES++ символом # позначається чорний маркер) і у вузлі Р3 – один маркер типу b. Після спрацювання переходу зазначені маркери вилучаються із вузлів Р1, Р2 та Р3, а у вузол Р4 поміщається маркер #.
Дуги, вираз яких не є константою, найчастіше використовуються для моделювання фіксованих потоків даних. Дуги зі змінними виразами застосовуються в тих випадках, коли заздалегідь неможливо задати значення параметрів моделі, наприклад під час пошуку даних і перевірки деяких умов, що змінюються в процесі моделювання. Вираз дуги такого типу називається змінною відповідності. Змінні відповідності — це дані особливого типу, і їм не можна присвоїти значення явно, як звичайним змінним. Свої значення вони можуть отримувати тільки в разі збудження переходів.
На рис. 3.14 видно, що змінна х є значенням виразу дуги, яка з'єднує вузол Р1 і перехід Т1. Оскільки для вузла заданий режим FIFORAM і маркер 1 є першим у черзі вузла Р1, то змінній відповідності х присвоюється значення 1. Це ж значення присвоюється і виразу дуги, яка з'єднує перехід з вузлом Р2, для якого теж встановлений режим FIFORAM. Для вузла Р3 задано режим FIFO, тому змінній у присвоюється значення а. Таким чином, після спрацювання переходу у вузлі Р4 знаходяться маркери 1 та а.
Правило спрацювання переходу можна описати також таким чином. У вузлі Р1 знайти перший маркер і присвоїти його значення змінній відповідності х, тобто х = 1. Потім у вузлі Р2 знайти маркер із значенням, ідентичним х = 1. Після цього у вузлі Р3 знайти перший маркер у черзі (у даному випадку маркер а) і присвоїти його значення змінній відповідності у, тобто у = а. Після спрацювання переходу у вузлах Р1 і Р2 знищити маркер 1, а у вузлі Р3 — маркер а. Згенерувати у вузлі Р4 маркери, які складаються з комбінації значень (х, у).
Рис. 3.12. Дуги з використанням змінних відповідності
Якщо для переходу не задане обмеження стосовно кількості паралельних спрацювань, то перехід зразу ж може спрацювати повторно. У цьому випадку перевіряються маркери, які залишились у вхідних вузлах переходу, тобто маркери 2 та b. Ці значення присвоюються змінним відповідності дуг. У цьому разі значення х, які використовувались під час попереднього спрацювання, не враховуються.
Застосування змінних відповідності пов'язане з послідовністю перегляду вхідних дуг переходу. Якби в наведеному вище прикладі першою вхідною дугою переходу Т1 була дуга, що йде від переходу Р2, а не від Р1, то після спрацювання переходу у вузлі Р4 знаходились би маркери 2 і b.
Покажемо, яким чином можна спростити мережу Петрі, використовуючи вирази для дуг.
Приклад 3.3
Розглянемо ще один приклад — проблему філософів, що обідають, відому з літературних джерел як задачу Эдсгера В.Дейкстри. Це класичний приклад задачі, яку часто використовують для пояснення паралельних процесів і пов'язаних з ними умов блокування, чи взаємовиключення («зависання»), або для пояснення стратегії використання глобального ресурсу в моделях. Одночасно приклад ілюструє, наскільки важкі іноді для розуміння процеси, які виникають у дуже простих паралельних структурах.
За одним круглим столом (рис. 3.15) сидять п'ять філософів. Перед кожним із них стоїть тарілка з їжею, а між тарілками лежать палички для їжі (всього п'ять паличок). Деякий час кожний філософ зайнятий роздумами, а як зголодніє, він починає втамовувати голод. Для їжі кожному філософу потрібно взяти дві палички — спочатку ту, що зліва, а потім ту, що справа. Втамувавши голод, філософ кладе палички на місце і знову переходить до роздумів. Цей процес може тривати досить довго. Щоб поїсти, філософи конкурують між собою за палички для їжі, і, таким чином, палички для їжі є глобальним ресурсом у системі.
Рис. 3.15. Ілюстрація проблеми філософів, що обідають
Завдання полягає в тому, щоб побудувати таку модель, яка дала б змогу синхронізувати дії всіх філософів таким чином, щоб не виникло взаємного блокування моделі. Блокування може виникнути тоді, коли всі філософи сядуть за стіл і кожен з них намагатиметься одночасно взяти дві палички. У цьому разі виникає ситуація, коли кожен із філософів візьме лише одну паличку, і таким чином, жоден з них не зможе їсти. Такий розподіл глобального ресурсу називається зависанням мережі.
Під час побудови моделі слід ураховувати той важливий факт, що філософ повинен брати спочатку ліву паличку, а потім праву. Обидві палички брати одночасно заборонено. Неузгоджений доступ до паличок визначає критичний процес, який має бути глобально синхронізованим таким чином, щоб уникати конфліктів між філософами, наприклад у випадку, коли два філософи одночасно намагаються взяти одну й ту ж паличку.
Для формалізації моделі за допомогою мережі Петрі спочатку потрібно визначити об'єкти моделі і задати для них структури даних. Об'єктами моделі є п'ять філософів і п'ять паличок для їжі. Для кожного філософа необхідно визначити, які палички для їжі знаходяться зліва й справа від нього. Це можна легко зробити, якщо присвоїти номери філософам і паличкам (від 0 до 4). Паличці, яка лежить зліва від філософа, слід присвоїти той же номер, що й філософу, а паличці справа — на одиницю більший. Виняток буде зроблено тільки для четвертого філософа. Зліва від нього буде розташована паличка під номером 4, а справа — під номером 0. Таким чином, нумерацію паличок можна записати як
де
,
,
— номери лівої, правої палички та
філософа відповідно.
Очевидно, що одночасно можуть їсти тільки два філософи, тому що п'яти паличок для їжі вистачить тільки для двох.
Далі треба визначити стани об'єктів. Філософ може бути зайнятий роздумами або їжею. Ці можливі стани філософів позначимо як роздуми та їжа. Позначимо також можливі стани паличок як вільна і зайнята. Палички для їжі вважаються зайнятими, якщо філософ знаходиться в стані їжа. На початку моделювання всі філософи знаходились у стані роздуми, а палички для їжі — у стані вільна.
Після того, як визначено всі об'єкти моделі та їх можливі стани, можна задати процеси і дії, які будуть виконувати ці об'єкти (рис. 3.16).
Процес взяти:
філософ бере спочатку ліву, а потім праву паличку.
Процес покласти:
філософ кладе обидві палички на місце.
Щоб запобігти блокуванню моделі, кожний філософ повинен переходити від стану роздумів до їжі й навпаки в довільні моменти часу. Отже, для вузлів роздуми і їжа необхідно встановити режим доступу RAM.
Синхронізація доступу до паличок (єдиного глобального ресурсу системи), так само як і розв'язання проблеми блокування моделі, здійснюється автоматично під час перевірок правил дуг для спрацювання переходів. Незалежно від того, виконуються чи ні правила спрацювання переходів, модель ніколи не заблокується.
Отже, дії філософів можна описати такими правилами, номери яких позначено в дужках:
Процес взяти:
якщо паличка, номер якої збігається з номером філософа, перебуває в стані вільна (1),
паличка поряд з філософом, номер якої обчислюється як
,
теж перебуває в стані вільна
(2)і відповідний філософ з номером знаходиться в стані роздуми (3),
то дві палички для їжі, що знаходяться справа і зліва від філософа, позначити як такі, що знаходяться в стані зайняті (1), (2),
і позначити філософа як такого, що перейшов від стану роздуми до стану їжа (3), (4).
Процес покласти:
якщо філософ з певним номером перебуває в стані їжа (5),
змінити його стан від їжа до роздуми (5), (6)
і палички для їжі, номери яких збігаються з номером філософа та з номером, що обчислюється за формулою , перевести в стан вільна (7), (8)
За допомогою наведених правил можна сформулювати вирази дуг у моделі мережі Петрі. На рис. 3.16 зображено мережу Петрі для цієї моделі.
Рис. 3.16. Застосування мережі Петрі для вирішення проблеми філософів, що обідають
Незважаючи на складність такої проблеми, модель досить проста, і перетворення її у програму для моделювання доволі формальне.
