очевидна, не містить ніяких програмних хитрувань і очевидним чином кодує словесний опис завдання. Об'єкти класу Client не є активними учасниками процесу моделювання, так як всі дії по їх створенню, обробці і видаленню відбуваються всередині методів класу SuperMarket. Тому методу гіп у класу Client немає. p align="justify"> З якою метою задано умову скидання накопиченої статистики по істеченііпервого року? Справа в тому, що якщо існує стаціонарний режим, случайнийпроцесс досягає його незалежно від початкових умов. Але за яке времяето станеться, заздалегідь відповісти неможливо. Тому, якщо метою моделювання є отримання стаціонарних характеристик, вплив початкових умов на результати треба якимось чином нівелювати. Зробити це можна двумяспособамі: моделювати протягом тривалого часу, так що соотношеніевремен, проведених у стаціонарному і перехідному режимах, буде таким великим, що впливом перехідного режиму можна знехтувати; протягом деякого часу моделювати В«вхолостуВ» і лише потім, вважаючи, що стаціонарний режим вже досягнутий, включати режим збору статистики. Жоден із способів, зрозуміло, не дає стовідсоткової гарантії, оскільки заздалегідь нічого нельзясказать про тривалість сходження процесу до стаціонарного режиму. p align="justify"> Умова В«чорновогоВ» прогону протягом одного року з проміжним сбросомстатістікі реалізовано у функції main. Тут важливо учестьследующее принципову обставину. Після скидання статистики відновлення моделювання відбувається вже не з того стану об'єкта, з которогооно починалося. Тому дуже важливо, щоб коректність роботи методів незавісела від початкового стану об'єкта. Щоб проілюструвати етумисль, ми спеціально не стали вводити в число глобальних стачістіческіх змінних лічильник числа заявок, які покидають чергу, який необхідний дляподсчета середнього часу очікування. Небезпека підстерігає нас у випадку, еслізначеніе цього лічильника підраховувати побічно:
entered-rejected-satisfied-q_length + l.
де entered - лічильник всіх запитів;
rejected - лічильник втрачених запитів; satisfied - лічильник негайно обслужених запитів;
q_length - поточна довжина черги.
Здавалося б, все логічно: після всіх вирахувань залишаються тільки тезаявкі, які побували в черзі і вже покинули її. Тут необхідно, од-нако, дотримання однієї умови: у момент початку збору статистики чергу повинна бути порожня. Інакше ми отримаємо абсурдний результат у вигляді від'ємного значення лічильника (наприклад, в початковий момент часу-q_length), чтопріведет до некоректного підрахунку середнього часу очікування. Це утруднення-ня подолано наступним чином. Для класу SuperMarket вводиться додаткового-валий поле даних q_extra, яке ініціалізується поточної довжини черги момент завершення В«чорновогоВ» прогону. Тоді в методі Supertterket :: complete (), що імітує вступ замовлення і задоволення за р...