¿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!

Respuesta
1

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

1 respuesta más de otro experto

Respuesta
1

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.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas