Autor Tema: Probabilidad de que todas las parejas que saquemos sean mixtas

0 Usuarios y 1 Visitante están viendo este tema.

25 Junio, 2019, 03:53 pm
Respuesta #10

Masacroso

  • Moderador Global
  • Mensajes: 2,385
  • País: es
  • Karma: +0/-0
Como algunas cosas no las puedo abandonar hasta obtener un resultado satisfactorio (me refiero a la velocidad de ejecución del código de mi anterior respuesta) ayer me entretuve en hacer otra simulación de Monte Carlo de lo mismo, pero esta vez usando un script escrito en el lenguaje Julia, que es muchísimo más rápido que R  :laugh:.

Lo dejo aquí por si alguien tiene curiosidad:

Código: [Seleccionar]
# Necesitamos cargar la librería Random
using Random
# Definimos una función auxiliar que compara la paridad, miembro a miembro,
# de dos vectores aleatorios
function comp(n::Int64)
  # Generamos dos vectores aleatorios con números desde el 1 hasta 2n,
  # los sumamos miembro a miembro, luego tomamos módulo 2 miembro a miembro
  # y por último sumamos los valores del vector resultante
  sum((shuffle!(Vector(1:2*n)) .+ shuffle!(Vector(1:2*n))).%2)
end
# La función que calcula la probabilidad deseada: el primer argumento representa
# el número de bolas blancas, el segundo argumento es opcional y controla
# la cantidad de experimentos aleatorios de la simulación
function sim(n::Int64,m::Int64=24)
  # Un contador para el número de casos válidos
  x = 0
  for i in 1:2^m
    # Nuestros dos vectores aleatorios son equivalentes si y solo si
    # su paridad es la misma miembro a miembro
   if comp(n) == 0
    x += 1
   end
  end
  # La probabilidad estimada
   x/2^m
end

Con unas pequeñas modificaciones se puede comparar en una gráfica el valor teórico del estimado.



ACTUALIZACIÓN: puse una pregunta en stackoverflow sobre cómo optimizar el código, y tuve suerte y contestó un investigador versado en el lenguaje Julia. Este es el código de Bogumil Kaminski, que es bastante más rápido que el mío (unas 5 veces más rápido) y apenas usa memoria alguna (mi código ocupa de media 9 gigas de espacio al ser ejecutado):

Código: [Seleccionar]
function test(n,m=24)
  ref = [isodd(i) for i in 1:2n]
  sum(all(view(shuffle!(ref), 1:n)) for i in 1:2^m) / 2^m
end

27 Junio, 2019, 10:54 pm
Respuesta #11

juan luis

  • $$\Large \color{red}\pi\,\pi$$
  • Mensajes: 26
  • Karma: +0/-0
  • Sexo: Masculino
Hola a todos.

Agradecido a todos los que habéis seguido este hilo.
Referente a lo que decía Feriva  sobre judías y garbanzos. propongo lo siguiente:

Tenemos  6 tarros, en el primero hay 187 garbanzos y 313 judías y en el segundo hay 158 garbanzos y 342 judías, luego en cada tarro tenemos 500 elementos entre garbanzos y judías.
El total de judías que hay entre los dos tarros será \( 313+342=655 \)  judías.
Luego sabemos, que la cantidad de parejas de judías que se han de formar, como mínimo será \( 655-500=155 \)  parejas .
Ahora, en el tarro tercero vamos metiendo todas las parejas de judías que se forman asta un máximo de 155 , seguidamente todas las parejas de judías sobrantes, las metemos en el tarro cuarto, las parejas de garbanzos las metemos en el tarro quinto  y finalmente las parejas mixtas en el tarro sexto.

Si eliminamos las 155 parejas de judías del tarro tercero entonces, nos quedarían 345 parejas  en lugar de 500.
En el primer tarro tendríamos 187 garbanzos y 158 judías .
En el segundo tarro tendríamos 158 garbanzos y 187 judías.
Ademas el tarro cuarto y el quinto tendrían la misma la misma cantidad de parejas. por cada pareja de judías  que se forma ,también se forma otra de garbanzos, esto lo he comprobado de manera practica en las tablas,

Un saludo a todos