PROGRAMMAZIONE E INTRODUZIONE ALL'INTELLIGENZA ARTIFICIALE
cod. 1012441

Anno accademico 2024/25
1° anno di corso - Secondo semestre
Docente responsabile dell'insegnamento
ZAMMORI Francesco
insegnamento integrato
9 crediti
sede:
insegnamento
in ITALIANO

Obiettivi formativi

Alla fine del corso gli studenti saranno padroni dei principali strumenti per
l’analisi dei dati e per il calcolo numerico in Python. In particolare conosceranno la programmazione di tipo procedurale e la programmazione orientata agli oggetti. Verranno anche forniti alcuni elementi di base della programmazione di tipo funzionale.
Inoltre, gli studenti acquisiranno le prime nozioni di Machine Learning e di Intelligenza Artificiale.

Prerequisiti

Il corso richiede esclusivamente nozioni d’informatica di base e di statistica.
Tutti gli argomenti verranno comunque affrontati partendo da zero e, pertanto, saranno fruibili
anche in mancanza delle propedeuticità precedentemente indicate.

Contenuti dell'insegnamento

Il corso introduce i principali strumenti informatici necessari all’analisi dei dati ed alla risoluzione numerica di problemi tipici dell’ingegneria.
Il focus è sull'uso di Python 3.10 (o superiore) e delle sue principali librerie per il calcolo scientifico, propedeutiche allo sviluppo di algoritmi di Machine Learning e di Artificial Intelligence. L'ultima parte del corso è dedicata ad una prima introduzione al Machine Learning e all'Intelligenza Artificiale. In particolare verranno sviluppati dei sistemi di previsione basati su regressione (lineare e logistica), dei sistemi di classificazione, e delle semplici reti neurali (perceptron e multi layer perceptron).

Programma esteso

- Introduzione alla programmazione (variabili e tipi di base).
- L’ambiente di sviluppo, Anaconda e Spyder.
- Istruzioni logiche, istruzioni IF...Then...Else, istruzioni Match ... Case
- Iterazione (For Loops, While Loops, Nested Loops, Utilizzo di Else all’interno di cicli).
- Funzioni (Funzioni di base, Funzioni che ritornano un valore, Visibilità delle variabili).
- Tipi avanzati (liste, tuple, dizionari ed insiemi).
- Approfondimenti sulle funzioni (Funzione lamba, funzioni con parametri opzionali).
- Funzioni che accettano altre funzioni.
- Closures: funzioni che restituiscono altre funzioni.
- Ricorsione: funzioni che richiamano sé stesse.
- Generatori ed iteratori.
- La gestione degli errori (il blocco try ... except ... finally).
- Il debug, principi ed esempi.
- La programmazione ad oggetti.
- Classi ed Oggetti.
- Costruttori.
- Metodi.
- Metodi magici.
- Ereditarietà e polimorfismo.
- Le proprietà degli oggetti.
- Metodi statici e metodi di classe.
- Creazione di strutture di dati personalizzate (matrice, liste, liste ricorsive, grafi e alberi).
- Creazione di modelli di regressione e di classificazione.
- Creazione e addestramento di semplici reti neurali.

Bibliografia

1) Pensare in Python, by Allen Downey, edited by O’Reilly
2) Learning Python, by Mark Lutz, edited by O’Reilly
3) The Python Workbook, Second Edition, by Ben Stephenson Edited by Springer
4) Hands-On Machine Learning with Scikit-Learn & TensorFlow, by Aurélien Géron, Edited by O'Reilly

Saranno inoltre fornite dispense ed eserciziari (a cura del docente) su tutti gli argomenti trattati a lezione. Le dispense verranno rilasciate in maniera progressiva (capitolo per capitolo) con qualche giorno d'anticipo rispetto alle lezioni.

Metodi didattici

Il corso ha contenuti sia teorici, sia pratici.
Gli aspetti teorici verranno esposti in modo tradizionale utilizzando "lavagna e gessetti colorati" ed eventualmente proiettando col video proiettore le linee di codice eseguibile scritte sul momento.
La parte pratica (circa il 50% delle lezioni) verrà invece svolta nei laboratori informatici, dove verranno introdotti casi di studio e/o verranno svolte applicazioni pratiche dei concetti teorici precedentemente introdotti.

Modalità verifica apprendimento

La verifica prevede una prova scritta ed una prova orale.
La prova scritta, della durata di circa 2.5 ore, si compone di 4 - 5 esercizi a livello di difficoltà crescente. La prova è organizzata in modo che sia possibile svolgerla interamente "su carta", ma è comunque possibile svolgerla utilizzando il proprio computer portatile (e questa è la modalità consigliata).
Gli studenti dovranno inoltre preparare un elaborato finale (singolarmente o in gruppi di massimo 3 persone) che verrà discusso durante la prova orale. Tale prova verterà essenzialmente sulla discussione dell'elaborato finale, ma potrebbe riguardare anche domande generali di teoria.

Altre informazioni

Il 50% del corso si svolgerà in aule didattiche tradizionali, mentre la
restante parte si svolgerà nei laboratori informatici.
E' comunque possibile, e fortemente consigliato, portare il proprio
portatile anche durante le ore di teoria, in modo da poter verificare il codice scritto in tempo reale.
E' anche possibile utilizzare il proprio portatile in sostituzione dei pc presenti nei laboratori. A tal fine è necessario essere dotati di Python 3.10 o superiore. Si consiglia inoltre l'installazione della piattaforma Anaconda e dell'Editor Spyder e Jupiter Notebook in esso contenuto.