Charada: Você pode dizer quando a neve começou?

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br


[Esteartigofoipublicadopelaprimeiravezem[Thisarticlewasfirstpublishedon Posts | Joshua Cook, e gentilmente contribuiu para os R-blogueiros]. (Você pode relatar um problema sobre o conteúdo desta página aqui)


Deseja compartilhar seu conteúdo com R-blogueiros? clique aqui se você tiver um blog ou aqui se não tiver.

Riddler Express da FiveThirtyEight

(
Link para o artigo original.)

De Patrick Mayor, surge uma pergunta sobre algo que estamos fazendo
dias para manter a nós e aos outros seguros: distanciamento social.

Você está andando no meio de uma ampla calçada quando vê
alguém caminhando em sua direção na outra direção, também
meio da calçada, a 3 metros de distância. Sendo cidadãos responsáveis, você
passar um pelo outro, mantendo uma distância de pelo menos 6 pés
vezes. Quando você alcança as posições originais um do outro, você
deve estar de volta no meio da calçada novamente.

Você deve assumir que a outra pessoa segue o mesmo caminho que você,
mas virou (já que eles estão caminhando na direção oposta).
Por exemplo, você pode caminhar 3 pés para a esquerda e 12 pés para frente
e finalmente 3 pés de volta para a direita, andando um total de 18 pés
antes de trocar de posição.

Sendo preguiçoso (quero dizer, eficiente), você gostaria de saber o mínimo
distanciar você e a outra pessoa poderia caminhar para que você possa mudar
posições, mantendo-se pelo menos 6 pés afastados o tempo todo. o que
esta distância?

Plano

Basicamente, vou simular o processo com etapas de tempo muito pequenas
e rastreie a localização de cada pessoa. Esses pontos podem ser usados ​​para
meça a distância percorrida por cada pessoa.

Leia Também  Por que R? Webinar - Ensino de aprendizado de máquina on-line

Configuração

knitr::opts_chunk$set(echo = TRUE, comment = "#>")
library(glue)
library(ggforce)
library(gganimate)
library(tidyverse)
theme_set(theme_minimal())

Simulação

Constantes globais

Abaixo estão algumas constantes para definir desde o início. time_step_size
é a distância percorrida em cada etapa da simulação.
minimum_distance é a distância mínima segura que as duas pessoas precisam
ficar um do outro.

time_step_size 

Sub-rotinas

o update_tracker() A função atualiza uma tabela de dados com uma pessoa
local atual para uma determinada etapa de tempo.

update_tracker 

o move_person() A função move uma pessoa para a esquerda ou direita por um determinado
montante x.

move_person 

o shift_person() função desloca uma pessoa para cima ou para baixo por um determinado
sobre y.

shift_person 

o measure_distance() função mede as distâncias entre dois
((x, y)) coordenadas a e b.

measure_distance 

Loop de simulação principal

O seguinte loop for move cada pessoa, A e B, em direção a cada
outro de 12 pés de distância. A cada passo, a distância entre si
é medido e, se estiverem muito próximos um do outro, serão lentamente
afastados até que estejam novamente seguros. O movimento de cada pessoa é
rastreado em uma tabela de dados.

Uma complicação que encontrei foi como mover as pessoas de volta para o
meio depois que eles passaram um pelo outro. Em vez disso, percebi que o
problema é simétrico, então eu poderia executar a primeira metade do
simulação – de 12 a 6 pés de distância – e use a simetria para obter
A segunda parte.

A 

O gráfico abaixo mostra o caminho de A para a primeira metade do
simulação.

A_tracker %>%
ggplot(aes(x = x, y = y)) +
geom_line() +
labs(title = "Person A's path or the first half of the simulation")

cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br

A simulação foi concluída copiando as tabelas de dados do rastreador para A
e B e penteando-os em um único people_tracker Tabela de dados.

A_tracker %
mutate(x = 6 + x, y = rev(y), t = 6 + t) %>%
filter(t != 6)
)
B_tracker %
mutate(x = x - 6, y = rev(y), t = 6 + t) %>%
filter(t != 6)
)
ppl_tracker 

Finalmente, pude traçar os caminhos percorridos pelos dois indivíduos enquanto
sempre permanecendo o mais próximo possível do meio da calçada e
mantendo 6 pés afastados.

ppl_tracker %>%
mutate(y_A = y_A - 0.05,
y_B = y_B + 0.05) %>%
ggplot() +
geom_line(aes(x = x_A, y = y_A), color = "red", size = 1.1) +
geom_line(aes(x = x_B, y = y_B), color = "blue", size = 1.1) +
coord_equal() +
labs(x = "x", y = "y",
title = "Social distancing paths")

Leia Também  2 meses em 2 minutos - rOpenSci News, junho 2020

Os guias das regras de distanciamento social são mostrados na plotagem abaixo, eles
eles se sobrepõem muito porque não há dimensão de tempo.

ppl_tracker %>%
mutate(y_A = y_A - 0.05,
y_B = y_B + 0.05) %>%
ggplot() +
geom_ribbon(aes(x = x_A,
ymin = y_A-minimum_distance, ymax = y_A+minimum_distance),
fill = "red", color = NA, alpha = 0.1) +
geom_ribbon(aes(x = x_B,
ymin = y_B-minimum_distance, ymax = y_B+minimum_distance),
fill = "blue", color = NA, alpha = 0.1) +
geom_line(aes(x = x_A, y = y_A), color = "red", size = 1.1) +
geom_line(aes(x = x_B, y = y_B), color = "blue", size = 1.1) +
coord_equal() +
labs(x = "x", y = "y",
title = "Social distancing paths",
subtitle = "The ribbons indicate the 6 ft radiusnaround each person")

eu usei
‘Gganimate’ para mostrar as duas pessoas
caminhando um em direção ao outro com seus guias de distanciamento social de 1,8 m.

ppl_tracker %>%
mutate(y_A = y_A - 0.05,
y_B = y_B + 0.05) %>%
filter(row_number() %% 20 == 0) %>%
ggplot() +
geom_point(aes(x = x_A, y = y_A), color = "red", size = 3) +
geom_point(aes(x = x_B, y = y_B), color = "blue", size = 3) +
geom_circle(aes(x0 = x_A, y0 = y_A, r = minimum_distance / 2),
fill = "red", alpha = 0.1, color = NA) +
geom_circle(aes(x0 = x_B, y0 = y_B, r = minimum_distance / 2),
fill = "blue", alpha = 0.1, color = NA) +
coord_equal() +
labs(x = "x", y = "y", title = "Social distancing paths") +
transition_states(t, transition_length = 0.01,
state_length = 0, wrap = FALSE)

Distância total percorrida

Finalmente, como o Charada solicitou, calculei a distância total
viajado por pessoa A.

total_distance 

Cada pessoa viaja um total de 15,7 pés, 3,7 pés a mais do que sem o
necessidade de distanciamento social.



Se você chegou até aqui, por que não inscreva-se para atualizações do site? Escolha o seu sabor: e-mail, twitter, RSS ou facebook …



cupom com desconto - o melhor site de cupom de desconto cupomcomdesconto.com.br