- Saved searches
- Use saved searches to filter your results more quickly
- naqswell/QueuingSystem
- Name already in use
- Sign In Required
- Launching GitHub Desktop
- Launching GitHub Desktop
- Launching Xcode
- Launching Visual Studio Code
- Latest commit
- Git stats
- Files
- README.md
- About
- Методы имитационного моделирования вероятностных распределений на языке программирования Python
- Методы моделирование случайных величин и генераторы случайных чисел python
- Методы моделирование вероятностных распределений с помощью python
- Заключение
- Saved searches
- Use saved searches to filter your results more quickly
- License
- vpv11110000/pyss
- Name already in use
- Sign In Required
- Launching GitHub Desktop
- Launching GitHub Desktop
- Launching Xcode
- Launching Visual Studio Code
- Latest commit
- Git stats
- Files
- README.rst
- About
Saved searches
Use saved searches to filter your results more quickly
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.
Python модель для эмулирования систем массового обслуживания
naqswell/QueuingSystem
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Sign In Required
Please sign in to use Codespaces.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
README.md
Программа на python для эмулирования СМО.
Emulation modeling — модель системы на основе аппаратного аналога, имитирующая поведение во времени при поступлении сигналов окружения, обеспечивающая наблюдение за изменением состояний. Разработка производилась с использованием языка программирования python в среде PyCharm с использованием графической библиотеки PyQt5.
Параметрами моделируемой ВС являются:
- источники (количество и тип);
- закон генерации заявок источниками (детерминированный или случайный);
- приборы (количество);
- закон обслуживания заявок приборами (детерминированный или случайный);
- емкость и тип буферной памяти (БП);
Источники имеют равномерный закон распределения; delta = random.uniform(self.bottom, self.top)
Приборы имеют экспоненциальный закон распределения; delta = random.expovariate(self.__lambd)
Дисциплины буферизации: на свободное место;
Дисциплины отказа: самая старая в буфере;
Дисциплины постановки на обслуживание: приоритет по номеру прибора;
Дисциплины выбора заявок на обслуживание. — приоритет по номеру прибора; — LIFO (последним пришел — первым обслужен).
Приложение содержит следующие модули:
- Request–содержит описание заявки. Реализует методы для получения этих описаний;
- Producer–реализует методы создания заявки и генерации времени заявки;
- Buffer–реализует методы проверки свободного места в буфере, добавления заявки в буфер, выбора заявки из буфера;
- Consumer–реализует методы проверки свободных приборов, загрузки заявки на прибор, удаления заявки из прибора;
- FunModule–реализует основной цикл работы системы;
- Main–реализует UI.
About
Python модель для эмулирования систем массового обслуживания
Методы имитационного моделирования вероятностных распределений на языке программирования Python
В данной статье рассмотрим методы имитационного моделирования на основе теории систем массового обслуживания, в которых широко используются элементы математической статистики и теории вероятностей. Целью данной статьи является разработка методов, которые можно использовать для создания моделей, в основе которых фигурируют вероятностные распределения и элементы массового обслуживая.
Прежде, чем приступить к разработке методов, определим ключевые подходы, которые мы будем использовать в процессе: генерация случайных величин, вероятностные распределения, а также некоторые элементы теории вероятностей и математической статистики. В результатах опытов увидим экспериментальную демонстрацию поведения вероятностных распределений и имитации случайных процессов. Всё это и даст нам инструментальную основу для создания различных имитационных моделей, в которых фигурируют вероятностные распределения.
Все методы моделирования данного исследования представлены на программном языке Python. Этот язык является распространённым инструментов в сфере научных исследований и сфере обучения.
В дальнейших этапах исследования, которые будут представлены в будущих статьях, перейдём к более сложным экспериментам: рассмотрим вероятностные распределения, которые не вошли рамки данной статьи, рассмотрим имитационное моделирования систем и сетей массового обслуживания, и также продемонстрируем программирование подобных моделей с использованием параллельных вычислений.
Методы моделирование случайных величин и генераторы случайных чисел python
Рассмотрим простые модели подбрасывания одного или нескольких игральных кубиков. Моделирование начнём с генерации случайных чисел. Задача генерации чисел и вопросы об истинной и квази-случайности в наши исследования не входят, но Вы можете найти данные обсуждения в других источниках. В наших моделях используется генератор псевдо-случайных величин Python. На начальном этапе, для наглядности изучения, можно повышать количество испытаний, наблюдая результат моделирования.
Начнём с генерации случайных величин. Методы их генерирования сводятся к использованию стандартных библиотек Python.
Модуль random из стандартной библиотеки предоставляет возможность получения случайных вещественных чисел в диапазоне от 0 до 1, случайных целых чисел в заданном диапазоне, случайного выбора элементов последовательности и многое другое:
Модуль random может использоваться, например, для перемешивания колоды карт в игре, случайного выбора изображения в программе демонстрации слайдов, в программах статистического моделирования и так далее. За дополнительной информацией обращайтесь к руководству по стандартной библиотеке языка Python.
Расширение NumPy, содержащее реализацию математических вычислений для Python благодаря комбинированию компилированных и оптимизированных библиотек расширения с языком Python NumPy превращает Python в мощный, эффективный и удобный инструмент математических вычислений.
Подробное описание модуля NumPy вы найдёте в официальной документации по этому пакету.
Методы моделирование вероятностных распределений с помощью python
Приступим к моделированию: будем подбрасывать игральный кубик. Ниже представлен листинг программирования модели подбрасывания одного кубика (рис.1). Кубик может принимать одно из шести значений.
import pylab import numpy # Количество испытаний trials = 500 # Массив значений values = numpy.random.randint(1, 7, size=trials) pylab.hist(values, bins=[0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5], edgecolor='white') pylab.xlabel('Значение') pylab.ylabel('Количества раз') pylab.title('Подбрасывание кубика ' + str(trials) + ' раз') pylab.show()
Рис.1. Листинг программирования модели подбрасывания одного кубика
В представленной программе задаём количество испытаний: сколько раз подбрасывается кубик, и массив: какое значение выпадает в каждом испытании. Результат выводим в виде гистограммы (рис.2).
Рассматривая результат, можно предположить, что распределение имеет равномерный характер. Увеличив число испытаний до 10 000 раз можно увидеть, что гистограмма имеет вид, подобный гистограмме равномерного распределения.
Следующим испытанием рассмотрим модель подбрасывания двух игральных кубиков. Код программы при этом незначительно измениться (рис.3).
Рис.2. Результаты моделирования подбрасывания одного кубика
. # Массив значений values = [] for i in range(trials): values.append(numpy.random.randint(1, 7) + numpy.random.randint(1, 7)) pylab.hist(values, bins=[0.5, 1.5, 2.5, 3.5, 4.5, 5.5, 6.5, 7.5, 8.5, 9.5, 10.5, 11.5, 12.5, 13.5], facecolor='green', edgecolor='white') .
Рис.3. Часть изменённого листинга для программирования модели подбрасывания двух кубиков
В представленном листинге значительным изменением является присвоение значения массиву, в который записываем выпавшие значения уже двух кубиков. Вторым изменением, менее значительным, является представления гистограммы соответствующих вариантов значений. Результат выполнения программы представлен на рис.4.
Получив результат моделирования подбрасывания двух кубиков рассмотрим задачу моделирования нормального (Гаусс) распределения и насколько она коррелирует с задачей моделирования подбрасывания нескольких кубиков. Код программы также меняется незначительно: меняется всего одна строка присваивания значений массиву (рис.5).
Рис.4. Результаты моделирования подбрасывания двух кубиков
. # Массив значений values = [] for i in range(trials): mu = 7 sigma = 2.4 values.append(random.normalvariate(mu, sigma)) .
Рис.5. Часть изменённого листинга для программирования модели нормального распределения
На представленном листинге используется метод normalvariate библиотеки random, генерирующий величины с нормальным вероятностным распределением со параметрами mu и sigma, которые являются среднем значением и стандартным отклонением распределения соответственно. Результат выполнения программы представлен на рис.6.
Рис.6. Результаты моделирования нормального распределения
Заключительным этапом является моделирование экспоненциального распределения. Экспоненциальное распределение часто используется при моделировании распределения (длительности) интервалов между моментами поступления заявок в системах массового обслуживания разного типа. Листинг также отличается незначительно от остальных листингов программ, представленных в нашем исследовании (рис.7).
Результат моделирования представлен на рис.8.
. lambd = 10 # Массив значений values = [] for i in range(trials): values.append(random.expovariate(lambd)) pylab.hist(values, 20, facecolor='lightgreen', edgecolor='white') .
Рис.7. Часть изменённого листинга для программирования модели экспоненциального распределения
Рис.8. Результаты моделирования экспоненциального распределения
Заключение
В этой статье были рассмотрены несколько программных реализаций моделей вероятностных распределений на языке Python. Эти модели дают основу для проведения собственных экспериментов и исследований.
На данном этапе представлены только некоторые методы и подходы, и в дальнейшем, автор представит дополнительные методы для моделирования с использованием вероятностных распределений, языка программирования Python и теории массового обслуживания.
Saved searches
Use saved searches to filter your results more quickly
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session. You switched accounts on another tab or window. Reload to refresh your session.
PySS. Моделирование систем массового обслуживания
License
vpv11110000/pyss
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Name already in use
A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Sign In Required
Please sign in to use Codespaces.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
README.rst
PySS. Моделирование систем массового обслуживания
Проект находится в стадии формирования документации и завершения доработки примеров.
Основной функционал системы моделирования позволяет формировать модели.
При разработке использовались:
[1] | «Учебное руководство по системе GPSS World» |
[2] | Б.Я.Советов, Моделирование систем. Практикум: Учеб пособие для вузов/Б.Я. Советов, С.А. Яковлев.- 2-е изд., перераб. и доп.-М.:Высш. шк., 2003.-295 с.: ил. |
[3] | http://textarchive.ru |
[4] | http://www.intuit.ru/studies/courses/643/499/lecture/11361?page=1 |
и многие другие хорошие материалы.
- docs\ документация (2017-08-31 заготовка)
- examples\ примеры из источников [1] [2]
- other\ примеры случайных распределений (2017-08-31 требуется доработка)
- pyss\ система моделирования
- tests\ тесты
- 1_example_3_4.
- 1_example_3_5.
- 1_example_3_6.
- 1_example_3_7.
- 1_example_3_8.
- 1_example_3_9.
- Пример с использованием Gate (1) 1_example_3_13.
- Пример с использованием Gate (2) 1_example_3_14.
- Пример с использованием Gate (3) 1_example_3_15.
- Пример с использованием Gate (4) 1_example_3_16.
- Пример с использованием Gate (5) 1_example_3_17.
- manufact.
- ordernt.
- periodic.
- qcontrol.
- telephone.
- turnstil.
- tvrepair.
About
PySS. Моделирование систем массового обслуживания