Así que estoy implementando un algoritmo heurístico, y me he encontrado con esta función.Función de densidad de probabilidad de un documento, implementado con C++, que no funciona como estaba previsto
Tengo una matriz de 1 a n (0 a n-1 en C, w/e). Quiero elegir una cantidad de elementos que copiaré en otra matriz. Dado un parámetro y, (0 < y < = 1), quiero tener una distribución de números cuyo promedio sea (y * n). Eso significa que cada vez que llamo a esta función, me da un número, entre 0 y n, y el promedio de estos números es y * n.
De acuerdo con el autor, "l" es un número aleatorio: 0 < l < n. En mi código de prueba, actualmente está generando 0 < = l < = n. Y tenía el código correcto, pero me estoy metiendo con esto durante horas, y soy flojo para codificarlo.
Así que codifica la primera parte de la función, para y < = 0,5 I conjunto Y a 0,2, y n a 100. Eso significa que tuvo que volver un número entre 0 y 99, con un promedio de 20. Y los resultados no están entre 0 y n, pero algunos flotan. Y cuanto más grande es n, más pequeña es esta flotante.
Este es el código de prueba C. "x" es el parámetro "l".
//hate how code tag works, it's not even working now
int n = 100;
float y = 0.2;
float n_copy;
for(int i = 0 ; i < 20 ; i++)
{
float x = (float) (rand()/(float)RAND_MAX); // 0 <= x <= 1
x = x * n; // 0 <= x <= n
float p1 = (1 - y)/(n*y);
float p2 = (1 - (x/n));
float exp = (1 - (2*y))/y;
p2 = pow(p2, exp);
n_copy = p1 * p2;
printf("%.5f\n", n_copy);
}
Y aquí están algunos resultados (5 decimales truncados):
0.03354
0.00484
0.00003
0.00029
0.00020
0.00028
0.00263
0.01619
0.00032
0.00000
0.03598
0.03975
0.00704
0.00176
0.00001
0.01333
0.03396
0.02795
0.00005
0.00860
El artículo es:
http://www.scribd.com/doc/3097936/cAS-The-Cunning-Ant-System
páginas 6 y 7.
o buscar " cAS: astuto sistema de hormigas "en google.
Entonces, ¿qué estoy haciendo mal? No creo que el autor esté equivocado, porque hay más de 5 artículos que describen esta misma función.
todas mis internets a quien me ayude. Esto es importante para mi trabajo.
gracias :)
No utilice la etiqueta de código. SO es extraño, usa 4 espacios para indicar el código. Simplemente copie el código, luego selecciónelo todo y luego presione el botón 1010 para hacerlo codificar. –
Esto se debe a que las casillas de preguntas y respuestas usan Markdown: http://daringfireball.net/projects/markdown/syntax – zwol