"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo generar números aleatorios que sumen un valor predefinido con igual probabilidad?

¿Cómo generar números aleatorios que sumen un valor predefinido con igual probabilidad?

Publicado el 2024-11-08
Navegar:761

How to Generate Random Numbers Summing to a Predefined Value with Equal Probability?

Generación de números aleatorios que suman a un valor predefinido

En este contexto, nuestro objetivo es generar una lista de números pseudoaleatorios que sumen colectivamente hasta un valor predeterminado específico. Un método implica generar aleatoriamente un número dentro de un rango específico, restarlo del total y repetir este proceso hasta que la suma sea igual al valor deseado. Sin embargo, este enfoque favorece el primer número generado en términos de su contribución a la suma.

Para garantizar la uniformidad, se ha desarrollado una solución más sofisticada:

import random

def constrained_sum_sample_pos(n, total):
    """Return a randomly chosen list of n positive integers summing to total.
    Each such list is equally likely to occur."""

    dividers = sorted(random.sample(range(1, total), n - 1))
    return [a - b for a, b in zip(dividers   [total], [0]   dividers)]

Este método genera una lista de enteros positivos que suman el valor objetivo. El concepto clave es que todas las combinaciones posibles de números tienen la misma probabilidad de generarse. Además, extender esta técnica a diferentes totales y números variables de números aleatorios es sencillo.

Por ejemplo, si establecemos n en 4 y el total en 40, podríamos obtener el siguiente resultado: [4, 4, 25 , 7]. Es importante tener en cuenta que cada elemento de esta lista, cuando se suma, produce el valor predefinido de 40.

Para permitir números enteros no positivos, hay una modificación disponible:

def constrained_sum_sample_nonneg(n, total):
    """Return a randomly chosen list of n nonnegative integers summing to total.
    Each such list is equally likely to occur."""

    return [x - 1 for x in constrained_sum_sample_pos(n, total   n)]

Al incrementar cada valor en uno, podemos generar una lista de números enteros no negativos que suman el total deseado.

Este método garantiza que cada combinación posible, independientemente de si los números son positivos o no negativos, tenga la misma probabilidad de generarse. Con su implementación fácil de usar y su versatilidad en diferentes escenarios, constrained_sum_sample_pos y constrained_sum_sample_nonneg se han convertido en parte integral de las tareas de generación de números aleatorios en Python.

Último tutorial Más>

Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.

Copyright© 2022 湘ICP备2022001581号-3