Permettetemi di aggiungere alla discussione che la differenza tra "casuale" e "deterministico" è, nel mondo reale, una pura questione di percezione soggettiva. - Come hai detto tu: alcune soluzioni producono risultati "brutti" mentre altri no.
Nel mondo a cui mi riferisco, la differenza effettiva tra "casuale" e non casuale è fondamentalmente solo, se l'osservatore umano è in grado di riconoscere un modello nell'output generato, come qualche schema ricorrente o qualche altro aspetto che gli faccia capire quale potrebbe essere l'output probabilmente in una delle prossime iterazioni. La capacità di riconoscere un determinato pattern dipende ovviamente molto dal contesto dell'osservatore: alcune persone potrebbero non riuscire a vedere il pattern dietro la sequenza 2, 3, 5, 7, 9, 11, 13, 17, 19, 23, 29
, mentre è probabile che gli altri lo rilevino rapidamente.
Pertanto, ogni PRNG a buon mercato può facilmente far credere all'osservatore / utente che il suo output sia davvero casuale. - Oppure, mettilo in un altro modo: ogni volta che l'osservatore non riesce a riconoscere la correlazione causa-conseguenza (o input-output) in un sistema, le sue osservazioni appariranno come puramente casuali per lui.
Come la vedo io, la domanda diventa:
- Quanto complesso dovrebbe essere l'algoritmo per "ingannare" l'osservatore (previsto)?
e
- Come modellare l'output in un modo che, pur rimanendo percepito in modo casuale, crea la percezione desiderata "realistica" o "non brutta". - Questo potrebbe anche riguardare l'estetica. Gli algoritmi frattali spesso sono bravi in questo, perché la loro produzione assomiglia strutturalmente all'immagine dell'osservatore del mondo reale.