è il generatore casuale Microsoft LC brevettato?

3

Ho bisogno di un semplice generatore pseudo-casuale molto (nessun requisito di qualità specifico) e ho trovato che la variante di Microsoft dell'algoritmo LCG usato per rand () funzione di libreria di runtime C corrisponde alle mie esigenze (anche quella di gcc sembra complesso).

Ho trovato l'algoritmo qui:

link

Tuttavia, temo che l'algoritmo (compresi i suoi "numeri magici", i coefficienti) possa essere brevettato o limitato per l'uso in un altro modo.

È consentito utilizzare questo algoritmo senza alcuna licenza o restrizioni sui brevetti o no?

Non posso usare la libreria rand () perché ho bisogno che i miei risultati siano esattamente riproducibili su piattaforme diverse

    
posta user396672 18.12.2012 - 17:57
fonte

3 risposte

3

Il Mersenne twister prng è ben noto e implementato.

Per un approccio ancora più semplice, Project Euler ha utilizzato un generatore di numeri pseudo casuali:

S 0 = seed

S n + 1 = S n 2 mod 50515093

Se vuoi qualcosa vicino a 2 ^ 32, cambia la mod in 0xFFFFFFFB (il numero 4.294.967.291 - il più grande 32 bit primo)

La pagina man per rand ha la seguente implementazione dalla specifica POSIX.1-2001:

static unsigned long next = 1;

/* RAND_MAX assumed to be 32767 */
int myrand(void) {
    next = next * 1103515245 + 12345;
    return((unsigned)(next/65536) % 32768);
}

void mysrand(unsigned seed) {
    next = seed;
}

Guarda la programmazione Art of Computer, volume 2 - ha una sezione dedicata alla generazione di numeri casuali.

    
risposta data 18.12.2012 - 18:26
fonte
2

Il codice di riferimento è Free da utilizzare, ma non necessariamente free . Nella parte inferiore della pagina, vedrai:

    This page was last modified on 5 November 2012, at 23:58.
    Content is available under GNU Free Documentation License 1.2.

E include un link alla GNU Free Documentation License 1.2

Leggi la licenza della documentazione GNU per vedere cosa devi fare per attribuire il codice e fornire le eventuali modifiche che potresti apportare.

Negli Stati Uniti, i brevetti sul design sono validi solo per 14 anni dopo la concessione. Vedi questo link USPTO .

L'articolo di Wikipedia su Generatore di congruenza lineare indica un numero di implementazioni e i loro coefficienti. Include inoltre un riferimento all'implementazione di Microsoft all'interno di Microsoft Visual / Quick C / C ++ .

Questi compilatori hanno avuto le loro origini nel 1983 o nel 1993, a seconda di cosa guardi. In entrambi i casi, entrambi hanno superato il limite di 14 anni per i brevetti.

Inoltre non sai che la SM ha eseguito la ricerca per scoprire quei coefficienti, né che la modifica dei coefficienti sarebbe stata sufficientemente nuova da meritare la protezione dei brevetti. L'algoritmo LCG è in circolazione da molto tempo. Dato che ci sono un certo numero di serie di coefficienti pubblicati, è abbastanza sicuro presumere che non siano protetti attraverso i brevetti.

    
risposta data 18.12.2012 - 18:02
fonte
1

se sei veramente preoccupato, puoi trovare i tuoi parametri per il LCG usando il vincolo menzionato al link

o usa uno degli altri esempi dati proprio sotto di esso (il a = 1103515245 c = 12345 varient è usato da più progetti open source quindi dovrebbe (IANAL) essere libero di usare)

    
risposta data 18.12.2012 - 18:23
fonte

Leggi altre domande sui tag