Скачиваний:
91
Добавлен:
15.06.2014
Размер:
20.04 Кб
Скачать

Министерство Образования Республики Беларусь.

Учреждение образования

«Белорусский государственный университет информатики и радиоэлектроники»

ФИТУ

Кафедра ИТАС

Отчет по лабораторной работе №1

«РЕШЕНИЕ ЗАДАЧ МОДЕЛИРОВАНИЯ С ИСПОЛЬЗОВАНИЕМ ИМИТАЦИИ СЛУЧАЙНЫХ СОБЫТИЙ НА ОСНОВЕ МЕТОДА МОНТЕ-КАРЛО»

по курсу

«Имитационное моделирование систем»

Вариант 5

Выполнили:

студенты гр.

Проверил:

Севернев А. М.

Минск 2013 г.

  1. Цель работы

    1. Изучить основные понятия, назначение и принцип работы метода Монте-Карло (раздел 1). Изучить алгоритмы имитации случайных событий на основе метода Монте-Карло и примеры решения задач моделирования с использованием этих алгоритмов (раздел 2).

    2. Согласно варианту задания разработать алгоритм для решения задачи на основе метода Монте-Карло. Выполнить три испытания разработанного алгоритма.

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

  1. ХОД РАБОТЫ

    1. Разработаем алгоритм имитации выдачи книг в библиотеки.

  1. Имитируется взятие книг. Для этого разыгрывается СРРЧ R1. Если R1<0,05, то смоделировано взятие 4 книг. Если 0,05≤R1<0,2, то 3 книги. Если 0,2≤R1<0,4, то 2 книги. Если R1≥0,4, то имитируется взятие 1 книги.

  2. Разыгрывается СРРЧ R2. Имитируется количество дней, на которые будут взяты книги. Из опыта работы библиотеки известно, что читатели берут книги на любой срок (от одного до десяти дней) одинаково часто. Поэтому шанс у каждого срока одинаковый – 1/10;

  3. Для каждой книги, в зависимости от их количества, разыгрывается величина R3. Имитируется взятие книги из определенного зала. Если R3<0.4, то книга берется из обычного зала. Иначе – из специализированого.

Шаги 1-3 повторяются многократно, например, 100 000 раз. По окончании испытаний определяется вероятность того, что все книги, взятые читателем, будут из специализированного читального зала. Определяется средний размер платы, полученной с одного читателя как отношение суммарной прибыли к общему количеству читателей

    1. Испытания алгоритма

Рассмотрим три испытания алгоритма.

Первое испытание. Пусть R1=0.0795. Т.к. 0,05≤R1<0,2, то берутся 3 книги. Пусть R2=0.8742, значит книги берутся на 2 дня. Далее для каждой из 3-ёх книг разыгрывается R3. Пусть для первой книги R3=0.3445, значит она берется из общего зала, тогда суммарная прибыль равна 12*2=24ден.ед. Пусть для второй книги R3=0.9847, значит вторая книга берется из специализированого зала, тогда суммарная прибыль равна 24+15*2=54ден.ед. Пусть для третьей книги R3=0.3574, значит она берется из общего зала, тогда суммарная прибыль равна 54+12*2=78ден.ед.

Второе испытание. Пусть R1=0.4597. Т.к. R1≥0,4, то берется 1 книга. Пусть R2=0.1458, значит книга берется на 9 дней. Далее для книги разыгрывается R3. Пусть R3=0.5532, значит она берется из специализированого зала, тогда суммарная прибыль равна 78+15*9=213ден.ед.

Третье испытание. Пусть R1=0.9951. Т.к. R1≥0,4, то берется 1 книга. Пусть R2=0.9153, значит книга берется на 1 день. Далее для книги разыгрывается R3. Пусть R3=0.2147, значит она берется из общего зала, тогда суммарная прибыль равна 213+12*1=225ден.ед.

    1. Код программы

Приведем программу на языке Java, реализующую алгоритм имитации

выпуска деталей.

public static void main(String[] args) {

int profit = 0;

int specHallCount = 0;

int iteration = 1000000;

for (int j = 0; j < iteration; j++) {

Double random;

random = Math.random();

Integer bookCount = 0;

if (random < 0.05)

bookCount = 4;

else if (random >= 0.05 && random < 0.2)

bookCount = 3;

else if (random >= 0.2 && random < 0.4)

bookCount = 2;

else if (random >= 0.4)

bookCount = 1;

Integer dayCount = 0;

random = Math.random();

if (random >= 0.9)

dayCount = 1;

else if (random >= 0.8)

dayCount = 2;

else if (random >= 0.7)

dayCount = 3;

else if (random >= 0.6)

dayCount = 4;

else if (random >= 0.5)

dayCount = 5;

else if (random >= 0.4)

dayCount = 6;

else if (random >= 0.3)

dayCount = 7;

else if (random >= 0.2)

dayCount = 8;

else if (random >= 0.1)

dayCount = 9;

else

dayCount = 10;

Integer hallSpec = 0;

for (int i = 0; i < bookCount; i++) {

random = Math.random();

if (random < 0.4) {

profit += 12*dayCount;

} else {

profit += 15*dayCount;

hallSpec++;

}

}

if (bookCount == hallSpec)

specHallCount++;

}

System.out.println("program has made " + iteration + " iterations");

Double avarageProfit = ((double) profit / (double) iteration);

Double chanceSpecHall = (((double) specHallCount / (double) iteration) * 100);

System.out.println("Avarage profit = " + avarageProfit

+ ", chance to take all the books from a specialized hall "

+ chanceSpecHall + "%");

}

Результаты имитации будут примерно следующими: вероятность того, что все книги, взятые читателем, будут из специализированного читального зала - примерно 0,4717 (т.е. процент – 47,17%), средний размер платы, полученной с одного читателя – примерно 125,22ден.ед.

Соседние файлы в папке laby