{"id":122,"date":"2023-09-28T21:08:50","date_gmt":"2023-09-29T00:08:50","guid":{"rendered":"https:\/\/golin.dev.br\/site\/?p=122"},"modified":"2024-02-28T14:35:51","modified_gmt":"2024-02-28T17:35:51","slug":"a-dispersao-do-tempo-de-retardo-de-nao-eletricos-e-similares","status":"publish","type":"post","link":"https:\/\/golin.dev.br\/site\/2023\/09\/28\/a-dispersao-do-tempo-de-retardo-de-nao-eletricos-e-similares\/","title":{"rendered":"A dispers\u00e3o do tempo de retardo de n\u00e3o-el\u00e9tricos e similares."},"content":{"rendered":"\n<p>N\u00e3o se pode negar, quase todo mundo da \u00e1rea ignora os efeitos das dispers\u00f5es dos acess\u00f3rios n\u00e3o-el\u00e9tricos. Em alguns casos estas varia\u00e7\u00f5es no tempo de retardo n\u00e3o chegam a ser um problema. Mas em situa\u00e7\u00f5es, digamos, mais delicadas, ignorar a dispers\u00e3o n\u00e3o \u00e9 muito saud\u00e1vel.<br>Todos, todos os acess\u00f3rios n\u00e3o-el\u00e9tricos de qualquer fabricante do mundo possuem dispers\u00f5es no tempo de retardo. N\u00e3o \u00e9 culpa dos fabricantes, \u00e9 simplesmente um dos limites da tecnologia, n\u00e3o tem como evitar. Existem acess\u00f3rios mais precisos \/ acurados, mas a dispers\u00e3o ainda est\u00e1 l\u00e1, presente sorrateiramente no misto pirot\u00e9cnico, pronta par te pegar de surpresa\u2026<br>Se voc\u00ea perguntar para o seu fornecedor de explosivos favorito sobre dispers\u00e3o, ele n\u00e3o vai negar que tenha, mas provavelmente a resposta ser\u00e1 algo como &#8220;<code>n\u00e3o passa de 5%\" ou \"<\/code>7%&#8221; ou qualquer valor percentual. N\u00e3o \u00e9 mentira, geralmente os valores est\u00e3o pr\u00f3ximos a estes, mas o que realmente importa \u00e9 a distribui\u00e7\u00e3o associada, n\u00e3o o seu intervalo. A dispers\u00e3o interfere no sequenciamento, controle de vibra\u00e7\u00f5es e tamb\u00e9m em conceitos como a regra dos 8ms e a carga m\u00e1xima por espera. <\/p>\n\n\n\n<p>A taxa percentual de dispers\u00e3o n\u00e3o \u00e9 constante, e nem pode. A dispers\u00e3o deriva da incerteza sobre o tempo de queima do misto. \u00c9 imposs\u00edvel produzir um misto exatamente igual ao outro e lotes diferentes com o mesmo tempo de queima. Quanto maior \u00e9 o tempo de retardo, mais incerteza vem associada ao n\u00e3o-el\u00e9trico. Perceba que os tempos de retardo entre n\u00e3o-el\u00e9tricos em sequ\u00eancia vai aumentando conforme o tempo absoluto de retardo aumenta. Dificilmente um fabricante que consegue produzir, digamos, uma pe\u00e7a com 1500ms e outra com 1520ms. Ele pode at\u00e9 fabricar, mas n\u00e3o te dar\u00e1 garantia que vai funcionar como voc\u00ea imagina.<\/p>\n\n\n\n<p>A porcentagem de dispers\u00e3o \u00e9 fun\u00e7\u00e3o do tempo de retardo, quanto maior o tempo, maior a incerteza. Mas isso n\u00e3o \u00e9 o mais importante, o importante \u00e9 como est\u00e1 distribu\u00edda a varia\u00e7\u00e3o no tempo.<br>Por exemplo, se a \u00fanica informa\u00e7\u00e3o sobre um retardo \u00e9 que a taxa percentual de dispers\u00e3o \u00e9 \\(d\\) ent\u00e3o o tempo de retardo prov\u00e1vel, \\(t_r\\), \u00e9 de:<\/p>\n\n\n\n<p>\\(t_r = t_m \\pm \\frac{d}{2}t_m\\)<\/p>\n\n\n\n<p>Em que \\(t_m\\) \u00e9 o tempo m\u00e9dio. Se cada \\(t_r\\) tem probabilidade igual de ocorr\u00eancia, isto \u00e9, qualquer valor dentro do intervalo<\/p>\n\n\n\n<p>\\([t_m(1-\\frac{d}{2});t_m(1+\\frac{d}{2})]\\)<\/p>\n\n\n\n<p>tem a mesma chance de ser contemplado, ent\u00e3o a distribui\u00e7\u00e3o dos tempos \u00e9 uniforme. Neste caso, n\u00e3o existe um valor privilegiado. Veja na figura abaixo a distribui\u00e7\u00e3o associada ao valores inteiros do intervalo \\([20;30]\\). Qualquer valor, no limite, tem probabilidade de \\(1\/11 \\approx 9,1\\%\\) de ocorrer.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"776\" height=\"346\" src=\"https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/aleatoria2030.jpg\" alt=\"\" class=\"wp-image-127\" srcset=\"https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/aleatoria2030.jpg 776w, https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/aleatoria2030-300x134.jpg 300w, https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/aleatoria2030-768x342.jpg 768w\" sizes=\"auto, (max-width: 776px) 100vw, 776px\" \/><\/figure>\n\n\n\n<p>Mas este tipo de distribui\u00e7\u00e3o n\u00e3o ocorre no nosso caso, n\u00e3o consegue representar (felizmente!) a densidade de probabilidade dos tempos de retardo. Geralmente uma distribui\u00e7\u00e3o normal \u00e9 associada \u00e0 dispers\u00e3o. Para cravar de forma contundente a ader\u00eancia dos dados \u00e0 uma distribui\u00e7\u00e3o normal seria necess\u00e1ria uma an\u00e1lise um pouco mais rigorosa. Alguns dados que possuo, que consegui a muito tempo atr\u00e1s, se comportam muito bem quando s\u00e3o solicitados a serem normais. Deste modo, vamos tratar a dispers\u00e3o assim, como distribui\u00e7\u00f5es normais, afinal o enfoque matem\u00e1tico que ser\u00e1 dado pode ser facilmente alterado para englobar outras distribui\u00e7\u00f5es.<\/p>\n\n\n\n<p>Quando dizemos que a distribui\u00e7\u00e3o \u00e9 normal, queremos dizer que o tempo de retardo se espalha da maneira mostrada na figura abaixo.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"600\" src=\"https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/normal-1024x600.jpeg\" alt=\"\" class=\"wp-image-128\" srcset=\"https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/normal-1024x600.jpeg 1024w, https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/normal-300x176.jpeg 300w, https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/normal-768x450.jpeg 768w, https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/normal.jpeg 1170w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>A linha vermelha representa dados cont\u00ednuos; as barras azuis verticais s\u00e3o dados discretos.<br>Admitindo a normalidade, podemos representar os tempos de retardos por uma m\u00e9dia e por um desvio padr\u00e3o.<\/p>\n\n\n\n<p>\\(t_r=N(t_m,\\sigma_r)\\)<\/p>\n\n\n\n<p>Por exemplo, suponha um retardo de 25ms com \\(t_m = 24,676ms; \\sigma = 2,75ms\\) (acredite, isto s\u00e3o valores comuns para um bom retardo de 25ms), podemos simular a detona\u00e7\u00e3o virtual de, digamos, 10 milh\u00f5es de pe\u00e7as deste retardo com o pequeno programa em C. O programa da lista abaixo gera 10 milh\u00f5es de n\u00fameros normalmente distribu\u00eddos, com m\u00e9dia \\(t_m = 24,676ms\\) e desvio padr\u00e3o \\(\\sigma = 2,75ms\\) e produz um histograma contendo todos os valores inteiros encontrados, isto \u00e9, o programa trunca os valores. Por exemplo, um valor de 26,9787ms ser\u00e1 truncado para 26ms e assim por diante.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;stdio.h&gt;\n#include &lt;math.h&gt;\n\n\/\/ fun\u00e7oes de dsitribui\u00e7\u00e3o de probabilidade\n#include &lt;gsl\/gsl_cdf.h&gt;\n\/\/ gera\u00e7\u00e3o de n\u00fameros aleat\u00f3rios\n#include &lt;gsl\/gsl_rng.h&gt; \n\t\t\n#define MAX_ARRAY 100\n#define SIMULACOES 10000000\n\t\t\n\/\/ cada indice deste array representa um tempo de retardo. \/\/ Indice 10 -&gt; 10ms ...\nint delays&#91;MAX_ARRAY];\n\t\t\nint main (int argc, char ** argv)\n{\n\/\/ setup do ambiente da gsl\nconst gsl_rng_type *T;\ngsl_rng *r;\ngsl_rng_env_setup();\nT = gsl_rng_default;\nr = gsl_rng_alloc(T);\n\t\t\t\n\/\/ media e desvio padr\u00e3o\nconst double media = 24.676;\nconst double sd = 2.75;\n\t\t\t\n\/\/ inicializa\u00e7\u00e3o do array \nfor(int i = 0; i &lt; MAX_ARRAY; i++)\n{\n   delays&#91;i] = 0;\n}\n\t\t\t\n\/\/iteracao das simulacoes\nfor(int i = 0; i &lt; SIMULACOES; i++)\n{\n   \/\/ numero aleat\u00f3rio entre 0.000 e 1.000\n   double u = gsl_rng_uniform(r); \n   \n   \/* Retorna um numero dentro de uma distribui\u00e7\u00e3o normal\n    padr\u00e3o N(0,1)\n   *\/\n   double x = gsl_cdf_ugaussian_Pinv(u);      \n   \n   \/* gsl_cdf_ugaussian_Pinv retorna um Z-score, ent\u00e3o\n    mapeamos o valor de Z para nossa distribui\u00e7\u00e3o\n    *\/\n    x = x * sd + media;                       \n\n   \/\/ aqui guardamos somente a parte inteira (truncamos)\n   int indice = trunc(x);\n            \t\t            \n   if(indice &lt; MAX_ARRAY)\t\t\n     delays&#91;indice] = delays&#91;indice] + 1;\n}\n\/\/ Imprimimos os valores na sa\u00edda padr\u00e3o\nfor(int i = 0; i &lt; MAX_ARRAY; i++)\n{\n\/\/ se existe um valor (C trata valores 0 como false)\n   if(delays&#91;i])\n   {\n      double porc = ((double)delays&#91;i] \/  SIMULACOES) * 100.00;\n      printf(\"%dms : %d :==&gt; %.5f%%\\n\", i, delays&#91;i], porc);\n   }\n}\n\t\t\t\n\/\/ liberando a mem\u00f3ria alocada por gsl_rng_alloc\ngsl_rng_free(r);\n\t\t\nreturn 0;\n}<\/code><\/pre>\n\n\n\n<p>O c\u00f3digo acima utiliza a biblioteca <a href=\"https:\/\/www.gnu.org\/software\/gsl\/\" data-type=\"link\" data-id=\"https:\/\/www.gnu.org\/software\/gsl\/\">GSL &#8211; GNU Scientific Library.<\/a> D\u00e1 para melhorar muito o programinha acima. Mas aqui o foco \u00e9 outo. Eu salvei o arquivo fonte como MC25ms.c e compilei no Ubuntu 20.04 com<\/p>\n\n\n\n<p>gcc -o MC25 -Wall MC25ms.c -lgsl -lm -lgslcblas<\/p>\n\n\n\n<p>A sa\u00edda do programa esta  na figura abaixo.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"313\" height=\"503\" src=\"https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/disp25.jpeg\" alt=\"\" class=\"wp-image-136\" srcset=\"https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/disp25.jpeg 313w, https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/disp25-187x300.jpeg 187w\" sizes=\"auto, (max-width: 313px) 100vw, 313px\" \/><\/figure>\n\n\n\n<p>Este histograma n\u00e3o que dizer que a probabilidade do retardo detonar com 25ms \u00e9 13,78%, mas que 13,78% \u00e9 a chance dele ser encaixado no tempo 25ms, que vai de 25.0000 a 25.9999999\u2026<br>Vamos comparar nossa pequena simula\u00e7\u00e3o Monte Carlo com a integra\u00e7\u00e3o da Fun\u00e7\u00e3o Densidade de Probabilidade &#8211; FDP (adoro essa abrevia\u00e7\u00e3o) sobre um intervalo. A FDP da normal \u00e9:<\/p>\n\n\n\n<p>\\(f_X(x) = \\frac{1}{{\\sqrt {2\\pi \\sigma^2} }}e^{ &#8211; \\frac{1}{2}\\big(\\frac{{x &#8211; \\mu}}{\\sigma}\\big)^2} \\quad -\\infty&lt; x &lt; \\infty\\)<\/p>\n\n\n\n<p>Se integramos a fun\u00e7\u00e3o acima sobre um intervalo qualquer \\([a;b]\\), obtemos a probabilidade de que \\(X\\) esteja dentro do intervalo.<\/p>\n\n\n\n<p>\\(P(a &lt; X &lt; b) = \\int\\limits_a^b {{\\frac{1}{{\\sqrt {2\\pi \\sigma^2} }}e^{ &#8211; \\frac{1}{2}\\big(\\frac{{x &#8211; \\mu}}{\\sigma}\\big)^2}}}dx\\)<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"623\" src=\"https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/fdp-1024x623.jpeg\" alt=\"\" class=\"wp-image-141\" srcset=\"https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/fdp-1024x623.jpeg 1024w, https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/fdp-300x183.jpeg 300w, https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/fdp-768x467.jpeg 768w, https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/fdp.jpeg 1249w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Todos que tentaram encontrar uma solu\u00e7\u00e3o anal\u00edtica para a integral acima falharam. Conjectura-se que nem existe. Por isso o pessoal agrupa os valores da integral na famosa tabela de z-score. Mas os nerds costumam colocar os limites de integra\u00e7\u00e3o como \\((-\\infty;b)\\). Veja a figura abaixo.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"623\" src=\"https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/fdpInfty-1024x623.jpeg\" alt=\"\" class=\"wp-image-142\" srcset=\"https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/fdpInfty-1024x623.jpeg 1024w, https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/fdpInfty-300x183.jpeg 300w, https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/fdpInfty-768x467.jpeg 768w, https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/fdpInfty.jpeg 1249w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>Assim, se voc\u00ea quer encontrar a probabilidade \\(P\\) tal que<\/p>\n\n\n\n<p>\\(P(a &lt; X &lt; b)\\)<\/p>\n\n\n\n<p>Voc\u00ea deve calcular:<\/p>\n\n\n\n<p>\\(P(a &lt; X &lt; b) = \\int\\limits_{-\\infty}^b {{\\frac{1}{{\\sqrt {2\\pi \\sigma^2} }}e^{ &#8211; \\frac{1}{2}\\big(\\frac{{x &#8211; \\mu}}{\\sigma}\\big)^2}}}dx &#8211; \\int\\limits_{-\\infty}^a {{\\frac{1}{{\\sqrt {2\\pi \\sigma^2} }}e^{ &#8211; \\frac{1}{2}\\big(\\frac{{x &#8211; \\mu}}{\\sigma}\\big)^2}}}dx \\,\\,\\,\\,\\ a&lt;b\\)<\/p>\n\n\n\n<p>N\u00e3o entre em p\u00e2nico. Na maioria das planilhas eletr\u00f4nicas voc\u00ea consegue calcular a bruxaria acima fazendo a subtra\u00e7\u00e3o dos resultados da fun\u00e7\u00e3o DIST.NORM.N<br>D\u00ea uma olhada na tabela abaixo.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"527\" height=\"722\" src=\"https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/tabela1.jpeg\" alt=\"\" class=\"wp-image-147\" srcset=\"https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/tabela1.jpeg 527w, https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/tabela1-219x300.jpeg 219w\" sizes=\"auto, (max-width: 527px) 100vw, 527px\" \/><\/figure>\n\n\n\n<p>Na coluna B, nas linhas em amarelo, voc\u00ea coloca a seguinte f\u00f3rmula:<\/p>\n\n\n\n<p>DIST.NORM.N(tempo;media;desvio padr\u00e3o;1)<\/p>\n\n\n\n<p>O tempo \u00e9 o valor da c\u00e9lula da coluna A adjacente; m\u00e9dia \u00e9 o conte\u00fado de B1; desvio padr\u00e3o, B2; o valor 1 no final significa que a fun\u00e7\u00e3o vai retornar a probabilidade acumulada.<br>Por exemplo, para o tempo de 25ms (c\u00e9lula B18), a f\u00f3rmula \u00e9:<br>DIST.NORM.N(A18;$B$1;$B$2;1)<br>Na coluna C, nas c\u00e9lulas em verde, para calcular a probabilidade de que o retardo, por exemplo, possa ser encaixado no tempo 12ms, voc\u00ea deve subtrair da probabilidade acumulada do tempo 13ms da acumulada de 12ms. Lembre-se que para que um retardo seja considerado como 12ms, no nosso exemplo, seu tempo deve estar entre 12,000ms a 12,99999\u2026ms.<\/p>\n\n\n\n<p>Veja que os resultados da planilha eletr\u00f4nica s\u00e3o quase id\u00eanticos aos obtidos pela simula\u00e7\u00e3o. A simula\u00e7\u00e3o poderia ter sido feita na planilha. Mas eu, e isso \u00e9 uma posi\u00e7\u00e3o particular minha, prefiro construir c\u00f3digos em C\/C++ quando trabalho com sistemas de otimiza\u00e7\u00e3o, busca e simula\u00e7\u00f5es Monte Carlo. Nada impede que voc\u00ea fa\u00e7a em Excel, Libre Office etc. Mas lembre-se que isso ter\u00e1 um custo, dificilmente voc\u00ea conseguir\u00e1 simular 10 milh\u00f5es de retardos em uma planilha sem recorrer a macros. Outra op\u00e7\u00e3o, se voc\u00ea tem arrepios quando enxerga um c\u00f3digo C ou similar, \u00e9 utilizar algum SAC, como Matlab, Octave, Origin etc ou mesmo alguma linguagem interpretada que encapsula a maioria da complexidade, como Python e R, por exemplo.<\/p>\n\n\n\n<p>Depois deste primeiro contato com a incerteza, podemos construir um modelo estat\u00edstico para uma sequ\u00eancia de detona\u00e7\u00e3o. Isso implica que voc\u00ea dever\u00e1 olhar para o sequenciamento com outros olhos. N\u00e3o como algo determin\u00edstico e certo, mas como uma sequ\u00eancia de eventos aleat\u00f3rios que voc\u00ea deve, de certa forma, controlar.<\/p>\n\n\n\n<p>A figura abaixo mostra o sequenciamento mais simples que podemos imaginar at\u00e9 agora. Dois furos que s\u00e3o iniciados no mesmo instante, mas que como voc\u00ea ver\u00e1, n\u00e3o detonam no mesmo instante apesar de serem iniciados no mesmo instante. Se voc\u00ea entender essa frase seus projetos de sequenciamento nunca mais ser\u00e3o os mesmos.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"229\" height=\"226\" src=\"https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/2x25.jpeg\" alt=\"\" class=\"wp-image-152\"\/><\/figure>\n\n\n\n<p>O valor esperado, tanto do furo 1, \\(E_1\\), quanto do furo 2, \\(E_2\\), \u00e9 o valor m\u00e9dio (\\(t_m\\)) do retardo. Sabendo que os dois retardos possuem a mesma distribui\u00e7\u00e3o, podemos perguntar qual \u00e9 a probabilidade dos dois retardos detonarem ao mesmo tempo? E aqui precisamos definir o que \u00e9 &#8220;mesmo tempo&#8221;. Vamos supor que vamos medindo o instante exato que cada retardo detona. Tabelamos os valores da seguinte maneira:<\/p>\n\n\n\n<p>\\(t_{rn} = int(|t_1 &#8211; t_2|)\\)<\/p>\n\n\n\n<p>O valor \\(t_{rn}\\) \u00e9 a diferen\u00e7a de tempo da n-\u00e9sima medi\u00e7\u00e3o. Veja que guardamos apenas a parte inteira do n\u00famero. Assim, um n\u00famero como \\(-0,67468\\) ser\u00e1 representando como apenas \\(0\\). Desta forma, consideramos que dois retardos detonam no mesmo tempo quando a parte inteira da sua diferen\u00e7a \u00e9 zero. Logo, a nossa defini\u00e7\u00e3o entende uma detona\u00e7\u00e3o simult\u00e2nea quando a diferen\u00e7a entre dois retardos est\u00e1 no intervalo:<\/p>\n\n\n\n<p>\\(-0,99999999\u2026 \\leq t_{rn} \\leq 0,99999999\u2026\\)<\/p>\n\n\n\n<p>Qualquer valor da diferen\u00e7a que esteja neste intervalo ser\u00e1 considerado &#8220;instant\u00e2neo&#8221;.<br>Vamos agora simular 10 milh\u00f5es de diferen\u00e7as de tempo. Eu modifiquei um pouco o primeiro programa. Adicionei novas funcionalidades, d\u00ea uma olhada:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>#include &lt;stdio.h&gt;\n#include &lt;math.h&gt;\n#include &lt;unistd.h&gt;\n#include &lt;gsl\/gsl_cdf.h&gt; \/\/ fun\u00e7oes de dsitribui\u00e7\u00e3o de probabilidade\n#include &lt;gsl\/gsl_rng.h&gt; \/\/ gera\u00e7\u00e3o de n\u00fameros aleaorios\n\nint simulacoes = 0;\nint detonadores = 0;\ndouble media = 0.0f;\ndouble dp = 0.0f;\ndouble limite_inferior = 0.00;\ndouble limite_superior = 0.00;\n\nconst gsl_rng_type *T;\ngsl_rng *r;\n\ndouble* TemposSorteados;\n\nint encontrados = 0;\n\nvoid LibertemAMemoriaJa()\t\n{\n\tfree(TemposSorteados);\n\t\/\/ liberando a mem\u00f3ria alocada por gsl_rng_alloc\n\tgsl_rng_free(r);\n}\n\t\nvoid CriarArrayTempos()\n{\n\tif(detonadores &gt;= 0)\n\t\tTemposSorteados = (double*)(malloc(detonadores * sizeof(double)));\n\telse\n\t\tTemposSorteados = NULL;\n}\n\nvoid SetupGSL()\n{\n\tgsl_rng_env_setup();\n\tT = gsl_rng_default;\n\tr = gsl_rng_alloc(T);\n}\n\ndouble TempoRetardo(const double media, const double sd)\n{\n\tdouble u = gsl_rng_uniform(r);                  \/\/ numero aleatorio entre 0.000 e 1.000\n\tdouble x = gsl_cdf_ugaussian_Pinv(u);           \/\/ retorna um numero dentro de uma distribui\u00e7\u00e3o normal padr\u00e3o N(0,1)\n\treturn x * sd + media;\n}\n\nvoid PreencheTempos()\n{\n\tfor(int i = 0; i &lt; detonadores; i++)\n\t\tTemposSorteados&#91;i] = TempoRetardo(media, dp);\n}\n\t\nint CalculaDiferencas()\n{\n\tint diferenca = 0;\n\tfor(int i = 0; i &lt; detonadores; i++)\n\t\tfor(int j = i + 1; j &lt; detonadores; j++)\n\t\t{\t\n\t\t\tdiferenca = trunc((TemposSorteados&#91;i] - TemposSorteados&#91;j]));\n\t\t\tdiferenca = abs(diferenca);\n\t\t\tif( diferenca &gt; limite_superior || diferenca &lt; limite_inferior)\n\t\t\t\treturn 0;\n\t\t}\nreturn 1;\n}\n\n\t\nvoid ValoresEntrada(int argc, char **argv)\n{\n\tchar ch;\n\twhile( (ch = getopt(argc, argv, \"s:d:m:p:a:b:\")) != EOF )\n\t{\n\t\tswitch(ch)\n\t\t{\n\t\t\t\/\/ numero de simula\u00e7\u00f5es\n\t\t\tcase 's':\n\t\t\t\tsimulacoes = atoi(optarg);\n\t\t\t\tbreak;\n\t\t\t\/\/ numero de detonadores\n\t\t\tcase 'd':\n\t\t\t\tdetonadores = atoi(optarg);\n\t\t\t\tbreak;\n\t\t\t\/\/ media\n\t\t\tcase 'm':\n\t\t\t\tmedia = atof(optarg);\n\t\t\t\tbreak;\n\t\t\t\/\/ desvio padrao\n\t\t\tcase 'p':\n\t\t\t\tdp = atof(optarg);\n\t\t\t\tbreak;\n\t\t\t\/\/ limite inferior\n\t\t\tcase 'a':\n\t\t\t\tlimite_inferior = trunc(atof(optarg));\n\t\t\t\tbreak;\n\t\t\t\/\/ limite superior\n\t\t\tcase 'b':\n\t\t\t\tlimite_superior = trunc(atof(optarg));\n\t\t\t\tbreak;\n\t\t}\n\t}\n\t\n}\n\t\t\t\t\nint main (int argc, char ** argv)\n{\n\tSetupGSL();\n\tValoresEntrada(argc,argv);\n\tCriarArrayTempos();\n\t\n\tdouble porc = 0.00;\n\tint contagem = 0;\n\n\t\/\/iteracao das simulacoes\n\tfor(int i = 0; i &lt; simulacoes; i++)\n\t{\n\t\tPreencheTempos(media,dp);\t\n\t\tif(CalculaDiferencas())\n\t\tcontagem++;\n\t}\n  \tif(simulacoes &gt; 0)\n\t\tporc = (double)contagem \/ simulacoes;\n\t\n\tporc *= 100.00;\n\n\tprintf(\"%d : %0.5f%%\\n\", contagem, porc);\t\n\t\n\tLibertemAMemoriaJa();\n\n\treturn 0;\n}<\/code><\/pre>\n\n\n\n<p>Este programa aceita os argumentos:<br>s &#8211; n\u00famero de simula\u00e7\u00f5es;<br>d &#8211; quantidade de detonadores;<br>m &#8211; m\u00e9dia;<br>p &#8211; desvio padr\u00e3o;<br>a &#8211; limite inferior;<br>b &#8211; limite superior;<br>O execut\u00e1vel com os argumentos -s10000000 -d2 -m24.676 -p2.75 -a0 -b0 produz a sa\u00edda 20.28069%.<br>Isto significa que, simulando 10 milh\u00f5es de vezes a diferen\u00e7a de dois retardos de 25ms iniciados ao mesmo tempo, com um m\u00e9dia de 24,676ms e desvio padr\u00e3o de 2,75ms, em 20,29% da vezes a diferen\u00e7a inteira entre eles foi de 0ms.<br>Voc\u00ea pode verificar o resultado desta simula\u00e7\u00e3o Monte Carlo na sua planilha. Para isso, precisamos construir um sistema equivalente a dois retardos. O valor esperado da diferen\u00e7a de tempos dos retardos \u00e9:<\/p>\n\n\n\n<p>\\(E[t_{r}] = |E[t{r1}]-E[t_{r2}]| = 0ms\\)<\/p>\n\n\n\n<p>Como s\u00e3o eventos independentes, ou seja, o tempo de retardo de cada um n\u00e3o depende do tempo de retardo do outro, mas apenas das incertezas relacionadas aos erros do pr\u00f3prio dispositivo, a vari\u00e2ncia deste sistema \u00e9:<\/p>\n\n\n\n<p>\\(V[t_{r}] = V[t{r1}] + V[t_{r2}] = 2,75^2 + 2,75^2 = 15,125(ms)^2\\)<\/p>\n\n\n\n<p>E o desvio padr\u00e3o:<\/p>\n\n\n\n<p>\\(\\sigma = \\sqrt{15,125(ms)^2} = 3,88908729652601ms\\)<\/p>\n\n\n\n<p>A diferen\u00e7a de tempo de detona\u00e7\u00e3o dos dois retardos de 25ms do nosso exemplo forma uma Normal com m\u00e9dia 0ms e desvio padr\u00e3o de 3,89ms. Com estes dados voc\u00ea pode construir uma tabela com o uso de DIST.NORM.N. Veja na figura abaixo.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"529\" height=\"767\" src=\"https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/dif225.jpeg\" alt=\"\" class=\"wp-image-160\" srcset=\"https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/dif225.jpeg 529w, https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/dif225-207x300.jpeg 207w\" sizes=\"auto, (max-width: 529px) 100vw, 529px\" \/><\/figure>\n\n\n\n<p>Nas c\u00e9lulas amarelas temos a f\u00f3rmula<br>DIST.NORM.N(tempo;m\u00e9dia;desvio padr\u00e3o;1)<br>J\u00e1 para a c\u00e9lulas verdes temos as seguintes situa\u00e7\u00f5es:<br>a) Na c\u00e9lula correspondente ao 0ms, temos a f\u00f3rmula B22 &#8211; B21. Isto significa que estamos aplicando a defini\u00e7\u00e3o \\(P(a &lt; X &lt; b)\\) considerando que a probabilidade do valor &#8220;0ms&#8221; corresponde a \u00e1rea entre os valores -0,999999ms a 0,99999ms.<br>b) J\u00e1 para a c\u00e9lulas correspondentes aos tempo menores que 0ms, devemos lembrar que, por exemplo, uma diferen\u00e7a de -1ms corresponde a valores entre -1,000ms e -1,9999ms, desta forma para o valor de -1ms devemos efetuar B20-B19 e assim sucessivamente. <\/p>\n\n\n\n<p>Para as diferen\u00e7as positivas, por exemplo, para 1ms, devemos fazer B23-B22 e assim sucessivamente.<\/p>\n\n\n\n<p>Veja que a probabilidade associada a 0ms da planilha est\u00e1 muito pr\u00f3xima daquela obtida pela simula\u00e7\u00e3o.<br>Se queremos saber qual a probabilidade de detonarem com um m\u00f3dulo da diferen\u00e7a no intervalo de 8,000 a 8,99999ms podemos simular com os par\u00e2metros<br>-s10000000 -d2 -m24.676 -p2.75 -a8 -b8<br>A minha simula\u00e7\u00e3o produziu uma sa\u00edda de 1,90577%. Na planilha, se voc\u00ea somar os valores das c\u00e9lulas correspondentes as diferen\u00e7as de 8m e -8ms vai encontrar um valor de 1,90241%. Muito pr\u00f3ximo ao valor da simula\u00e7\u00e3o.<br>A tabela abaixo mostra os valores que encontrei tanto na planilha quanto na simula\u00e7\u00e3o Monte Carlo. Lembre-se que voc\u00ea n\u00e3o deve ler a coluna Diferen\u00e7a 8, por exemplo, como a probabilidade de dois retardos detonarem com diferen\u00e7a de exatamente 8ms entre eles, mas com uma diferen\u00e7a no intervalo de -8.000&#8230;ms a -8.99999&#8230;ms OU 8.0000&#8230;ms a 8.9999&#8230;ms. <\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"403\" height=\"289\" src=\"https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/mcXplan.jpeg\" alt=\"\" class=\"wp-image-162\" srcset=\"https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/mcXplan.jpeg 403w, https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/mcXplan-300x215.jpeg 300w\" sizes=\"auto, (max-width: 403px) 100vw, 403px\" \/><\/figure>\n\n\n\n<p>Um detalhe que n\u00e3o posso deixar de mencionar \u00e9 que n\u00e3o tem como saber qual o retardo, da direita ou da esquerda, vai detonar primeiro. Quando os dois possuem um valor de diferen\u00e7a outro que 0ms, existe uma chance de 50% para cada um de ser o primeiro. \u00c9 o estilo desmonte de rocha de jogar uma moeda.<br>Agora se queremos saber como se comportam uma s\u00e9rie de retardos iniciados ao mesmo tempo, a coisa fica um pouquinho mais complicada.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"456\" height=\"169\" src=\"https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/nx25.jpeg\" alt=\"\" class=\"wp-image-163\" srcset=\"https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/nx25.jpeg 456w, https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/nx25-300x111.jpeg 300w\" sizes=\"auto, (max-width: 456px) 100vw, 456px\" \/><\/figure>\n\n\n\n<p>A probabilidade de todos os retardos detonarem exatamente ao mesmo tempo \u00e9 virtualmente zero. Veja, para se calcular a probabilidade atrav\u00e9s da integral<\/p>\n\n\n\n<p>\\(P(a &lt; X &lt; b) = \\int\\limits_{a}^b {{\\frac{1}{{\\sqrt {2\\pi \\sigma^2} }}e^{ &#8211; \\frac{1}{2}\\big(\\frac{{x &#8211; \\mu}}{\\sigma}\\big)^2}}}dx\\)<\/p>\n\n\n\n<p>para um ponto \\(a=b\\), ter\u00edamos que calcular a \u00e1rea de um segmento de reta, o que n\u00e3o faz sentido. Existem modos de impor um limite de forma que poder\u00edamos tentar algo como:<\/p>\n\n\n\n<p>\\(P(X) = \\lim\\limits_{\\epsilon\\rightarrow 0}\\int\\limits_{a}^{a+\\epsilon} {{\\frac{1}{{\\sqrt {2\\pi \\sigma^2} }}e^{ &#8211; \\frac{1}{2}\\big(\\frac{{x &#8211; \\mu}}{\\sigma}\\big)^2}}}dx\\)<\/p>\n\n\n\n<p>Mas acho que foge muito do foco aqui al\u00e9m de ser extremamente trabalhoso e dif\u00edcil. Podemos conviver harmoniosamente com o intervalo (a,b) com \\(a &lt; b\\).<\/p>\n\n\n\n<p>Voltando a figura. Vamos simular a detona\u00e7\u00e3o de 2 a 100 retardos de 25ms iniciados de uma s\u00f3 vez e contar quantas vezes a subtra\u00e7\u00e3o entre eles fica na casa do &#8220;0ms&#8221;. Resumindo, vamos calcular<br>\\(int(|t_1 &#8211; t_2|)\\)<br>\\(int(|t_1 &#8211; t_3|)\\)<br>\\(int(|t_1 &#8211; t_4|)\\)<br>\\(\\vdots\\)<br>\\(int(|t_1 &#8211; t_n|)\\)<br>\\(int(|t_2 &#8211; t_3|)\\)<br>\\(\\vdots\\)<br>\\(int(|t_2 &#8211; t_n|)\\)<br>\\(int(|t_{n-1} &#8211; t_n|)\\)<\/p>\n\n\n\n<p>Veja que a quantidade de subtra\u00e7\u00f5es, \\(S\\), que podemos ter com \\(n\\) retardos subtra\u00eddos dois a dois s\u00e3o<br>\\(S=\\frac{n!}{2!(n-2)!}\\) <br>considerando que $|t_1 &#8211; t_2| = |t_2 &#8211; t_1|$.<\/p>\n\n\n\n<p>A tabela abaixo mostra a compila\u00e7\u00e3o da simula\u00e7\u00e3o Monte Carlos da inicia\u00e7\u00e3o simult\u00e2nea de 2 a 100 retardos de 25ms.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"633\" height=\"443\" src=\"https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/tab25ms.jpeg\" alt=\"\" class=\"wp-image-171\" srcset=\"https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/tab25ms.jpeg 633w, https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/tab25ms-300x210.jpeg 300w\" sizes=\"auto, (max-width: 633px) 100vw, 633px\" \/><\/figure>\n\n\n\n<p>Perceba, sutilmente, que a tabela diz que a CME (Carga M\u00e1xima por Espera) tamb\u00e9m \u00e9 uma vari\u00e1vel aleat\u00f3ria para esta configura\u00e7\u00e3o de desmonte. Se voc\u00ea considera, como muitos livros e muita gente faz, que as cargas podem ser consideradas como &#8220;\u00fanicas&#8221; quando detonam com menos de \\(8ms\\) entre elas, ent\u00e3o deve notar que, no nosso pequeno estudo te\u00f3rico, a \\(CME_8\\) para 20 n\u00e3o-el\u00e9tricos de \\(25ms\\) iniciados ao mesmo tempo tem \\(\\approx 27,5\\%\\) de chance de ocorrer. Assim, quando voc\u00ea soma as cargas de 20 furos nesta configura\u00e7\u00e3o e alimenta o seu modelo de regress\u00e3o linear (que j\u00e1 n\u00e3o \u00e9 l\u00e1 muito bom) para previs\u00e3o de vibra\u00e7\u00f5es, voc\u00ea faz o seu \\(R^2\\) diminuir devido a tristeza.<\/p>\n\n\n\n<p>Para detonadores com tempo maior, assim como no filme do Homem Aranha, com um grande retardo vem uma grande dispers\u00e3o. Como exemplo, vamos usar um n\u00e3o-el\u00e9trico de tempo nominal de \\(3000ms\\). A distribui\u00e7\u00e3o deste tempo de retardo poderia ser tranquilamente algo como \\(N(2997,8;98,6)\\). D\u00ea uma olhadinha na figura abaixo.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"669\" height=\"338\" src=\"https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/hist3000.jpeg\" alt=\"\" class=\"wp-image-174\" srcset=\"https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/hist3000.jpeg 669w, https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/hist3000-300x152.jpeg 300w\" sizes=\"auto, (max-width: 669px) 100vw, 669px\" \/><\/figure>\n\n\n\n<p>Da mesma maneira como fizemos com o 25ms, vamos simular este n\u00e3o-el\u00e9trico de 3000ms. Veja os resultados obtidos na tabela abaixo.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"876\" height=\"209\" src=\"https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/n3000.jpeg\" alt=\"\" class=\"wp-image-176\" srcset=\"https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/n3000.jpeg 876w, https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/n3000-300x72.jpeg 300w, https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/n3000-768x183.jpeg 768w\" sizes=\"auto, (max-width: 876px) 100vw, 876px\" \/><\/figure>\n\n\n\n<p>Percebeu? A chance de voc\u00ea detonar 2 n\u00e3o-el\u00e9tricos de 3000ms com uma diferen\u00e7a de tempos entre eles de 0ms a 8ms \u00e9 de 5,15%. Por exemplo, em sequencias de contorno para abertura de t\u00faneis \u00e9 comum termos mais do que 10 n\u00e3o-el\u00e9tricos de 3000ms sendo iniciados no mesmo instante. Neste caso, n\u00e3o s\u00f3 a CME \u00e9 drasticamente alterada, mas tamb\u00e9m estamos tentando efetuar um smooth blasting (m\u00e9todo mais comum) com cargas que n\u00e3o est\u00e3o detonando no mesmo tempo. Queira voc\u00ea ou n\u00e3o, isso prejudica uma a obten\u00e7\u00e3o de um corte legal. Existe uma t\u00e9cnica que desenvolvemos para eliminar esta dispers\u00e3o nos furos de contorno, mas fica para outro texto.<\/p>\n\n\n\n<p>Voc\u00ea pode estender a an\u00e1lise acima utilizando, por exemplo, uma distribui\u00e7\u00e3o binomial para calcular a probabilidade da CME devido a detona\u00e7\u00e3o de detonadores de dois em dois para um total de n detonadores. Ou 3 em 3, 4 em 4 etc. Isso vai te levar a responder a perguntas como &#8220;Qual a probabilidade de uma CME de Xkg se eu iniciar N n\u00e3o-el\u00e9tricos no mesmo instante?&#8221;. Tenta a\u00ed.<\/p>\n\n\n\n<p><br>Podemos calcular o tempo de retardo equivalente quando combinamos n\u00e3o-el\u00e9tricos em um sequenciamento. N\u00e3o basta somar apenas o valor nominal do n\u00e3o-el\u00e9trico e considerar que esta soma possui erro zero. Na verdade, dependendo da situa\u00e7\u00e3o, isso pode ser perigoso. Voc\u00ea pode comprometer seriamente a sequ\u00eancia, causando sobreposi\u00e7\u00f5es e &#8220;overlappings&#8221;. No restante do texto &#8220;overlapping&#8221; significa que uma sequ\u00eancia detonou antes que a sequ\u00eancia pr\u00e9via tenha detonado. <\/p>\n\n\n\n<p>A maneira mais simples de se construir um retardo equivalente \u00e9 supor a sua normalidade e considerar o valor esperado como a soma ou subtra\u00e7\u00e3o das m\u00e9dias e, conjuntamente, a soma das vari\u00e2ncias. Isso implica que o retardo equivalente depender\u00e1 de como se chega at\u00e9 ele com a sequ\u00eancia. Explico melhor. Veja as duas possibilidades de sequenciamento na figura abaixo. Ignorando as dispers\u00f5es, ela s\u00e3o as mesmas. Mas uma delas possui uma desvantagem muito maior que a outra.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"936\" height=\"592\" src=\"https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/sequencias.jpeg\" alt=\"\" class=\"wp-image-177\" srcset=\"https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/sequencias.jpeg 936w, https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/sequencias-300x190.jpeg 300w, https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/sequencias-768x486.jpeg 768w\" sizes=\"auto, (max-width: 936px) 100vw, 936px\" \/><\/figure>\n\n\n\n<p>Suponha que todos os furos est\u00e3o com uma escorva de n\u00e3o-el\u00e9trico de 250ms. Desta forma, os furos #3 (142ms) da segunda linha e o furo #4 (100ms) da primeira linha da sequ\u00eancia 1 podem ter seu retardo equivalente calculado como:<\/p>\n\n\n\n<p>E[f_{2-3}] = t_{250} + t_{67} + t_{25} + t_{25} + t_{25}<br>V[f_{2-3}] = V_{250} + V_{67} + V_{25} + V_{25} + V_{25}<\/p>\n\n\n\n<p>E[f_{1-4}] = t_{250} + t_{25} + t_{25} + t_{25} + t_{25}<br>V[f_{1-4}] = V_{250} + V_{25} + V_{25} + V_{25} + V_{25}<\/p>\n\n\n\n<p>Suponha que os retardos podem ser representados por:<br>\\(t_{25} = N(24,676 ; 2,75)<br>\\\\<br>t_{42} = N(42,331 ; 3,65)<br>\\\\<br>t_{67} = N(66,773 ; 4,43)<br>\\\\<br>t_{250} = N(250,32 ; 7,41)\\)<\/p>\n\n\n\n<p>Ent\u00e3o<br>\\(E[f_{2-3}] = 250,32 + 66,773 + 24,676 + 24,676 + 24,676 = 391,121ms<br>\\\\<br>V[f_{2-3}] = 7,41^2 + 4,43^2 + 2,75^2 + 2,75^2 + 2,75^2 = 97,220(ms)^2<br>\\\\<br>\\sigma_{2-3} = \\sqrt{97,220} = 9,86ms<br>\\\\<br>N_{2-3}(391,121;9,86)\\)<br><br>Da mesma forma<br>\\(N_{1-4}(349,024;9,22)\\)<\/p>\n\n\n\n<p>Perceba que na situa\u00e7\u00e3o 1 que os caminhos para se chegar aos furos s\u00e3o independentes. Isso significa que a diferen\u00e7a de tempo entre os furos 1-4 e 2-3 s\u00e3o processos, tamb\u00e9m, independentes. Esperamos que a diferen\u00e7a de tempo entre eles seja<br>\\(D_1 = 391,121 &#8211; 349,024 = 42,097ms\\)<br>e<br>\\(V_D1 = 9,86^2 + 9,22^2 = 182,3786(ms)^2 \\rightarrow \\sigma_D = 13,50476ms\\)<br><br>A probabilidade do tempo de retardo entre estes dois furos pode ent\u00e3o ser representada por uma normal \\(N(42,097; 13,50476)\\). Vamos perguntar para esta distribui\u00e7\u00e3o qual a chance da sequ\u00eancia 1 ser invertida? Ou seja, qual a chance do furo da linha 2 detonar antes do furo da linha 1.<\/p>\n\n\n\n<p>Para responder podemos simular uma Monte Carlo, utilizar a defini\u00e7\u00e3o de FDP ou mesmo a tabela de z-score, observando que essa pergunta \u00e9 equivalente a \\(P(X &lt; 0)\\). Na simula\u00e7\u00e3o obtemos 0,08983%. Pelo calculo atrav\u00e9s do z-score temos:<\/p>\n\n\n\n<p>\\(z = \\frac{0 &#8211; 42,097}{13,50476} = -3,12\\)<\/p>\n\n\n\n<p>Procurando em una tabela de z-score o valor de -3,12 voc\u00ea vai encontrar um valor de 0,0009 ou 0,09%. Valor pr\u00f3ximo ao da nossa simula\u00e7\u00e3o.<br><br>Agora vejamos a situa\u00e7\u00e3o do caminho 2. A simula\u00e7\u00e3o retorna a probabilidade de overlapping em 0,00694%. A diferen\u00e7a de tempos entre os furos depende somente da dispers\u00e3o de 3 pe\u00e7as: fundo do furo 1-4, fundo do furo 2-3 e do retardo de 42ms, pois o caminho para chegar at\u00e9 eles \u00e9 compartilhado. Podemos dizer que ambos possuem um passado em comum. A normal associada a diferen\u00e7a de tempo entre os dois furos nesta nova configura\u00e7\u00e3o \u00e9 <\/p>\n\n\n\n<p>\\(D_2(42,331; 11,09678)\\) <\/p>\n\n\n\n<p>Da mesma maneira, a probabilidade de overlapping \u00e9:<\/p>\n\n\n\n<p>\\(z = \\frac{0 &#8211; 42,331}{11,09678} = -3,82 \\rightarrow P(x &lt; 0) = 0,007\\%\\)<\/p>\n\n\n\n<p>Veja que a vari\u00e2ncia da sequ\u00eancia 2 para a diferen\u00e7a de tempo dos dois furos depende apenas dos tr\u00eas detonadores associados \u00e0 eles. J\u00e1 na sequencia 1, a vari\u00e2ncia depende de quantos retardos temos at\u00e9 se chegar aos furos. Isso significa que a probabilidade de overlapping depende do passado de ambos, ou seja, de quantos retardos detonaram. Vejamos, imagine que temos n\u00e3o 3, mas 30 retardos de 25ms at\u00e9 se chegar ao furo 1-30 e 29 retardos de 25ms mais um retardo de 67ms at\u00e9 se chegar ao furo 2-29. A normal que representa a diferen\u00e7a entre estes dois furos ser\u00e1 <\/p>\n\n\n\n<p>\\(D(42,097; 23,992)\\). <\/p>\n\n\n\n<p>O desvio padr\u00e3o \u00e9 muito maior, isso na pr\u00e1tica significa que a probabilidade de overlapping agora \u00e9:<\/p>\n\n\n\n<p>\\(z = \\frac{0 &#8211; 42,097}{23,992} = -1,75 \\rightarrow P(x &lt; 0) = 4,01\\%\\)<\/p>\n\n\n\n<p>Exatamente isso. Se voc\u00ea adotar uma liga\u00e7\u00e3o com caminhos independentes, voc\u00ea ter\u00e1 4% de chance de overlapping neste exemplo. Enquanto que se adotar uma liga\u00e7\u00e3o com passado comum, por exemplo, sua chance de overlapping permanecera em 0,007%.<br><br>E a probabilidade de overlapping aumenta muito se voc\u00ea n\u00e3o tiver cuidado na escolha dos tempos. J\u00e1 ouvi falar de desmontes onde se utilizava 1000ms de fundo e 17ms na superf\u00edcie e 4000ms no fundo e 42ms na superf\u00edcie. Para esta combina\u00e7\u00e3o de tempos nem precisamos ir muito longe para verificar onde est\u00e1 o problema. Vejamos:<\/p>\n\n\n\n<p>\\(N_{17}(16,898; 2,03)<br>\\\\<br>N_{42}(42,331 ; 3,65)<br>\\\\<br>N_{1000}(1043,5; 36,0)<br>\\\\<br>N_{4000}(3982,9; 112,3)\\)<\/p>\n\n\n\n<p><br>A figura abaixo mostra configura\u00e7\u00e3o de dois furos sequenciados com 1000ms\/17ms.<br><\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/17x1000-1024x576.jpeg\" alt=\"\" class=\"wp-image-186\" srcset=\"https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/17x1000-1024x576.jpeg 1024w, https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/17x1000-300x169.jpeg 300w, https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/17x1000-768x432.jpeg 768w, https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/17x1000-1536x864.jpeg 1536w, https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/17x1000.jpeg 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>A normal associada \u00e0 diferen\u00e7a de tempo desta situa\u00e7\u00e3o \u00e9<br><br>\\(D(16,898; 50,952)\\)<br><br>e a probabilidade de overlapping \u00e9:<br><br>\\(z = \\frac{0 &#8211; 16,898}{50.952} = -0,332 \\rightarrow P(x &lt; 0) \\approx 37\\%\\)<\/p>\n\n\n\n<p><br>Voc\u00ea n\u00e3o leu errado. A probabilidade \u00e9 de 37%. Na minha humilde opini\u00e3o, um risco inaceit\u00e1vel.<br><br>A configura\u00e7\u00e3o mostrada na figura abaixo n\u00e3o \u00e9 muito diferente.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1024\" height=\"576\" src=\"https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/42x4000-1024x576.jpeg\" alt=\"\" class=\"wp-image-187\" srcset=\"https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/42x4000-1024x576.jpeg 1024w, https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/42x4000-300x169.jpeg 300w, https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/42x4000-768x432.jpeg 768w, https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/42x4000-1536x864.jpeg 1536w, https:\/\/golin.dev.br\/site\/wp-content\/uploads\/2023\/09\/42x4000.jpeg 1920w\" sizes=\"auto, (max-width: 1024px) 100vw, 1024px\" \/><\/figure>\n\n\n\n<p>\\(D(42,331; 158,85)<br>\\\\<br>z = \\frac{0 &#8211; 42,331}{112,36} = -0,27 \\rightarrow P(x &lt; 0) \\approx 39\\%\\)<br><br><br>As simula\u00e7\u00f5es Monte Carlo feitas para ambas as configura\u00e7\u00f5es resultaram em 37,02619% e 39,47958%.<br><br>Ignorar as dispers\u00f5es pode ser um erro gave no seu projeto. Fique atento. Futuramente, em outro texto, vou te mostrar como construir um cron\u00f4metro com menos de US$150,00 para medir a dispers\u00e3o de n\u00e3o-el\u00e9tricos.<\/p>\n\n\n\n<p>A an\u00e1lise estat\u00edstica feita aqui n\u00e3o trata do assunto exaustivamente. Simplifiquei e resumi muita coisa, at\u00e9 porque se assim n\u00e3o fosse, o texto ficaria muito longo e, talvez, tedioso para al\u00e9m do que j\u00e1 \u00e9. Mas \u00e9 um passo inicial para voc\u00ea come\u00e7ar, se assim quiser. Os v\u00eddeos abaixo mostram situa\u00e7\u00f5es onde an\u00e1lises estat\u00edsticas foram usadas para obter um controle melhor das vibra\u00e7\u00f5es. Espero que goste. <\/p>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Desmontes muito pr\u00f3ximos de estruturas\" width=\"640\" height=\"360\" src=\"https:\/\/www.youtube.com\/embed\/Adk9sjJf9-w?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"10500kg de explosivos detonados a 5m de dist\u00e2ncia de uma f\u00e1brica.\" width=\"640\" height=\"360\" src=\"https:\/\/www.youtube.com\/embed\/28kVzSisVEY?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Desmonte com explosivos - Chapec\u00f3 - SC\" width=\"640\" height=\"360\" src=\"https:\/\/www.youtube.com\/embed\/JRjDPoWHIsI?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Todo desmonte deve ser controlado\" width=\"640\" height=\"360\" src=\"https:\/\/www.youtube.com\/embed\/nZhkan_V4-c?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n\n\n\n<figure class=\"wp-block-embed is-type-video is-provider-youtube wp-block-embed-youtube wp-embed-aspect-16-9 wp-has-aspect-ratio\"><div class=\"wp-block-embed__wrapper\">\n<iframe loading=\"lazy\" title=\"Desmonte de rochas com explosivos dentro de uma f\u00e1brica de alimentos\" width=\"640\" height=\"360\" src=\"https:\/\/www.youtube.com\/embed\/GLRtct5U_2c?feature=oembed\" frameborder=\"0\" allow=\"accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share\" referrerpolicy=\"strict-origin-when-cross-origin\" allowfullscreen><\/iframe>\n<\/div><\/figure>\n","protected":false},"excerpt":{"rendered":"<p>N\u00e3o se pode negar, quase todo mundo da \u00e1rea ignora os efeitos das dispers\u00f5es dos acess\u00f3rios n\u00e3o-el\u00e9tricos. Em alguns casos estas varia\u00e7\u00f5es no tempo de retardo n\u00e3o chegam a ser um problema. Mas em situa\u00e7\u00f5es, digamos, mais delicadas, ignorar a dispers\u00e3o n\u00e3o \u00e9 muito saud\u00e1vel.Todos, todos os acess\u00f3rios n\u00e3o-el\u00e9tricos de qualquer fabricante do mundo possuem [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[56],"tags":[16,19,14,15,23,27,24,13,18,28,20,25,22,26,17,21],"class_list":["post-122","post","type-post","status-publish","format-standard","hentry","category-__","tag-blastmats","tag-burden","tag-desmonte-de-rochas","tag-detonacao","tag-detonadores-eletronicos","tag-escavacao-valas","tag-estatistica","tag-explosivos","tag-fogo","tag-implosao","tag-malha-de-furacao","tag-mineracao","tag-nao-eletricos","tag-pedreira","tag-perfuracao","tag-retardos"],"_links":{"self":[{"href":"https:\/\/golin.dev.br\/site\/wp-json\/wp\/v2\/posts\/122","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/golin.dev.br\/site\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/golin.dev.br\/site\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/golin.dev.br\/site\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/golin.dev.br\/site\/wp-json\/wp\/v2\/comments?post=122"}],"version-history":[{"count":53,"href":"https:\/\/golin.dev.br\/site\/wp-json\/wp\/v2\/posts\/122\/revisions"}],"predecessor-version":[{"id":859,"href":"https:\/\/golin.dev.br\/site\/wp-json\/wp\/v2\/posts\/122\/revisions\/859"}],"wp:attachment":[{"href":"https:\/\/golin.dev.br\/site\/wp-json\/wp\/v2\/media?parent=122"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/golin.dev.br\/site\/wp-json\/wp\/v2\/categories?post=122"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/golin.dev.br\/site\/wp-json\/wp\/v2\/tags?post=122"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}