In informatica, capacità di un programma di elaborazione di dati di migliorare le proprie funzionalità sfruttando le informazioni che gli vengono offerte dagli stessi dati di ingresso, come avviene, per es., in alcuni programmi per la lettura ottica che man mano, adattandosi alla luminosità e al contrasto del documento esaminato, commettono un numero sempre minore di errori di decifrazione.
L’evoluzione delle tecniche di intelligenza artificiale ha consentito di realizzare programmi capaci di formulare problemi di decisione, sulla base di scenari variabili, adattando le strategie ai risultati delle misure effettuate sul campo. In robotica, vengono realizzati robot capaci di modificare il comportamento sulla base dei risultati ottenuti in precedenza: spesso l’identificazione dei parametri di un modello matematico implementato sull’apparato di controllo viene effettuata sperimentalmente in base alla risposta del robot a prefissati funzionamenti transitori. Vi sono vari livelli di complessità nelle tecniche che portano a una modifica del programma di simulazione. Il più semplice si ha quando la modifica viene fatta sulla base di una valutazione esterna di azioni simili compiute in passato (per es., per lavorazioni industriali ripetitive) con funzioni di modifica prefissata. Più complicato è il caso di modifiche di comportamento sulla base di un modello di simulazione del sistema con cui si sta interagendo, che permetta di valutare gli effetti di azioni alternative.