Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

отчет лаба 4 схемота

.docx
Скачиваний:
0
Добавлен:
11.02.2026
Размер:
2.44 Mб
Скачать

ФЕДЕРАЛЬНОЕ АГЕНСТВО ВОЗДУШНОГО ТРАНСПОРТА

(РОСАВИАЦИЯ)

ФЕДЕРАЛЬНОЕ ГОСУДАРСТВЕННОЕ БЮДЖЕТНОЕ ОБРАЗОВАТЕЛЬНОЕ УЧРЕЖДЕНИЕ ВЫСШЕГО ОБРАЗОВАНИЯ

«МОСКОВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ УНИВЕРСИТЕТ ГРАЖДАНСКОЙ АВИАЦИИ» (МГТУ ГА)

Кафедра вычислительных машин, комплексов, сетей и систем.

Лабораторная работа защищена с оценкой ____________________

____________________

(подпись преподавателя, дата)

ЛАБОРАТОРНАЯ РАБОТА №3

по дисциплине «Схемотехническое моделирование».

Тема: «Моделирование процессов методом Монте-Карло.»

Выполнила студентка группы ИС2-1

Магальник Екатерина Борисовна

Руководитель: Затучный Дмитрий Александрович

МОСКВА – 2024

Теоретическая часть.

Моделирование Монте-Карло — это мощный аналитический метод, используемый в различных областях для моделирования и анализа сложных систем. Предоставляет средства для оценки потенциальных результатов проекта или процесса путем создания нескольких случайных выборок и моделирования различных сценариев.

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

Случайное событие – любое событие, которое может произойти с некоторой вероятностью p или не произойти с вероятностью 1-p.

Имитация события на основе метода Монте-Карло: “разыгрывается” случайное число R. Если 0<=R<=p, то смоделировано появление данного события. Если R > p - смоделировано отсутствие события.

Имитация непрерывных случайных величин:

  1. Строится функция распределения F(x)

  2. F(x) = R, где R – случайно распределённая величина

  3. x = F-1(R)

Целью использования моделирования Монте-Карло является не предсказание конкретных событий, а предоставление информации о диапазоне возможных результатов и их вероятности.

Моделирование Монте-Карло предлагает организованный и систематический способ изучения неопределенности, что делает его отличным инструментом для выявления рисков, оценки альтернатив и оптимизации принятия решений в сложных условиях.

Задание 1. Завод производит авиакомплектующие. В 0,1% имеется брак. Выпуск годного изделия дает заводу прибыль в размере 50 денежных единиц, брак – штрафные санкции в размере 1200 единиц. Требуется разработать алгоритм имитации выпуска авиакомплектующих на основе метода Монте-Карло и реализовать его в виде программы. Определить среднюю прибыль предприятия от выпуска одного изделия. Сделать 100000 испытаний (реализаций).

Блок-схемы алгоритмов:

Листинг:

import random n=100000 p=0.001 s=0 income=50 loss=1200 defect=0 for i in range(n): a = random.random() if a<=p: s-=loss defect+=1 else: s+=income print('Number of products: ', n) print('Number of low-quality products: ', defect) print('Average cost of the product: ', s/n)

Результат работы программы:

Задание 2. Авиаремонтный завод выполняет ремонт двигателей, шасси, навигационной аппаратуры и систем связи. 45% - заказ на ремонт авиадвигателей, 20% - заказ на ремонт шасси, 30% - заказ на ремонт навигационной аппаратуры, 5% -заказ на ремонт систем связи. Прибыль завода от ремонта одного авиадвигателя составляет 100 денежных единиц, шасси – 7 денежных единиц, навигационной аппаратуры – 15 денежных единиц, систем связи – 12 денежных единиц. Требуется разработать алгоритм имитации работы авиаремонтного завода на основе метода Монте-Карло и реализовать его в виде программы. Определить среднюю прибыль завода от выполнения одного заказа. Сделать 100000 испытаний (реализаций).

Блок-схемы алгоритмов:

Листинг:

import random n=100000 aircraft_engines=0.45 chassis=0.20 navigation_equipment=0.30 communication_systems=0.05 income_aircraft_engines=100 income_chassis=7 income_navigation_equipment=15 income_communication_systems=12 s=0 for i in range(n): temp = random.uniform(0,0.45) if temp < communication_systems: s+=income_communication_systems elif temp >= navigation_equipment and temp <= aircraft_engines: s+=income_aircraft_engines elif temp >= chassis and temp <= navigation_equipment: s+=income_navigation_equipment elif temp >= communication_systems and temp <= chassis: s+=income_chassis print('Number of realizations: ', n) print('Average income: ', s/n)

Результат работы программы:

Задание 3. Предприятие выпускает датчики 5 типов для автоматизированных систем управления воздушным движением. Тип А – 15% всех заказов, тип В – 20%, тип С – 35%, тип D – 10%, тип Е – 20%. Затраты предприятия на выпуск одного датчика в обычном исполнении следующие: датчик типа А – 15 денежных единиц, В – 10 денежных единиц, С – 8 денежных единиц, D – 20 денежных единиц, Е – 12 денежных единиц. Дополнительные затраты предприятия при выпуске для работы при наличии фактора 1 – 5 денежных единиц, фактора 2 – 2 денежные единицы, фактора 3 – 4 денежные единицы, фактора 4 – 1 денежная единица (эти затраты не зависят от типа датчика). Датчики, выпущенные в обычном исполнении, продаются по следующим ценам: А – 45 д.е., В – 30 д.е., С – 50 д.е., D – 25 д.е., Е – 35 д.е. За каждое дополнительное требование цена датчика повышается на 15% от изначальной цены. Требуется разработать алгоритм имитации выпуска датчиков на основе метода Монте-Карло и реализовать его в виде программы. Сделать 100000 испытаний (реализаций). Определить: а) среднюю прибыль предприятия от выпуска одного датчика; б) долю датчиков специального исполнения (т.е. хотя бы с одним дополнительным требованием) в общем объеме заказов.

Блок-схемы алгоритмов:

Листинг:

import random n = 100000 a = 0.15 b = 0.20 c = 0.35 d = 0.10 e = 0.30 s = [0, 0, 0, 0, 0] o = 0 k = [1, 2, 3, 4] facts = [0, 0, 0, 0] temp=facts for i in range(n): ch = random.uniform(0.10, 1) rl = random.randint(0, 1) rl *= random.randint(1, 4) for j in range(rl): p=random.randint(0, len(k)-1) if(k[p] == 1): facts[p] += 1 del k[p] t = [0, 0, 0, 0] for i in range(len(t)): t[i] = facts[i] - temp[i] if ch >= c: s[2] += 50 + 0.15 * sum(t) * 50 - 8 - 5 * t[0] - 2 * t[1] - 4 * t[2] - t[3] elif ch >= e and ch < c: s[3] += 25 + 0.15 * sum(t) * 25 - 20 - 5 * t[0] - 2 * t[1] - 4 * t[2] - t[3] elif ch >= e and ch < b: s[4] += 35 + 0.15 * sum(t) * 35 - 12 - 5 * t[0] - 2 * t[1] - 4 * t[2] - t[3] elif ch >= b and ch < a: s[1] += 30 + 0.15 *sum(t) * 30 - 10 - 5 * t[0] - 2 * t[1] - 4 * t[2] - t[3] elif ch >= a and ch < d: s[0] += 45 + 0.15 * sum(t) * 45 - 15 - 5 * t[0] - 2 * t[1] - 4 * t[2] - t[3] if rl != 0: o += 1 k = [1, 2, 3, 4] temp = facts print('Average income from release of a single sensor: ', sum(s)/n) print('Number of sensors of special design: ', o/n)

Результат работы программы:

Задание 4. Плотность распределения случайной величины приведен на графике:

Дополнение: функция распределения F(x), исходя из плотности распределения, описывается следующим образом:

Требуется разработать алгоритм имитации случайных величин и его программную реализацию.

Блок-схемы алгоритмов:

Листинг:

import random import math n = 2000 k = [0, 0, 0, 0, 0] for i in range(n): u = random.uniform(0, 1) if u == 0: x = random.uniform(math.inf, 2) k[0] += 1 elif u > 0 and u <= 0.2: x = random.uniform(2, 4) k[1] += 1 elif u > 0.2 and u <= 0.3: x = random.uniform(4, 8) k[2] += 1 elif u > 0.3 and u <= 0.35: x = random.uniform(8, 12) k[3] += 1 elif u > 0.35: x = random.uniform (12, math.inf) k[4] += 1 print(f'Value of F(x): {round(u, 2)}; Value generated: {round(x, 2)}') print('Number of values generated: ', n) print('Density ot the distribution of values: ') print(round(k[0]/n, 2), round(k[1]/n, 2), round(k[2]/n, 2), round(k[3]/n, 2), round(k[4]/n, 2))

Результат работы программы:

……………………………………………………………..

Вывод: в данной лабораторной работе были усвоены навыки разработки алгоритмов и их программной реализации по имитации работы с использованием метода Монте-Карло. В результате были получены программы для имитации случайных величин по заданной функции плотности, имитации работы авиаремонтной компании, компании по выпуску датчиков, компании по выпуску авиадеталей. При неоднократном запуске программы было замечено, что значение для подсчёта изменяется, но не более, чем на десятые, что говорит о эффективности алгоритма Монте-Карло при большом количестве итераций.