¿Como puedo generar números aleatorios sujeto a condiciones?

Necesito generar números aleatorios, ya sea en excel (preferencia) o matlab. Por ejemplo, se tiene como variable A, B y C, necesito que la suma de estas sume 1 (100%), pero además, con la condición de que A varíe entre 0.2 y 0.3, B varíe entre 0.5 y 0.3 y C varíe entre 0.3 y 0.4 {esto por dar un ejemplo}. Necesito que se generen por lo menos 50 combinaciones posibles (desconozco si al poner la condición de que se pueda como máximo 4 decimales lo complique más). Estaré muy agradecido de su ayuda!

2

2 Respuestas

197.625 pts. Si de mis mayores gustos, mis disgustos han nacido,...

Este es el resultado de una de las dos macros, es lo que diríamos en estadística el peor escenario, la suma de 4 variables aleatorias que den 1, solo hay un detalle los rangos de las variables de preferencia los máximos también la suma de ellos debe ser 1 o no pasarse mucho de 1, sino las macros o se van a tardar o no van a caer en un ciclo sin fin, para que funcione la macro tienes que poner la información tal cual esta en la hoja

te paso las macros

Sub GENERAR_ALEATORIOS3()
CANT = Range("D1")
MINA = Range("B5"): MAXA = Range("C5")
MINB = Range("E5"): MAXB = Range("F5")
MINC = Range("H5"): MAXC = Range("I5")
Set NUMEROS = Range("B8").Resize(CANT, 3)
For I = 1 To CANT
OTRO:
    Randomize
    NUM = Round(MINA + Rnd * (MAXA - MINA), 2)
    NUM2 = Round(MINB + Rnd * (MAXB - MINB), 2)
    NUM3 = Round(MINC + Rnd * (MAXC - MINC), 2)
    SUMA = (NUM + NUM2 + NUM3)
    If SUMA = 1 Then
        NUMEROS.Cells(I, 1) = NUM
        NUMEROS.Cells(I, 2) = NUM2
        NUMEROS.Cells(I, 3) = NUM3
    Else
        GoTo OTRO:
    End If
Next I
Set datos = Nothing
End Sub
Sub GENERAR_ALEATORIOS4()
CANT = Range("D1")
MINA = Range("B5"): MAXA = Range("C5")
MINB = Range("E5"): MAXB = Range("F5")
MINC = Range("H5"): MAXC = Range("I5")
MIND = Range("K5"): MAXD = Range("L5")
Set NUMEROS = Range("B8").Resize(CANT, 4)
For I = 1 To CANT
OTRO:
    Randomize
    NUM = Round(MINA + Rnd * (MAXA - MINA), 2)
    NUM2 = Round(MINB + Rnd * (MAXB - MINB), 2)
    NUM3 = Round(MINC + Rnd * (MAXC - MINC), 2)
    NUM4 = Round(MIND + Rnd * (MAXD - MIND), 2)
    SUMA = (NUM + NUM2 + NUM3 + NUM4)
    If SUMA = 1 Then
        NUMEROS.Cells(I, 1) = NUM
        NUMEROS.Cells(I, 2) = NUM2
        NUMEROS.Cells(I, 3) = NUM3
        NUMEROS.Cells(I, 4) = NUM4
    Else
        GoTo OTRO:
    End If
Next I
Set datos = Nothing
End Sub

La tabla se genera a través de la celda b8 en adelante, esta puede ser tan chica o grande como tu quieras solo alimentas el dato en la celda D1

Muchas gracias por la pronta respuesta!, ahora trataré de hacer que funcione con 8 variables jaja, saludos!

Lo puedes hacer hasta con 100 variables siempre y cuando los máximos y mínimos sean números pequeños entre más variables integres estos números tienen que ser cada vez más chicos o menores.

964.750 pts. "Todos somos genios. Pero si juzgas a un pez por su...

Creo que hacer variar las 3 condiciones aleatoriamente y que la suma de 1 es practicamente imposible. De hecho que pasa si como una posible solución te sale

A = 0.2

B = 0.3

Ambos valores están dentro del rango aceptado, sin embargo para eso C debería ser 0.5, pero eso no está dentro de tus opciones.

Igualmente para llevar aleatorios con condiciones podrías hacer algo así

[A] = ALEATORIO.ENTRE(20;30) / 100
[B] = ALEATORIO.ENTRE(30;50) / 100
[C] = 1 - A - B

Investiga por ese lado (aunque primero vas a tener que definir como resolver el caso que te planteé más arriba)

Salu2

Gracias por responder rápidamente!, no había considerado hacer una ecuación con la ultima variable, saludos!

[C] = 1 - A - B

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas