{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# PRO5765 Modelagem e Simulação de Sistemas de Produção\n", "## Lista 4a – Simulação de Monte Carlo\n", "### Entrega ao final da aula, exercícios: 1, 3, 6, 7 e 8" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Nome (número USP) em ordem alfabética" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "1. Aluno 1 (9999999)\n", "2. Aluno 2 (9999999)\n", "3. Aluno 3 (9999999)\n", "4. Aluno 4 (9999999)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Questões" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "1. Defina Simulação de Monte Carlo." ] }, { "cell_type": "markdown", "metadata": {}, "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "2. Explique os conceitos de exatidão, eficiência, independência e repetibilidade na geração de números aleatórios (GNA)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "3. Explique como funciona o método da função inversa de GNA." ] }, { "cell_type": "markdown", "metadata": {}, "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "4. Explique como funciona o método da aceitação e rejeição para GNA." ] }, { "cell_type": "markdown", "metadata": {}, "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### Exercícios" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "1. Utilizando o método da função inversa e as amostras de números aleatórios dadas, gerar amostras com n=10 observações para cada uma das distribuições abaixo. Para cada amostra, calcule a média e o desvio padrão e compare com os valores esperados." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "a) Uniforme, com valor mínimo 0,5 e máximo 1,5" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "| i | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |\n", "|----|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|\n", "| ui | 0,8042 | 0,2000 | 0,7993 | 0,9015 | 0,0070 | 0,9145 | 0,4397 | 0,5079 | 0,2896 | 0,9024 |\n", "| xi | - | - | - | - | - | - | - | - | - | - |" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Solução**" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "$$ X = a + (b-a) \\cdot U $$\n", "$$ E[X] = {{a + b} \\over 2} $$\n", "$$ V[X] = {{(b - a)^2} \\over 12} $$" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import numpy as np" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "us = [0.8042, 0.2000, 0.7993, 0.9015, 0.0070, 0.9145, 0.4397, 0.5079, 0.2896, 0.9024]\n", "a=0.5\n", "b=1.5\n", "xs = [round(a+(b-a)*u,4) for u in us]\n", "print(us)\n", "print(xs)\n", "print('%6.4f %6.4f' %(np.mean(xs),np.std(xs,ddof=1)))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "| i | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |\n", "|----|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|\n", "| ui | 0,8042 | 0,2000 | 0,7993 | 0,9015 | 0,0070 | 0,9145 | 0,4397 | 0,5079 | 0,2896 | 0,9024 |\n", "| xi | 1.3042 | 0.7000 | 1.2993 | 1.4015 | 0.5070 | 1.4145 | 0.9397 | 1.0079 | 0.7896 | 1.4024 |" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "EX=(a+b)/2\n", "VX=(b-a)**2/12\n", "DPX=VX**0.5\n", "print('%6.4f %6.4f' %(EX,DPX))" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "b) Exponencial, com média 2,0" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "| i | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |\n", "|----|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|\n", "| ui | 0.9729 | 0.6578 | 0.5678 | 0.4145 | 0.7720 | 0.8005 | 0.7777 | 0.4474 | 0.4806 | 0.5639 |\n", "| xi | - | - | - | - | - | - | - | - | - | - |" ] }, { "cell_type": "markdown", "metadata": {}, "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "c) Triangular, com a=0, b=2, c=5" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "| i | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |\n", "|----|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|\n", "| ui | 0.3780 | 0.7993 | 0.3118 | 0.2861 | 0.5463 | 0.4032 | 0.9311 | 0.3015 | 0.5795 | 0.6270 |\n", "| xi | - | - | - | - | - | - | - | - | - | - |" ] }, { "cell_type": "markdown", "metadata": {}, "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "d) Normal, com média 1,0 e desvio-padrão 0,2" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "| i | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |\n", "|----|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|\n", "| ui | 0.5431 | 0.6333 | 0.2671 | 0.9290 | 0.7829 | 0.0914 | 0.8355 | 0.1339 | 0.8598 | 0.3408 |\n", "| zi | - | - | - | - | - | - | - | - | - | - |\n", "| xi | - | - | - | - | - | - | - | - | - | - |" ] }, { "cell_type": "markdown", "metadata": {}, "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "2. Utilizando as amostras de números aleatórios, gerar amostras com n=10 observações para as distribuições Equiprovável (a) e Bernoulli (b). Para cada amostra, calcule a média e o desvio padrão e compare com os valores esperados. A partir da Bernoulli, explique como gerar amostras da Binomial (c) e Binomial Negativa (d)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "a) Equiprovável, x=1,2,...,6 (dado)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "| i | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |\n", "|----|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|\n", "| ui | 0.7191 | 0.1433 | 0.1027 | 0.1129 | 0.1926 | 0.7625 | 0.2886 | 0.7603 | 0.0556 | 0.4600 |\n", "| xi | - | - | - | - | - | - | - | - | - | - |" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "b) Bernoulli, p=0,4 (cara e coroa)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "| i | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |\n", "|----|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|\n", "| ui | 0.2945 | 0.7954 | 0.5492 | 0.8735 | 0.5960 | 0.4397 | 0.9124 | 0.4167 | 0.2595 | 0.4985 |\n", "| xi | - | - | - | - | - | - | - | - | - | - |" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "c) Explique como seria a geração de uma amostra de tamanho m=20 para uma Binomial, com n=10 e p=0,4" ] }, { "cell_type": "markdown", "metadata": {}, "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "d) Idem, para Binomial Negativa, com r=2 e p=0,4" ] }, { "cell_type": "markdown", "metadata": {}, "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "3. Utilizando funções da biblioteca numpy.random, gerar amostras com n=1000 observações das distribuições abaixo. Para cada amostra, calcular a média e o desvio padrão e elaborar o histograma da distribuição de frequências." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "a) Uniforme, com valor mínimo 0,5, valor máximo 1,5 e semente 100." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "|
Classe
| Freq |\n", "|---------------------|------|\n", "| $ 0,5 \\le x < 0,7 $ | - |\n", "| $ 0,7 \\le x < 0,9 $ | - |\n", "| $ 0,9 \\le x < 1,1 $ | - |\n", "| $ 1,1 \\le x < 1,3 $ | - |\n", "| $ 1,3 \\le x < 1,5 $ | - |\n", "| - | 1000 |" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "**Solução**" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "a=0.5\n", "b=1.5\n", "np.random.seed(100)\n", "amostra=np.random.uniform(a,b,1000)\n", "print('%6.4f %6.4f' %(np.mean(amostra),np.std(amostra,ddof=1)))" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "xbins=[0.5+0.2*i for i in range(6)]\n", "np.histogram(amostra,bins=xbins)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "import matplotlib.pyplot as plt" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [ "plt.hist(amostra, bins=xbins, edgecolor='black')\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "b) Exponencial, com média 2,0 e semente 200." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "| Classe | - | Freq |\n", "|--------|----|------|\n", "| 0 | 2 | - |\n", "| 2 | 4 | - |\n", "| 4 | 6 | - |\n", "| 6 | 8 | - |\n", "| 8 | 10 | - |\n", "| 10 | 12 | - |\n", "| - | - | 1000 |" ] }, { "cell_type": "markdown", "metadata": {}, "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "c) Triangular, com a=0, b=2, c=5 e semente 300." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "| Classe | - | Freq |\n", "|--------|---|------|\n", "| 0 | 1 | - |\n", "| 1 | 2 | - |\n", "| 2 | 3 | - |\n", "| 3 | 4 | - |\n", "| 4 | 5 | - |\n", "| - | - | 1000 |" ] }, { "cell_type": "markdown", "metadata": {}, "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "d) Normal, com média 1,0, desvio-padrão 0,2 e semente 400." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "| Classe | - | Freq |\n", "|--------|-----|------|\n", "| 0,2 | 0,4 | - |\n", "| 0,4 | 0,6 | - |\n", "| 0,6 | 0,8 | - |\n", "| 0,8 | 1,0 | - |\n", "| 1,0 | 1,2 | - |\n", "| 1,2 | 1,4 | - |\n", "| 1,4 | 1,6 | - |\n", "| 1,6 | 1,8 | - |\n", "| - | - | 1000 |" ] }, { "cell_type": "markdown", "metadata": {}, "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "4. Proponha um procedimento para gerar amostras aleatórias de variáveis Poisson, considerando a relação entre a distribuição Poisson e a Exponencial. Implemente o procedimento proposto em Python e, com código implantado, gere uma amostra n=1000 observações de uma Poisson com média 3,0. Calcule a média e o desvio padrão da amostra e compare com os valores esperados. Elabore um histograma da distribuição de frequências na amostra." ] }, { "cell_type": "markdown", "metadata": {}, "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "5. Estime a probabilidade das variáveis Y abaixo definidas superarem o valor 5, utilizando o método de Monte Carlo, com n = 10.000 repetições:\n", "\n", "a) Y = soma de 4 v.a.i. Normais com média 1,0 e desvio-padrão 0,25\n", "\n", "b) Y = soma de 4 v.a.i. Uniformes com valor mínimo 0,5 e valor máximo = 1,5\n", "\n", "c) Y = soma de 4 v.a.i. Exponenciais com média 1,0\n", "\n", "d) Y = soma dos quadrados de 4 v.a.i. Normais-Padrão\n" ] }, { "cell_type": "markdown", "metadata": {}, "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "6. Utilizando funções da biblioteca numpy.random, gerar amostras com n=1000 e semente 500, de uma distribuição lognormal com média 10,0 e desvio-padrão 1,0. A seguir, calcule a média e o desvio padrão da amostra e compare com os valores esperados. Elabore um histograma da distribuição de frequências. Dica: para usar o gerador, é necessário fazer uma transformação nos parâmetros média e desvio-padrão." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "| Classe | - | Freq |\n", "|--------|----|------|\n", "| 5 | 6 | - |\n", "| 6 | 7 | - |\n", "| 7 | 8 | - |\n", "| 8 | 9 | - |\n", "| 9 | 10 | - |\n", "| 10 | 11 | - |\n", "| 11 | 12 | - |\n", "| 12 | 13 | - |\n", "| 13 | 14 | - |\n", "| 14 | 15 | - |\n", "| - | - | 1000 |" ] }, { "cell_type": "markdown", "metadata": {}, "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "7. Utilizando a amostra de números aleatórios abaixo, verifique quais seriam os valores gerados pelo método da aceitação/rejeição para uma variável aleatória X com f(x) = x/2 para 0≤x≤2 e 0, caso contrário. Calcule a média e o desvio-padrão da amostra gerada." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "| i | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 |\n", "|-------|--------|--------|--------|--------|--------|--------|--------|--------|--------|--------|\n", "| u1i | 0.6977 | 0.4582 | 0.8241 | 0.7818 | 0.0692 | 0.5727 | 0.5689 | 0.2010 | 0.6246 | 0.1973 |\n", "| u2i | 0.6113 | 0.9770 | 0.6883 | 0.2572 | 0.6654 | 0.8394 | 0.8684 | 0.2780 | 0.6451 | 0.2631 |\n", "| xi | - | - | - | - | - | - | - | - | - | - |\n", "| yi | - | - | - | - | - | - | - | - | - | - |\n", "| f(xi) | - | - | - | - | - | - | - | - | - | - |\n", "| A/R | - | - | - | - | - | - | - | - | - | - |" ] }, { "cell_type": "markdown", "metadata": {}, "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "8. Os dados abaixo são uma amostra dos tempos de uma operação. Estime a média e o desvio-padrão da amostra. A seguir, verifique qual das seguintes distribuições melhor se ajusta aos dados: normal, lognormal, uniforme ou exponencial." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "| 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | \n", "|------|------|------|------|------|------|------|------|------|------|\n", "| 8.8 | 10.1 | 10.5 | 10.4 | 8.2 | 9.4 | 9.7 | 12.6 | 10.7 | 9.0 |\n", "| 10.1 | 10.1 | 11.0 | 8.6 | 10.3 | 9.8 | 10.1 | 9.1 | 9.5 | 11.2 |\n", "| 10.6 | 9.0 | 7.9 | 9.4 | 9.4 | 11.2 | 7.6 | 9.7 | 10.9 | 9.2 |\n", "| 9.9 | 10.5 | 8.7 | 8.6 | 10.7 | 9.6 | 9.7 | 9.4 | 10.9 | 11.2 |\n", "| 9.7 | 9.3 | 9.1 | 10.8 | 10.1 | 9.6 | 10.8 | 10.1 | 9.5 | 9.1 |" ] }, { "cell_type": "markdown", "metadata": {}, "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "9. Dois dados são lançados. Se no primeiro lançamento sair soma 7 ou 11, o jogador ganha. Se sair 2, 3 ou 12, o jogador perde. Para qualquer outro resultado, o jogador continua jogando até obter a soma da primeira jogada, neste caso ele ganhar, ou sair soma 7, neste caso ele perde. Qual é a probabilidade de vitória?" ] }, { "cell_type": "markdown", "metadata": {}, "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "10. Um lojista adquire um produto, que é comprado ao custo c=\\\\$5 e vendido ao preço p=\\\\$10. A demanda apresenta distribuição uniforme entre 80 e 140. Considerando que todo produto não vendido é perdido, determine, pelo método de Monte Carlo, qual seria o lote de compra Q = 80, 85, ..., 140 que maximizaria o resultado do lojista." ] }, { "cell_type": "markdown", "metadata": {}, "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "11. Um investidor pretende investir inicialmente \\\\$10.000 e, nos próximos n=4 períodos \\\\$1000. Determine o valor futuro ao final do quinto período, considerando que a taxa de juros em cada período seja uma variável aleatória com distribuição triangular simétrica entre 5 e 7%." ] }, { "cell_type": "markdown", "metadata": {}, "source": [] }, { "cell_type": "markdown", "metadata": {}, "source": [ "12. Em uma rede PERT, as atividades têm uma duração aleatória e uma atividade só inicia quando a atividade precedente (se houver) estiver concluída. Considere a seguinte rede de atividades de um projeto, com tempos de duração normal." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "| Atividade | Precedentes | Duração | - |\n", "|-----------|-------------|---------|------|\n", "| - | - | Média | D.P. |\n", "| 1 | - | 6 | 0,6 |\n", "| 2 | - | 9 | 0,9 |\n", "| 3 | 1 | 8 | 0,8 |\n", "| 4 | 1, 2 | 5 | 0,5 |\n", "| 5 | 4 | 3 | 0,3 |\n", "| 6 | 3, 5 | 12 | 1,2 |" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Utilizando a simulação de Monte Carlo, determine a média e o desvio-padrão do tempo de conclusão do projeto." ] }, { "cell_type": "markdown", "metadata": {}, "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.7.1" } }, "nbformat": 4, "nbformat_minor": 2 }