Números aleatorios
Un número aleatorio es aquel número que se obtiene netamente al azar, es decir, es todo número que pertenezca a un rango de valores o a un conjunto infinito de valores y que tenga la misma probabilidad de ser elegido y que la elección de uno no dependa de la elección del otro. Muchos lenguajes de programación tienen dentro de sus estructura básica la función para realizar números aleatorios, o dicho de una forma más concisa, pseudo aleatorios. PROLOG tiene su propio generador de números aleatorios, y tiene forma de poder utilizar una semilla para la generación y cálculo de un valor aleatorio.
La palabra reservada para la semilla es seed, y es utilizada en la siguiente manera:
1 |
set_random(seed(X)), A is random(Y). |
Dónde el valor $X$ es el valor desde el cual inicia el cálculo del valor aleatorio, es decir, la semilla; y $Y$ es el límite máximo sobre el cual el número aleatorio debe caer, es decir, se generan números aleatorios desde 0 hasta $Y$.
Se pueden generar números aleatorios por medio de la siguiente regla:
1 |
main(X):- random(-1000.0, 1000.0, X). |
En este caso, $random(A, B,X)$, genera un número aleatorio con un límite inferior $A$ y un límite superior $B$, asignando el valor aleatorio en $X$. En este esquema, como estamos utilizando una regla, es conveniente que esta se guarde en un archivo .pl, y solo se realice la consulta main(X). a través del intérprete.
También es posible generar una secuencia de números aleatorios por medio de la consulta:
1 |
?- randseq(Valores, Limite, Secuencia). |
En este caso, tenemos que se van a generar una cantidad igual a $Valores$ de números aleatorios que irán desde 0 hasta $Limite$, regresando dichos valores en la lista $Secuencia$, valores organizados de manera desordenada.
Ejemplo. Obtener una secuencia de 6 números aleatorios que estén en los límites de 0 a 50.
1 |
?- randseq(6, 50, Secuencia). |
Bajo esta consulta, PROLOG regresará:
1 |
Secuencia = [ 6, 39, 43, 11, 23]. |
Una instrucción muy parecida a la anterior es la dada por $randset(Valores, Limite, Secuencia).$, esta función realiza la misma acción que randseq, solo que la lista de valores aleatorios que regresa la función, está colocada de forma ordenada, por ejemplo si realizamos la siguiente consulta:
1 |
?- randset(6, 50, Secuencia). |
PROLOG regresará:
1 |
Secuencia = [ 6, 11, 23, 39, 43]. |
Es importante mencionar que aunque de forma estándar estas funciones trabajaran en PROLOG, en ocasiones es necesario incluir una librería en la siguiente forma:
1 |
?- use_module(library(random)). |
Con esta consulta, garantizaremos que los comandos mencionados funcionaran correctamente.