x

x

Il concetto di algoritmo

In informatica e in giurisprudenza
algoritmo
algoritmo

Il concetto di algoritmo

Uno dei concetti fondamentali delle scienze informatiche è quello di algoritmo [1]. Poiché l’informatica è una disciplina molto più giovane delle altre, i suoi aspetti sono ancora lontani dall’essere completamente assimilati, specie in ambiti come ad esempio quello giurisprudenziale in cui nel 2021 si è cercato di introdurre una classificazione appunto in materia di algoritmi.

Il Consiglio di Stato, sezione III, ha ritenuto di dover distinguere quelli che ha indicato come algoritmi “tradizionali” da quelli “intelligenti o automatici” in occasione di un giudizio avente a oggetto la legittimità di una procedura di gara per la fornitura di pacemaker e defibrillatori presso gli enti sanitari lombardi.

Il bando prevedeva, tra i parametri di valutazione delle offerte, un “Algoritmo di prevenzione + trattamento delle tachiaritmie atriali” in riferimento al quale la commissione giudicatrice avrebbe assegnato 15 punti in caso di presenza di entrambe le funzionalità e 7 punti in caso di presenza della sola funzionalità di prevenzione o della sola funzionalità di trattamento.

Una delle aziende non aggiudicatarie aveva presentato ricorso evidenziando come il bando di gara non avesse specificato il carattere “automatico” o “intelligente” dell’algoritmo. Il ricorso era stato accolto dal TAR di Milano con sentenza 31/03/2021 n. 843 secondo cui il concetto di algoritmo “non include necessariamente [...], come erroneamente ritenuto dalla stazione appaltante, che il dispositivo debba essere in grado di riconoscere in automatico l’esigenza (quindi di diagnosticare il tipo di aritmia) e somministrare in automatico la corretta terapia medica (trattamento)”.

Con la propria sentenza 25/11/2021 n. 7891, il Consiglio di Stato ha affermato che, se da un lato l’algoritmo è da intendersi come “sequenza finita di istruzioni, ben definite e non ambigue, così da poter essere eseguite meccanicamente e tali da produrre un determinato risultato”, dall’altro il concetto di algoritmo “quando è applicato a sistemi tecnologici, è ineludibilmente collegato al concetto di automazione ossia a sistemi di azione e controllo idonei a ridurre l’intervento umano”, differenziandosi da quello dell’intelligenza artificiale [2,3] che si ha quando “l’algoritmo contempla meccanismi di machine learning e crea un sistema che non si limita solo ad applicare le regole software e i parametri preimpostati (come fa invece l’algoritmo tradizionale) ma, al contrario, elabora costantemente nuovi criteri di inferenza tra dati e assume decisioni efficienti sulla base di tali elaborazioni, secondo un processo di apprendimento automatico”.

Il Consiglio di Stato, accogliendo l’appello dell’azienda aggiudicataria secondo cui l’evoluzione del settore sanitario ha fatto registrare lo sviluppo di algoritmi sempre più sofisticati che costituirebbero “pur sempre [...] algoritmi che agiscono secondo uno schema tipico (input-elaborazione-risposta) [...] che nulla hanno in comune con i meccanismi di machine learning evocati in prime cure”, ha riformato la sentenza del TAR in quanto l’amministrazione, dichiarando espressamente di voler acquisire dispositivi di “alta fascia”, dimostrava la volontà di reperire apparecchi avanzati con un grado di automazione tale da coprire sia la prevenzione che il trattamento, e ha ribadito che “le esigenze dell’amministrazione sono il prius, sia dal punto di vista funzionale che logico, dal quale il procedimento di gara si dipana, e non possono certamente essere pretermesse o prevaricate da interpretazioni strettamente letterali che alla luce del principio di massima partecipazione finiscano per imporre all’amministrazione un bene che essa non vuole o non ha chiesto”.

 

Pur comprendendo il contesto in cui si sono dovuti esprimere il TAR di Milano prima e il Consiglio di Stato poi, e concordando, per quel che vale, col pronunciamento di quest’ultimo, da informatico sono rimasto molto perplesso dalla distinzione effettuata tra algoritmi “tradizionali” e algoritmi “intelligenti o automatici”.

 

Diciamo innanzitutto che il termine algoritmo deriva dal nome del matematico persiano Muhammad al-Khwarizmi (780-850), autore di uno dei più antichi trattati matematici in cui descrisse come risolvere sistematicamente, cioè con operazioni e procedimenti ben precisi, le equazioni di primo e secondo grado. Dal nome al-jabr di una delle due operazioni da lui individuate discende peraltro il nome di un’intera branca della matematica, precisamente l’algebra, che assieme alla logica matematica costituisce la radice fondazionale delle scienze informatiche.

Il concetto di algoritmo è in effetti un concetto primitivo dell’informatica, come lo è il concetto di punto in geometria ad esempio, quindi non esiste una definizione formale di algoritmo, ma esistono delle possibili formalizzazioni in diverse notazioni. Storicamente parlando, la prima è stata quella che oggigiorno chiamiamo macchina di Turing [4]. Essa è una macchina astratta a controllo finito, cioè che in ogni istante si trova in uno stato appartenente a un insieme finito di stati computazionali, la quale legge e scrive simboli su un nastro infinito.

Vi è accordo sul fatto che un algoritmo sia una sequenza finita di passi ben definiti, non ambigui e interpretabili da un esecutore, che ha solitamente l’obiettivo di risolvere un problema formulato nella sua generalità. L’esecutore non è necessariamente un’apparecchiatura elettromeccanica come un computer, ma può essere un sistema biologico o un sistema misto cibernetico-fisico. Ad esempio, quando prepariamo qualcosa in cucina seguendo una ricetta, la ricetta è l’algoritmo e noi siamo gli esecutori. Dunque, non necessariamente il concetto di algoritmo è legato a esigenze di automazione, ma sicuramente è così quando l’algoritmo viene codificato attraverso un linguaggio di programmazione, dando luogo a un programma o applicazione software che dovrà andare in esecuzione su un computer o un dispositivo assimilabile.

L’algoritmo è sempre algoritmo a prescindere dallo scenario in cui opera e, a fronte degli stessi dati in ingresso, deve produrre gli stessi risultati. Ciò che distingue lo scenario “tradizionale” da quello “intelligente o automatico” è il fatto che nel secondo scenario l’algoritmo interagisce con una base di conoscenza che, invece di essere fissa come nel caso tradizionale, varia nel tempo. La base di conoscenza comprende sia dati riferiti al passato, sia dati acquisiti tramite un monitoraggio continuo dello scenario operativo. Man mano che questa base di conoscenza evolve, l’algoritmo può intraprendere comportamenti diversi attraverso un sistema di regole di scelta che comunque sono codificate all’interno dell’algoritmo stesso, e può finanche aggiungere o rimuovere regole, ma solamente seguendo un modello che è incorporato nell’algoritmo medesimo.

 

L’algoritmo tra giurisprudenza e informatica

Facciamo un esempio concreto. Supponiamo di essere alla guida di un veicolo che ospita a bordo un software per calcolare il percorso più breve per andare dalla città A alla città B. Per essere in grado di fare questo, il software deve essere dotato di una struttura dati detta grafo che rappresenta la rete stradale di un certo territorio in cui sono comprese le città A e B: i vertici del grafo rappresentano tutte le città del territorio, mentre gli archi del grafo descrivono i collegamenti tra coppie di città che non attraversano altre città.

Nello scenario “tradizionale” il grafo è fisso, mentre nello scenario “intelligente” il grafo può variare in caso di interruzioni di tratti stradali, a causa di lavori oppure incidenti, che vengono prontamente segnalati al veicolo da parte di una moltitudine di sensori dispiegati su tutta la rete stradale. Se nel compiere il percorso più breve da A a B un tratto è interrotto, nello scenario “intelligente” è il software a ricalcolare il percorso più breve non appena viene a conoscenza dell’interruzione, mentre nello scenario “tradizionale” è il guidatore a dover chiedere nuovamente al software di calcolare il percorso più breve dopo aver indicato come nuovo punto di partenza quello del tratto interrotto.

Tanto nello scenario “tradizionale” quanto in quello “intelligente”, il software a bordo del veicolo non fa altro che applicare al grafo a disposizione in quel momento, rappresentativo della rete stradale, il ben noto algoritmo di Dijkstra [5] per il calcolo del percorso più breve. L’algoritmo è sempre lo stesso, ciò che cambia è il grafo, cioè la rappresentazione della parte di mondo che ci interessa mentre siamo alla guida del veicolo.

In conclusione, ritengo che la classificazione, emersa in ambito giurisprudenziale, degli algoritmi in “intelligenti o automatici” e “tradizionali” non sia ben fondata. Il punto è, semmai, se l’algoritmo abbia accesso o meno a una rappresentazione tenuta aggiornata in tempo reale del modello concettuale sul quale l’algoritmo stesso deve operare. In altri termini, possiamo dire che un algoritmo, per manifestare un comportamento “intelligente”, deve poter avere a disposizione una mole di dati che vengono costantemente aggiornati, perché solo così ha la possibilità di compiere l’azione più adatta al contesto attuale, come del resto farebbe una persona.

E mi permetto di aggiungere che quando si intende applicare un approccio regolatorio a fenomeni tecnologici, che semplicemente si diffondono, questo andrebbe fatto in un’ottica multidisciplinare, cioè coinvolgendo gli scienziati e i tecnici competenti in materia.

Riferimenti bibliografici

[1] T.H. Cormen, C.E. Leiserson, R.L. Rivest, C. Stein, “Introduction to Algorithms”, MIT Press, 1990.

[2] S. Russell, P. Norvig, “Artificial Intelligence: A Modern Approach”, Pearson, 2003.

[3] S. Shalev-Shwartz, S. Ben-David, “Understanding Machine Learning: From Theory to Algorithms”, Cambridge University Press, 2014.

[4] A.M. Turing, “On Computable Numbers, with an Application to the Entscheidungsproblem”, Proceedings of the London Mathematical Society 42:230–265, 1936.

[5] E.W. Dijkstra, “A Note on Two Problems in Connexion with Graphs”, Numerische Mathematik 1:269–271, 1959.