Dire che produco software con un algoritmo genetico . Per essere certo che il software funzioni correttamente in tutte le situazioni, dovrei testare tutte le situazioni, che potrebbero essere proibitamente (o infinitamente) molte. Così ho sviluppato il software con input di test in evoluzione (alcuni fissi, alcuni ereditati e altri casuali). Ora, con ogni generazione, la probabilità aumenta in modo misurabile che le funzioni più idonee saranno soluzioni generali, non solo soluzioni per i dati noti a portata di mano.
Come sviluppatori, siamo imperfetti e il nostro software potrebbe non funzionare, anzi, molto spesso. In generale, non abbiamo alcuna idea della probabilità di fallimento in un dato momento, sebbene potremmo essere in grado di discernere casi specifici in cui il software fallirà. Tutto quello che possiamo fare per ridurre il tasso di insuccesso è testare a fondo e praticare un buon sviluppo del software. Ma logicamente, distribuiamo software difettoso tutto il tempo.
Ti metterebbe a disagio come sviluppatore per sapere con quale frequenza il tuo software potrebbe non funzionare, ma per non sapere nulla dei casi specifici in cui potrebbe essere? Quale tasso di fallimento è accettabile? 0,01%? 0,0001%? Vorresti tenere un algoritmo genetico a un livello più alto di un umano quando si tratta di tassi di fallimento?