<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Электронный научно-практический журнал «Современная техника и технологии» &#187; simulation modelling</title>
	<atom:link href="http://technology.snauka.ru/tags/simulation-modelling/feed" rel="self" type="application/rss+xml" />
	<link>https://technology.snauka.ru</link>
	<description></description>
	<lastBuildDate>Fri, 30 Jan 2026 18:56:12 +0000</lastBuildDate>
	<language>ru</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>Имитационное моделирование процесса обслуживания читателей библиотеки средствами программного комплекса AnyLogic</title>
		<link>https://technology.snauka.ru/2016/08/10481</link>
		<comments>https://technology.snauka.ru/2016/08/10481#comments</comments>
		<pubDate>Mon, 29 Aug 2016 12:21:20 +0000</pubDate>
		<dc:creator>Буранбаев Айдар Маратович</dc:creator>
				<category><![CDATA[Общая рубрика]]></category>
		<category><![CDATA[logistics]]></category>
		<category><![CDATA[mathematical modelling]]></category>
		<category><![CDATA[queueing theory]]></category>
		<category><![CDATA[simulation modelling]]></category>
		<category><![CDATA[имитационное моделирование]]></category>
		<category><![CDATA[логистика]]></category>
		<category><![CDATA[математическое моделирование]]></category>
		<category><![CDATA[система массового обслуживания]]></category>

		<guid isPermaLink="false">https://technology.snauka.ru/?p=10481</guid>
		<description><![CDATA[Имитационное моделирование – один из самых эффективных способов описания и анализа процессов. Оно является частным случаем математического моделирования, но в отличие от него в имитационном моделировании присутствует возможность достаточно точно описывать большое число объектов, для которых не разработаны аналитические модели или методы решения их моделей. Обеспечение управления бизнес-процессами, решение задач проектирования и исследования технических, экономических, [...]]]></description>
			<content:encoded><![CDATA[<p style="text-align: justify;"><span>Имитационное моделирование – один из самых эффективных способов описания и анализа процессов. Оно является частным случаем математического моделирования, но в отличие от него в имитационном моделировании присутствует возможность достаточно точно описывать большое число объектов, для которых не разработаны аналитические модели или методы решения их моделей.<br />
</span></p>
<p style="text-align: justify;"><span>Обеспечение управления бизнес-процессами, решение задач проектирования и исследования технических, экономических, организационных и прочих разновидностей систем в современности невозможно без привлечения математического моделирования в качестве системной категории. Одним из актуальнейших направлений является имитационное моделирование с использованием компьютерных технологий.<br />
</span></p>
<p style="text-align: justify;"><span>В рамках этой статьи создадим имитационную модель системы массового обслуживания с общей очередью и несколькими каналами обслуживания. В качестве предметной области был выбран процесс выдачи книг по запросам читателей библиотеки. Для моделирования воспользуемся программным комплексом AnyLogic. Данный продукт способен составлять модели с использованием основных парадигм имитационного моделирования, таких как дискретно-событийное моделирование, системная динамика и агентное моделирование. Прибегнем к использованию агента в системе, который будет играть роль каждого посетителя библиотеки, вводить их в очередь и затем выводить после обслуживания на одном из каналов.<br />
</span></p>
<p style="text-align: justify;"><span>Пусть количество каналов будет равно трём, в понятиях предметной области это будет значит, что читателей будет обслуживать три библиотекаря. Сам процесс обслуживания меняться от числа каналов не будет, изменения будут претерпевать количество условий перехода на конкретный канал обслуживания, что можно заметить по приведённой ниже блок-схеме.<br />
</span></p>
<p style="text-align: center;"><img src="https://technology.snauka.ru/wp-content/uploads/2016/08/082916_1220_1.png" alt="" /></p>
<p style="text-align: center;"><span>Рисунок 1 – Блок-схема обслуживания посетителей<br />
</span></p>
<p style="text-align: justify;"><span>Теперь перейдём к непосредственному моделированию системы массового обслуживания. Для этого достаточно будет стандартных блоков программы. Ниже представлено изображение созданной модели.<br />
</span></p>
<p style="text-align: center;"><img src="https://technology.snauka.ru/wp-content/uploads/2016/08/082916_1220_2.png" alt="" /><span><br />
</span></p>
<p style="text-align: center;"><span>Рисунок 2 – Моделирование деятельности библиотеки<br />
</span></p>
<p style="text-align: justify;"><span>Для незнакомых с инструментарием AnyLogic приведём описание каждого блока системы. Индекс n обозначает номер канала обслуживания.<br />
</span></p>
<p style="text-align: justify;"><span>Таблица 1 – Описание блоков системы AnyLogic<br />
</span></p>
<div>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 128px;" />
<col style="width: 233px;" />
<col style="width: 299px;" /></colgroup>
<tbody valign="top">
<tr>
<td style="padding-left: 7px; padding-right: 7px; border: solid 1pt;"><span>Название блока</span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 1pt; border-left: none; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: justify;"><span>Тип блока</span></p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 1pt; border-left: none; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: justify;"><span>Описание</span></p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 1pt; border-bottom: solid 1pt; border-right: solid 1pt;"><span>Посетители</span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: justify;"><span>Source</span></p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: justify;"><span>Равномерный поток с почасовой интенсивностью генерации заявок</span></p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 1pt; border-bottom: solid 1pt; border-right: solid 1pt;"><span>ОчВход/ОчВыход</span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: justify;"><span>TimeMeasureStart/TimeMeasureEnd</span></p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: justify;"><span>Подсчёт времени, проводимого в очереди</span></p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 1pt; border-bottom: solid 1pt; border-right: solid 1pt;"><span>Очередь</span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: justify;"><span>Queue</span></p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: justify;"><span>Очередь неограниченного размера</span></p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 1pt; border-bottom: solid 1pt; border-right: solid 1pt;"><span>Старт/Финиш</span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: justify;"><span>TimeMeasureStart/TimeMeasureEnd</span></p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: justify;"><span>Подсчёт времени в ожидании книги</span></p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 1pt; border-bottom: solid 1pt; border-right: solid 1pt;"><span>Библиотекарь[n]</span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: justify;"><span>SelectOutput</span></p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: justify;"><span>Выбор на основе того, присутствует ли дольше бездействующий библиотекарь</span></p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 1pt; border-bottom: solid 1pt; border-right: solid 1pt;"><span>Ушёл[n]</span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: justify;"><span>Hold</span></p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: justify;"><span>Блокируется при уходе библиотекаря в хранилище</span></p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 1pt; border-bottom: solid 1pt; border-right: solid 1pt;"><span>Хранилище[n]</span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: justify;"><span>Delay</span></p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: justify;"><span>Triangular-распределение затраченного на поход в хранилище времени</span></p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 1pt; border-bottom: solid 1pt; border-right: solid 1pt;"><span>Поиск[n]</span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: justify;"><span>Delay</span></p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: justify;"><span>Normal-распределение затраченного на поиск книг времени</span></p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 1pt; border-bottom: solid 1pt; border-right: solid 1pt;"><span>Найдены[n]</span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: justify;"><span>Queue</span></p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: justify;"><span>Очередь перед блокиратором</span></p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 1pt; border-bottom: solid 1pt; border-right: solid 1pt;"><span>Обратно[n]</span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: justify;"><span>Hold</span></p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: justify;"><span>Блокируется до нахождения всех книг</span></p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 1pt; border-bottom: solid 1pt; border-right: solid 1pt;"><span>Выдача[n]</span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: justify;"><span>Delay</span></p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: justify;"><span>Triangular-распределение затраченного на возвращение</span></p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 1pt; border-bottom: solid 1pt; border-right: solid 1pt;"><span>Обслужены</span></td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: justify;"><span>Sink</span></p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: justify;"><span>Заявка уничтожается</span></p>
</td>
</tr>
</tbody>
</table>
</div>
<p style="text-align: justify;"><span>Также немаловажными являются дополнительные параметры агента, используемые для определения поведения читателя библиотеки. Приведём их в отдельной таблице.<br />
</span></p>
<p style="text-align: justify;"><span>Таблица 2 – Параметры агента<br />
</span></p>
<div>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 128px;" />
<col style="width: 532px;" /></colgroup>
<tbody valign="top">
<tr>
<td style="padding-left: 7px; padding-right: 7px; border: solid 1pt;">
<p style="text-align: justify;"><span>Название параметра</span></p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 1pt; border-left: none; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: justify;"><span>Назначение</span></p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 1pt; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: justify;"><span>free[n]</span></p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: justify;"><span>Подсчёт времени бездействия библиотекарей через событие event</span></p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 1pt; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: justify;"><span>busy[n]</span></p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: justify;"><span>Булевый оператор бездействия, при false идёт подсчёт времени бездействия</span></p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 1pt; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: justify;"><span>req[n]</span></p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: justify;"><span>Хранение числа забранных библиотекарем заявок, используется для вычисления времени задержек</span></p>
</td>
</tr>
</tbody>
</table>
</div>
<p style="text-align: justify;"><span>Стоит упомянуть, что в AnyLogic допускается использование языка Java для описания событий, их обработчиков и прочего. Например, упомянутое в таблице выше событие event подсчитывает время бездействия каждого библиотекаря, активируясь каждую единицу модельного времени:<br />
</span></p>
<p><span>System.out.println(&#8220;&#8212;&#8211;&#8221;);<br />
</span></p>
<p style="text-align: justify;"><span>if (this.busy1==false) {this.free1++;} else {this.free1=0;} System.out.println(free1);<br />
</span></p>
<p><span>if (this.busy2==false) {this.free2++;} else {this.free2=0;} System.out.println(free2);<br />
</span></p>
<p><span>if (this.busy3==false) {this.free3++;} else {this.free3=0;} System.out.println(free3);<br />
</span></p>
<p><span>System.out.println(&#8220;&#8212;&#8211;&#8221;);<br />
</span></p>
<p style="text-align: justify;"><span>В некоторых блоках модели также используется Java-код, продемонстрируем её в ещё одной таблице.<br />
</span></p>
<p style="text-align: justify;"><span>Таблица 3 – Использование Java-кодов в модели<br />
</span></p>
<div>
<table style="border-collapse: collapse;" border="0">
<colgroup>
<col style="width: 118px;" />
<col style="width: 542px;" /></colgroup>
<tbody valign="top">
<tr>
<td style="padding-left: 7px; padding-right: 7px; border: solid 1pt;">
<p style="text-align: justify;"><span>Название блока</span></p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: solid 1pt; border-left: none; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: justify;"><span>Код блока</span></p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 1pt; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: justify;"><span>Очередь</span></p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: justify;"><span>При входе: queuesize.update()</span></p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 1pt; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: justify;"><span>Библиотекарь[n]</span></p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: justify;"><span>Условие (в зависимости от количества следующих библиотекарей, в данной случае такой один): Ушёл[n].isBlocked()==false &amp;&amp; !(agent.free[n+1]==max(agent.free[n+1],agent.free[n]) &amp;&amp; Ушёл[n+1].isBlocked()==false)<br />
</span></p>
<p style="text-align: justify;"><span>При выходе (true): agent.busy[n]=true; agent.free[n]=0;</span></p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 1pt; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: justify;"><span>Хранилище[n]</span></p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: justify;"><span>Время задержки: triangular( 0.5, 1, 1.5 )<br />
</span></p>
<p style="text-align: justify;"><span>При входе: if (Хранилище[n].size()==4 || Очередь.size()==0) Ушёл[n].block()<br />
</span></p>
<p style="text-align: justify;"><span>При подходе к выходу: agent.req[n]=Хранилище[n].size(); if(Хранилище[n].size()&gt;0) {reqdistr[n].update(); reqdistr_sum.update();}</span></p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 1pt; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: justify;"><span>Поиск[n]</span></p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: justify;"><span>Время задержки: normal(agent.req[n]*0.2,agent.req[n]*3)<br />
</span></p>
<p style="text-align: justify;"><span>При входе: Обратно[n].block()</span></p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 1pt; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: justify;"><span>Найдены[n]</span></p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: justify;"><span>При входе: if (Поиск[n].size()==0) Обратно[n].unblock()</span></p>
</td>
</tr>
<tr>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: solid 1pt; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: justify;"><span>Выдача[n]</span></p>
</td>
<td style="padding-left: 7px; padding-right: 7px; border-top: none; border-left: none; border-bottom: solid 1pt; border-right: solid 1pt;">
<p style="text-align: justify;"><span>Время задержки: triangular( 1, 2, 3)*agent.req[n]<br />
</span></p>
<p style="text-align: justify;"><span>При выходе: if(Хранилище[n].size()==0 &amp;&amp; Поиск[n].size()==0 &amp;&amp; Выдача[n].size()==0) Ушёл[n].unblock(); agent.busy[n]=false;</span></p>
</td>
</tr>
</tbody>
</table>
</div>
<p style="text-align: justify;"><span>Таким образом, модель воплотила первоначальную задумку и стала полностью функциональной. Будет нелишним собрать некоторую статистику с созданной модели, чему могут поспособствовать элементы AnyLogic из палитры Презентация. На скриншоте ниже показана статистика, собираемая во время работы системы с пятью каналами.<br />
</span></p>
<p style="text-align: center;"><img src="https://technology.snauka.ru/wp-content/uploads/2016/08/082916_1220_3.png" alt="" /><span><br />
</span></p>
<p style="text-align: center;"><span>Рисунок 3 – Сбор статистики в окне симуляции<br />
</span></p>
<p style="text-align: justify;"><span>Модель также возможно представить в трёх измерениях, отдельно разметив точки размещения агентов при прохождении определённых блоков системы. Примером такого отображения модели показан ниже.<br />
</span></p>
<p style="text-align: center;"><img src="https://technology.snauka.ru/wp-content/uploads/2016/08/082916_1220_4.png" alt="" /><span><br />
</span></p>
<p style="text-align: center;"><span>Рисунок 4 – Трёхмерная анимация модели с пятью библиотекарями<br />
</span></p>
<p style="text-align: justify;"><span>Подведём итог: моделирование уже давно является одним из важнейших аспектов, принимаемых в расчёт в процессе принятия решений, при использовании автоматизированных программных пакетов и имитационного моделирования, на основе которого и реализуется такое ПО, полезность моделирования как такового повышается за счёт возможности увидеть воочию, как будет вести себя имитируемый процесс и насколько эффективны будут его показатели.</span></p>
]]></content:encoded>
			<wfw:commentRss>https://technology.snauka.ru/2016/08/10481/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
