Quindi sto implementando un algoritmo euristico e ho trovato questa funzione.Funzione di densità di probabilità da una carta, implementata utilizzando C++, non funziona come previsto
Ho una matrice da 1 a n (da 0 a n-1 su C, w/e). Voglio scegliere un numero di elementi che copierò su un altro array. Dato un parametro y, (0 < y < = 1), voglio avere una distribuzione di numeri la cui media è (y * n). Ciò significa che ogni volta che chiamo questa funzione, mi dà un numero, tra 0 e n, e la media di questi numeri è y * n.
Secondo l'autore, "l" è un numero casuale: 0 < l < n. Sul mio codice di test attualmente sta generando 0 < = l < = n. E ho avuto il codice giusto, ma ora sto scherzando con questo per ora, e sono pigro per ricollegarlo.
Così ho codificato la prima parte della funzione, per y = 0,5 < y ho impostato a 0,2, e n a 100. Ciò significa che doveva restituire un numero compreso tra 0 e 99, con media 20. E i risultati non sono tra 0 e n, ma alcuni galleggiano. E il più grande è, più piccolo è questo galleggiante.
Questo è il codice di test C. "x" è il parametro "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);
}
e qui ci sono alcuni risultati (5 decimali troncato):
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
L'articolo è:
http://www.scribd.com/doc/3097936/cAS-The-Cunning-Ant-System
pagine 6 e 7.
o cercare " cAS: astuzia sistema ant "su google.
Quindi cosa sto sbagliando? non credo che l'autore abbia torto, perché ci sono più di 5 articoli che descrivono questa stessa funzione.
tutti i miei collegamenti a chi mi aiuta. Questo è importante per il mio lavoro.
Grazie :)
Non utilizzare il codice. SO è strano, usa 4 spazi per indicare il codice. Basta copiare il codice, quindi selezionarlo tutto e quindi premere il pulsante 1010 per renderlo codice. –
Questo perché le caselle di domande e risposte utilizzano Markdown: http://daringfireball.net/projects/markdown/syntax – zwol