Passa ai contenuti principali

La programmazione dichiarativa come sistema di intelligenza artificiale

Sull'intelligenza artificiale si è creato un grosso equivoco, che vale la pena risolvere.
https://www.instagram.com/p/BwyfskdnV7a/

Senza voler essere formali, l’accezione comune di intelligenza artificiale è usata per identificare un sistema informatico basato su reti neurali usato per risolvere problemi di difficile formalizzazione. Ad esempio, le auto a guida autonoma, i sistemi di traduzione in tempo reale, la previsione dei prezzi dell’energia.
Per difficile formalizzazione intendo un concetto molto sottile. Scrivere un algoritmo che sia in grado di riconoscere l’immagine di un gattino è molto difficile se non impossibile. Mentre, in maniera paradossale, è più semplice scrivere un algoritmo che impari a riconoscere gattini perché è stato addestrato con le immagini di mille diversi gattini.
Cablare ed addestrare una rete neurale che riconosca gattini è un esempio di meta-programmazione, proprio perché non si scrive un algoritmo che calcoli il risultato atteso, ma un sistema che apprenda ed approssimi le relazioni esistenti tra input ed output, tra un’immagine e il riconoscimento di un gattino. L’apprendimento è guidato dall'osservazione di un numero congruo di esempi di relazioni input -> output.
Ci sono molti problemi reali che si risolvono bene con il paradigma delle reti neurali. Ma ce ne sono altri che si risolvono meglio con altri tipi di approcci basati sulla meta-programmazione.
Uno di questi è la programmazione dichiarativa.
Nella programmazione dichiarativa, come per le reti neurali, non si codifica un algoritmo specifico per la risoluzione di un problema a causa della complessità elevata della relazione tra input e output. Risulta invece più semplice ed efficace fornire una serie di regole che modellano la struttura del problema da risolvere. Queste regole dichiarano l’esistenza di vincoli ai quali devono sottostare un qualunque output che sia in relazione con un qualunque input. L’insieme di tutte le dichiarazione che modellano un problema formano un programma dichiarativo, che viene elaborato da un risolutore general-purpose per calcolare gli output associati ad un input.
Un esempio a me caro di programma dichiarativo è il modello di asta implicita che viene utilizzato tutti i giorni per la determinazione del prezzo all'ingrosso dell’energia elettrica. Un altro esempio molto più comune è l’identificazione del percorso migliore per andare in una via specifica.
Capire quali offerte di acquisto e vendita di energia elettrica possano essere soddisfatte, determinando così il valore e le quantità scambiate, è sicuramente il risultato che ci si attende da un sistema di intelligenza artificiale. Così come determinare il percorso migliore da usare per viaggiare in auto tra due qualunque punti della rete stradale.
L’equivoco a cui faccio riferimento all'inizio dell’articolo, si basa sul fatto che si debbano usare sempre e solo reti neurali per scrivere sistemi di intelligenza artificiale. La programmazione dichiarativa può e deve essere usata dove funziona meglio delle reti neurali.
Conosco almeno tre tipi di programmazione dichiarativa:
  • la programmazione logica, dove i vincoli sono clausole logiche al primo ordine. Esempio famoso è fornito dal linguaggio Prolog.
  • la programmazione per vincoli, dove i vincoli limitano il valore che alcune variabili possono assumere contemporaneamente. Se avete presente le regole che definiscono il gioco del sudoku allora sapete di cosa sto parlando.
  • la programmazione lineare, con tutte le sue varianti, dove i vincoli sono espressi come relazioni lineare tra le variabili del problema e da una funzione obiettivo da massimizzare.
Come scogliere quindi l’equivoco? Imparando ad usare lo strumento migliore in funzione del problema da risolvere.

Commenti

Post popolari in questo blog

PuLP – Un valido strumento per la didattica

L'insegnamento dei concetti di base della ricerca operativa, ovvero la programmazione lineare, ha trovato nel corso degli ultimi anni diversi strumenti di supporto. Sono ormai parecchi i software gratuiti e open source che permettono agli studenti e agli insegnanti di toccare con mano le nozioni e i concetti spiegati e studiati sui banchi. Ricordiamo, ad esempio, glpk che con il suoi linguaggio di modellazione MathProg permettete di scrivere e risolvere anche complessi modelli di programmazione lineare intera. Oppure citiamo anche lp_solve che con il suo ambiente impropriamente chiamato lp_solve IDE permette di scrivere e risolvere modelli di programmazione lineare direttamente nella formulazione matematica. A mio avviso però le proposte appena citate sono limitate nella potenza espressiva e nelle capacità di integrarsi con altri software o moduli esterni. Queste limitazioni sono egregiamente risolte da PuLP : un modellatore di problemi di programmazione lineare intera basato

Ci arricchiremo con la ricerca operativa?

A questa domanda forse possiamo rispondere sì :-) , rimandando al lavoro molto fresco ed interessante di Giancarlo Volpe dal titolo " Scommesse sportive: un modello di Ricerca Operativa che descrive la “vincita perfetta” " E' possibile scaricare il documento da scribd.com . Dall'apprezzabile contenuto didattico la parte entrale, dove si illustra passo passo come è possibile usare il risolutore di excel per applicarlo al modello descritto. Buona lettura e giocate con moderazione. Un Modello di Ricerca Operativa per Scommesse Sportive

Dispense di ricerca operativa

Ho trovato sulla home page del prof. Agnetis, delle interessanti dispense di ricerca operativa. I temi trattati sono tutti molto interessanti: Appunti sul duale del problema del massimo flusso Appunti sui problemi di matching Appunti su classi di complessità e problemi NP-completi Appunti sul problema del TSP euclideo Appunti sulla generazione di colonne Appunti sui modelli di lot sizing: Wagner-Whitin, Zangwill, Florian-Klein Appunti sui problemi di scheduling Appunti sui metodi metaeuristici di ricerca Introduzione all'ottimizzazione non vincolata   Introduzione all'ottimizzazione vincolata Esercizi di ottimizzazione non vincolata  Condizioni di KKT e Programmazione Lineare  Esercizi di ottimizzazione vincolata   Raccolta di esercizi di PL svolti  Esercizi di esame di PL svolti Esercizi di PLI svolti Appunti sui metodi basati sul rilassamento Lagrangiano Esercizi d'esame (R.O.) di ottimizzazione non vincolata e vincolata Ottimizzazione nella Gestione