183938 (Имитационное моделирование работы парикмахерской), страница 2

2016-07-30СтудИзба

Описание файла

Документ из архива "Имитационное моделирование работы парикмахерской", который расположен в категории "". Всё это находится в предмете "экономико-математическое моделирование" из , которые можно найти в файловом архиве . Не смотря на прямую связь этого архива с , его также можно найти и в других разделах. Архив можно найти в разделе "курсовые/домашние работы", в предмете "экономико-математическое моделирование" в общих файлах.

Онлайн просмотр документа "183938"

Текст 2 страницы из документа "183938"

Формально схема вычисления может быть определена следующим образом: = С, (mod ), где i-ый член псевдослучайной последовательности, С – некоторая константа, m – разрядность целочисленного регистра ЭВМ. Качество полученной псевдослучайной последовательности зависит от выбранного значения константы С. Установлено, что хороший результат достигается при выборе ее значения равным максимальной нечетной степени числа 5, помещающегося в числовом регистре фиксированной разрядности. Для 32-х разрядного регистра ЭВМ это число будет .

1.2.4 Равномерное распределение

Случайная величина ξ, с равномерным распределением на отрезке [а,b] описывается функцией плотности вероятности:

P(x)=

a b

Рис.2 Равномерное распределение

Математическое ожидание

Для вычисления дисперсии вначале вычислим математическое ожидание квадрата этой случайной величины:

Теперь:

=

1.2.5 Моделирование дискретной случайной величины

Предположим вначале, что нам требуется смоделировать простейшую дискретную случайную величину, принимающую два значения с равными вероятностями. Эта случайная величина моделирует выбрасывание жребия или монеты. Если мы имеем в своем распоряжении генератор псевдослучайных последовательностей, описанный в предыдущем параграфе, то задача может быть решена следующим, достаточно очевидным, способом. Поскольку псевдослучайное число, получаемое с помощью функции rand(), распределено равномерно в интервале (0,1), то одинаково вероятно, будет ли очередное полученное значение принадлежать левой половине этого интервала [0,0.5) или правой [0.5, 1]. По этой причине мы можем одно из двух значений нашей случайная величина поставить в соответствие первому из этих двух подинтервалов, а в другое – второму, и далее выдавать значения в зависимости от того к какому из этих двух подинтервалов будет принадлежать очередное выпавшее значение генератора rand(). Эта схема, очевидно, легко обобщается на дискретную случайная величина, принимающую более двух значений. За каждым значением мы должны в этом случае «закрепить» некоторый подинтервал значений функции rand() с длиной, равной вероятности этого значения моделируемой дискретной случайная величина, - причем так, чтобы интервалы , закрепленные за различными значениями случайные величины не пересекались бы между собой. Поскольку сумма вероятностей всех значений случайная величина равна 1, и таков же диапазон значений, принимаемых псевдослучайной величиной, генерируемой функцией rand(), то эти подинтервалы полностью покроют диапазон возможных значений, принимаемых случайная величина, генерируемой функцией rand().

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

Формально этот метод может быть представлен в следующем виде. Пусть – случайная величина, равномерно распределенная на отрезке [0,1] (в нашем случае – это результат очередного выполнения функции rand()) и – моделируемая дискретная случайная величина с распределением . Тогда мы выдаем по получении очередного значения g случайной величины такое значение дискретной случайной величины , для которого верно двойное неравенство . Этим исчерпывается решение задачи моделирования дискретной случайной величины с заданным распределением. Вышеприведенный алгоритм легко реализуется программно, - например так, как в нижеприведенной функции int discrete (float p[]):

unsigned int discrete (float p[])

{

float s, r;

int k=0;

s=p[0]; r=rand();

while (s < r)

{

k++;

s=s+p[k];

}

return k;

}

Функция принимает массив вероятностей моделируемой дискретной случайной величины и выдает индекс очередного ее сгенерированного значения. Следует учесть, что поскольку индексация массивов в языке С начинается с нуля, также с нуля индексируются значения разыгрываемой случайной величины. То есть функция выдает значения в диапазоне от 0 до к-1 для дискретной случайной величины, принимающей к значений. Ниже для иллюстрации приведен ряд из 100 значений выданных программой, использующей вызов данной функции для массива вероятностей p={0.5, 0.5}:

0 1 1 1 0 0 0 1 1 1 1 1 1 0 1 0 0 1 1 0 1 1 0 0 0 0 0 1 0 1 0 0 0

1 0 1 0 0 1 0 1 0 0 1 1 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 1 0

1 0 1 0 1 1 1 0 0 1 1 0 1 0 1 0 0 1 1 1 1 0 0 0 0 1 0 1 0 0 0 0 1

1.2.6 Моделирование случайной величины, равномерно распределенной в интервале (a,b)

Мы используем метод обратной функции для моделирования равномерного и показательного распределений. Решаем уравнение . Для этого, подставив выражение для плотности равномерного распределения на место , вначале вычислим интеграл в левой части уравнения:

,

а затем для вычисления значений u равномерно распределенной в интервале (a,b) случайной величины через значения g случайной величины , равномерно распределенной в интервале (0,1) просто выразим переменную u через переменную g из уравнения :

Заметим, что полученная формула очевидна. Действительно, для пересчета равномерно распределенной в интервале (0,1) случайной величины в случайную величину, равномерно распределенную в интервале (a,b), мы должны вначале «растянуть» диапазон значений единичной длины в диапазон значений (b-a) умножая значения g на (b-a), а затем переместить полученный результат из интервала (0,1) в интервал (a,b), прибавив к нему значение a.

Запись полученной формулы в виде функции языка С:

float uniform (float a, float b) {return rand()*(b-a)+a;}

позволит нам программно генерировать случайные величины с равномерным распределением в любом заданном конечном интервале значений (a,b).

Глава 2 Имитационное моделирование процесса

    1. Постановка задач (Вариант №2)

Провести имитационное моделирование работы парикмахерской. Количество парикмахеров в парикмахерской – n. Время моделирования –t часов. Интервал времени между двумя последовательными посещениями парикмахерской клиентами моделировать случайной величиной τ1 с дискретным равномерным распределением в диапазоне значений [τ1min,…,τ1max] минут. Время обслуживания одного клиента моделировать случайной величиной τ2 с распределением P(τ2). Цена обслуживания клиента определяется функцией времени обслуживания вида c=aτ2.

Если в момент прибытия очередного клиента парикмахеры заняты, то клиент помещается в очередь. Максимальная длина очереди 10 чел. Если длина очереди максимальна, то производится отказ в обслуживании очередного клиента.

Рассчитать:

  • количество обслуженных клиентов за период моделирования;

  • выручку парикмахерской R за период моделирования;

  • средний размер очереди;

  • число отказов r.

Параметры модели:

  • n=2;

  • t=8;

  • τ1min =1, τ1max =15;

  • P(τ2) = ( 10 12 13 14 15 16 17 18 19)

( 0,05 0,05 0,05 0,05 0,05 0,2 0,2 0,2 0,15)

(первая строка - значение случайной величины в минутах, вторая - соответствующие вероятности);

  • а=3

Определить методом машинного эксперимента параметр τ1max, максимизирующий выручку R при условии r=0. Средство реализации модели – программа на языке С++.

    1. Общий алгоритм моделирования процесса

Алгоритм имитационного моделирования процессов данного типа структурируется вокруг следующих групп основных компонентов:

  1. Организация цикла перебора отсчетов дискретного времени моделирования, т.е. собственно организация процесса как последовательности отдельных состояний системы в дискретном времени;

  2. Наполнение этого цикла множеством независимых обработчиков случайных событий происходящих в моделируемой системе.

Таким образом, мы имеем общий способ построения алгоритмов подобного типа, который включает следующие основные компоненты:

  1. Анализ событий в системе и проектирование структур данных необходимых для хранения информации связанный с этими событиями;

  2. Разработка отдельных алгоритмов обработки этих событий включающих в общем случае модификацию параметров состояния системы и моделирование следующего события того типа, обработка которого производится этим алгоритмом;

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

    1. Моделирование программы с заданными параметрами

В данной курсовой работе необходимо провести имитационное моделирование работы Парикмахерской. Для моделирования данной задачи мы используем СМО с N обрабатывающими устройствами без очереди с отказами. Алгоритм поставленной задачи, которая рассмотрена в п. 2.2. необходимо реализовать на языке программирования С++.

В качестве параметров модели используем следующие компоненты и макроопределения:

  • Т - время моделирования (в мин.);

  • RIN - генератор случайного потока поступающих в систему требований;

  • RОN - генератор интервалов времени обработки требования обрабатывающим устройством;

  • n– общее число мест в кафе.

Исходный текст программы начинается с определения параметров модели и прочих исходных данных. Все они определяются с помощью директивы препроцессора "#define". Макросы RIN и RОN определяют вызовы функций, моделирующих распределение интервалов времени между событиями прихода посетителей и интервалов времени от начала до завершения обслуживания посетителей, соответственно. А макрос Trafik определяет вызов функции, моделирующую средний трафик пользователей. Сами функции моделирования случайных последовательностей, распределенных по различным законам, определены в файле Rand.срр, текст которого подключается к тексту модели процесса с помощью директивы препроцессора "#include" в первой строке текста программной реализации модели. Константа "Т" определяет длительность периода моделирования в единицах дискретного времени моделирования (в минутах). Константа "n" задаёт число обрабатывающих посетителей. ton[i]=-1 определяет специальное значение для элемента массива ton[ ], означающее, что место освободилось (компьютер свободен). Поскольку массив ton[ ] предназначен для хранения моментов времени ухода посетителя, которые могут принимать лишь неотрицательные значения, то в качестве такого, сигнализирующего о незанятости компьютера значения, взято первое неиспользуемое отрицательное число - "-1".

Все переменные определяются как длинные целочисленные переменные. Это связано с тем, что диапазона значений простого типа int - от -32768 до 32767 может быть недостаточно для представления используемых значений данных модели. Далее следует собственно моделирующий алгоритм:

1 .Инициализация переменных:

1.1. Инициализация массива ton[ ] – все парикмахеры помечаются как свободные присваиванием элементам массива значения "-1":

" for(i=0;i

2. Цикл перебора дискретных отсчётов времени периода моделирования:

2.1. Определение числа итераций цикла перебора дискретных отсчётов периода моделирования: "for(j=0;j

2.1.1 .Обработка ухода посетителя парикмахерской:

2. 1.1.1. Определение числа итераций цикла перебора устройств:

"for(i=0;itсов-

падает с уходом посетителя ton[i]: “if(ton[j]==i)”, и вход

в тело цикла “{”,

2.1.1.1.1. освобождение места (парикмахера): “ ton[j]=-1;”;

2. 1.1. 2. 2. увеличение на единицу числа обслуживаемых

посетителей: "nPos++";

2. 1.1.3. Конец цикла 2.1.1.1.: "}".

2.1.2. Обработка прихода нового посетителя:

2. 1.2.1. Поиск первого свободного обрабатывающего устройства:

"j=0; while(ton[j]!=-1) j++;

2. 1.2.2. Генерация момента прихода в парикмахерскую нового посетителя и сохранение его в переменной tin: “tin=ceil(RIN)+i;”

2.2. Конец блока цикла 2.1.: "}".

3. Завершение процесса моделирования:

3.1. Вывод результатов моделирования.

    1. Разработка программной реализации алгоритма

В данном разделе мы разрабатываем программную реализацию имитационного моделирования работы Парикмахерской. Помимо общих переменных, которые были описаны выше в п.2.3., в этом разделе можно описать и частные переменные, которые используются в программе, разработанной на языке программирования С++:

В программной реализации используются следующие частные переменные:

        • i, j- используются для хранения вспомогательных индексных значений;

        • t - дискретные отсчёты времени периода моделирования;

        • tin – входящий поток, время прихода посетителя (момент поступления в систему следующего требования);

        • ton [ ] - моменты завершения обработки требований соответствующими элементам массива обрабатывающими устройствами, то есть массив для сохранения интервалов времени ухода посетителей;

        • Cena–цена обслуживания клиента;

        • r– число отказов пользователям;

        • m– число обслуженных посетителей;

R-выручка парикмахерской за период моделирования

Программная реализация алгоритма производится в несколько этапов:

  1. Подключение в программу заголовочных файлов:

#include //включение в программу текстов заранее подготовленных файлов

#include<iostream.h> //содержит потоки данных ввода/вывода

#include<math.h> //хранятся математически функции

#include //

#include //

# include //содержит описания данных

#define //определение параметров модели и прочих исходных данных на глобальном уровне, описанной в п.

#define RCLIENTS x1[discrete(p1)]

float x1[]={7,8,9,10,11,12,13,14,15};

float p1[]={0.05, 0.05, 0.05, 0.2, 0.2, 0.2, 0.05, 0.05, 0.15};

#define CENA x2[discrete(p2)]

floatx1[]={10,12,13,14,15,16,17,18,19};

floatp1[]={0.05, 0.05, 0.05, 0.05, 0.05, 0.2, 0.2, 0.2, 0.15};

#defineC (125*125*125*125*5) //объявление мультипликативного конгруэнтного метода, которое описывается в п.1.3.

#definen 2// общее число парикмахеров

#defineT (8*60*30) // период моделирования (в мин.)

  1. Генерация мультипликативным конгруэнтным методом псевдослучайной последовательности чисел:

floatrand(void) //генерация псевдослучайной последовательности с равномерным распределением

{

static unsigned long int u=C;

// static – модификатор для того, чтобы локальная переменная u сохраняла значение между двумя последующими обращениями к этой функции

u=u*C; //С - константа

returnu/float(0xfffffffful); // (0xfffffffful) – максимально беззнаковые целое число, заданное в шестнадцатеричной форме.

}

  1. Вызов функций моделирования:

//функция моделирования показательного распределения, описанная в п.1.7.

unsigned int discrete( float p[ ])

{

float s, r;

int k=0;

s=p[ ];

r=rand( );

while (s

{

k++;

s+=s+p[k];

}

returnk;

}

4. Инициализация

unsigned long int i,j,cost, R,r,n,k;

float t, tin;

m=0; k=0; R=0;

5. Запускпрограммы

tin=RIN;

for(i=0;i

6. Обработказавершения

for(j=0;j

{

m++;

ton[j]=-1;

}

7. Обработка очередного входящего события

if(i==tin)

{

j=0; while((ton[j]!=-1) && (j

if(j!=N)

{

i=RCLIENTS;

n++;

for(;t

if(rand1()<=P)

{

cost=cost+a*CENA;

k++;

}

} else r++;

tin=RIN+i;

}

}

8. Выводимые результаты:

cout<<"........................ Rezultati modelirovaniya ..............................";

cout<<"1.Posetili parikmakherskuy:"<

cout<<"2.Iz nikh obclujeno : "<

cout<<"3. Iz nikh ne obclujeno: "<

cout<<"5Viruchka sostavila: "<

getch();

}

    1. Моделирование программы с заданными параметрами

Запустив программу, написанную на языке С++, мы получили следующие результаты согласно исходным данным:

Рис3. Результат выполнения разработанной программы

При данном количестве парикмахеров– 2, было рассчитано:

  • Общее количество посетителей-25 человек;

  • Общее количество обслуженных клиентов-20человек;

  • Oбщее количество отказов-5 человек;

  • Полученная прибыль составила 13690руб.

    1. Машинный эксперимент с разработанной моделью

В результате машинного эксперимента с разработанной моделью мы получили следующие данные, приведенные в таблице 1:

Таблица 1. Полученные результаты задачи

Количество парикмахеров

Общее кол-во посетителей

Число обслуженных

Число отказов

Выручка

1

17

13

4

8398

2

25

20

5

13690

3

45

27

18

17530

4

57

33

24

16890

5

64

43

21

26540

6

78

51

27

23540

7

89

63

26

26540

8

110

76

34

31790

9

124

81

43

37950

10

140

97

43

39890

Изменяя число парикмахеров в салоне, мы получаем следующие графики:

Рис 4. График зависимости дохода Парикмахерской от количества мастеров

По данным таблицы видим что увеличивается с увеличением числа парикмахеров в салоне до7, дальше результат не меняется и остается на постоянном уровне.

Рис.5. График зависимости количества посетителей от числа парикмахеров

Здесь мы можем заметить то же самое, что поток клиентов в салон увеличивается до определенного предела, а после остается не изменным.

Изменяя число отказов поступающим требованиям, получим следующий график:

Рис.6. График зависимости обслуженных требований от числа парикмахеров

Здесь мы видим, что чем больше в салоне мастеров, то тем больше число обслуженных клиентов.

Рис.7. График зависимости отказов поступающим требованиям от числа парикмахеров

Этот график показывает нам, что число отказов поступающим требованиям уменьшается при увеличении числа мастеров в салоне.

Заключение

Одной из наиболее крупных отраслей развития технологий с применением ЭВМ, является математическое моделирование, которое достаточно просто (в отличие от аналогового моделирования) может быть реализовано на ЭВМ разных модификаций и возможностей. Математическое моделирование тесно связано с имитационным моделированием. Одним из разделов математического моделирования являются модели систем массового обслуживания и их изучение.

В данном курсовом проекте была построена имитационная модель процесса работы Парикмахерской с использованием программы С++, которая рассчитывает общий объем полученной выручки, количество обслуженных посетителей, число отказов общее количество посетителей. Результатом данного курсового проекта является имитационная модель работы процесса обслуживания клиентов Парикмахерской. Модель реализована на языке программирования высокого уровня Си++. Текст программы состоит из следующих функций:

Программа является рабочей. Выдает на экран вероятностные и статистические характеристики работы процесса обслуживания клиентов в Парикмахерской в соответствии с постановкой задачи.

На основании проделанной работы, можно сделать следующие выводы:

  1. Математическая модель системы массового обслуживания, созданная нами, адекватна реальному объекту;

  2. Проведенные исследования показали эффективность нашей модели и способов “приведения её в действие” при определении необходимых нам параметров по сравнению с ручным способом моделирования и расчетов параметров;

  3. Созданная модель имеет достаточную, для таких моделей, степень универсальности, т.к. диапазон входных параметров системы можно легко и быстро изменить.

Список использованной литературы

  1. Методические указания к выполнению курсового проекта по дисциплине «Имитационное моделирование экономических процессов».- Махачкала,ГОУ ВПО ДГТУ, 2008, 51 стр.

  2. «Машинные имитационные эксперименты с моделями экономических систем» под ред. Нейлера;

  3. Кеольтон В., Лод А. «Имитационное моделирование. Классика CS» издание 3-е, 2004г.;

  4. Варфоломеев В.И. «Алгоритмическое моделирование элементов экономических систем». - М.: Финансы и статистика, 2000г.

  5. Клейнрок Л. «Теория массового обслуживания.»-М.: Машиностроение,1979.-432 с.

  6. Прицкер А. «Введение в имитационное моделирование»-М.: Мир,1987.-644с.

  7. Емельянов А.А.,Власова Е.А., «Имитационное моделирование экономических процессов» - М. Финансы и статистика,2002.

  8. Соболь И.М. «Численные методы Монте-Карло».-М.Наука,1973.

  9. Бахвалов Н.С. «Численные методы» – М.: Наука, 1973

Приложение

Программа, реализующая моделирование работы Парикмахерской.

#include

#include

#include

#include

#include

#define VACANCY (-1)

#define T (200*8*60)

#define RCLIENTS x1[discrete(p1)]

float x1[]={7,8,9,10,11,12,13,14,15};

float p1[]={0.05,0.05,0.05,0.2,0.2,0.2,0.05,0.05,0.15};

#define RCOST x2[discrete(p2)]

float x2[]={10,12,13,14,15,16,17,18,19};

float p2[]={0.05,0.05,0.05,0.05,0.05,0.2,0.2,0.2,0.15};

#define a 3

#define L 10

#define RAND (125*125*125*125*5)

float rand1(void)

{

static unsigned long int u=RAND;

u*=RAND;

return u/(float(0xFFFFFFFF)+1.0);

}

unsigned int discrete(float p[])

void main (void)

{

unsigned long int i,j,cost,k,n,r,R;

float t,tin;

n=0; k=0; R=0;

for(t=RIN;t

{

i=RCLIENTS;

n+=i;

for(;i

if(rand1()<=P)

{

cost=cost+a*RCOST;

k++;

}

}

cout<<"Posetili parikmaherskuu"<

cout<<"Iz nih obslugeno "<

cout<<"Iz nih ne obslugeno"<

cout<<"Viruchka"<

cout<<"Srednei dlina ocheredi"<

}

Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
5173
Авторов
на СтудИзбе
436
Средний доход
с одного платного файла
Обучение Подробнее