Mattia Merenda
Logo

Saverio Mattia Merenda

Master's Student
University of Parma, Italy


Questi documenti offrono una panoramica tecnica approfondita sulla programmazione a vincoli (CP), analizzandone i fondamenti teorici, le metodologie di risoluzione e le numerose applicazioni pratiche. I testi esaminano strategie algoritmiche come la propagazione dei vincoli, la ricerca backtracking e l’uso di tecniche di local search per ottimizzare problemi complessi. Viene dato ampio spazio a estensioni avanzate, tra cui i vincoli soft per gestire l’incertezza e i vincoli globali per modellare strutture specifiche come il problema delle quattro regine o la pianificazione dei percorsi. Gli autori esplorano inoltre l’integrazione della CP in vari linguaggi di programmazione e la sua efficacia in settori critici quali la bioinformatica, la logistica dei trasporti e la configurazione industriale. In sintesi, le fonti fungono da guida esaustiva per comprendere come i sistemi computazionali possano risolvere problemi decisionali rispettando una serie di limitazioni logiche e matematiche.

Cos’è la Constraint Programming (CP)?

La CP è un paradigma di programmazione dichiarativo che affonda le sue radici nell’Intelligenza Artificiale, ideale per modellare e risolvere problemi combinatori complessi.

Caratteristiche principali:


Il Futuro della xAI (Explainable AI)

CP_2025_01B.pdf

1. Il Cambiamento Esponenziale e il Fattore Umano

Il documento introduce il contesto tecnologico attuale caratterizzato da una crescita esponenziale.

2. Regolamentazione: EU AI ACT

Viene presentata la normativa europea come una pietra miliare per la gestione dell’IA.

3. Intelligenza Artificiale Generativa (Generative AI)

Il documento sottolinea che l’IA Generativa (come ChatGPT, Dall-E, Midjourney) non era esplicitamente inclusa nell’AI Act originale, sollevando nuove problematiche.

4. Rischi dell’IA Generativa

Vengono analizzati i rischi specifici legati ai modelli generativi:

5. Explainable AI (xAI) - Intelligenza Artificiale Spiegabile

Questa sezione è il cuore teorico del documento e discute la necessità di andare oltre la semplice accuratezza dei modelli.

Il dilemma della “Native Explainability”

Si pone un quesito fondamentale sulla ricerca futura:

6. Due percorsi che si uniscono? (Machine Learning vs Symbolic AI)

Il documento conclude confrontando due approcci che potrebbero convergere per risolvere i problemi di spiegabilità:

Machine Learning (es. ChatGPT) Symbolic AI (IA Simbolica)
Livello Sintattico Livello Semantico
Basato sulla probabilità del prossimo token Relazioni tra oggetti
Pattern tipici del linguaggio naturale Simile alle deduzioni umane
Cattura una certa semantica (ma quale?) Domanda chiave: Può spiegare il ML?

L’IA simbolica (basata su logica e relazioni) potrebbe essere la chiave per fornire la spiegazione e la “prova logica” che manca al Machine Learning puro.


Constraint Optimization Problems (COP)

CP_2025_02.pdf

1. Introduzione ed Esempi Preliminari

Il documento introduce i concetti attraverso esempi classici di problemi combinatori.

2. Definizione di COP (Constraint Optimization Problem)

Un COP è un’estensione del problema di soddisfacimento dei vincoli (CSP) che introduce una funzione obiettivo da ottimizzare.

Formalizzazione

Un COP è definito da:

  1. Un insieme di Variabili $V = {V_1, \dots, V_n}$.
  2. Un insieme di Domini $D = {D_1, \dots, D_n}$, dove ogni variabile $V_i$ assume valori in $D_i$.
  3. Un insieme di Vincoli $C$ sulle variabili $V$.
  4. Una Funzione Obiettivo $f: D^n \rightarrow A$.

Obiettivo

L’obiettivo è trovare un assegnamento $\sigma$ (o tutti gli assegnamenti) che sia:

Nota Importante: Non ci sono restrizioni teoriche sulla tipologia dei domini, sul tipo di vincoli o sulla natura della funzione $f$.

3. Spazio di Ricerca (Search Space)

Dato un problema $\langle X_1 \in D_1, \dots, X_n \in D_n; C \rangle$, lo spazio di ricerca è definito come l’insieme di tutte le n-uple di elementi dei domini. È l’insieme di tutte le possibili combinazioni di assegnamenti, all’interno del quale si cercano le soluzioni ammissibili.

4. Risoluzione di un COP tramite CSP

È possibile risolvere un problema di ottimizzazione (COP) utilizzando un risolutore progettato per problemi di soddisfacimento (CSP), trasformando l’ottimizzazione in una sequenza di problemi di decisione.

La tecnica della Bisezione

Supponendo di avere un risolutore “black box” per i CSP, si può modellare un COP come un CSP parametrico $P’$: $P’ = \langle X_1 \in D_1, \dots, X_n \in D_n; C, f(X_1, \dots, X_n) \le k \rangle$

Dove $k$ è un valore target. La procedura è la seguente:

  1. Si stabilisce un Upper Bound (limite superiore) $M$ del valore atteso della funzione obiettivo (spesso facile da stimare).
  2. Si utilizza la bisezione (ricerca binaria) per trovare il valore minimo.
  3. Il numero di chiamate al risolutore CSP è limitato da $\log_2 M$.

Esempio Pratico di Bisezione

Supponiamo che il minimo reale sia 15 (valore ignoto a priori) e che il limite superiore sia $M = 205$. La ricerca procede risolvendo una serie di CSP con vincolo $f(X) \le k$:

  1. $k=205$: Risolvibile? SÌ.
  2. $k=102$: Risolvibile? SÌ.
  3. $k=51$: Risolvibile? SÌ.
  4. $k=25$: Risolvibile? SÌ.
  5. $k=12$: Risolvibile? NO (il vincolo è troppo stretto).

Deduzione: Il minimo si trova nell’intervallo. Si prosegue la bisezione in questo intervallo:

  1. Si prova $12 + 6 = 18$ (SÌ).
  2. Si prova $12 + 3 = 15$ (SÌ).
  3. Si prova $12 + 1 = 13$ (NO).

A questo punto il dubbio rimane tra 14 e 15. Una chiamata finale con $k=14$ risolverà l’ambiguità determinando il minimo esatto.


SAT, Local Search e Fondamenti di Propagazione

CP_2025_03.pdf

1. Modellazione Alternativa e NP-Hardness

Il documento inizia discutendo formalizzazioni alternative per problemi classici e la loro complessità.

Esempio: 4-Regine (Modellazione Booleana)

Oltre alla modellazione standard ($X_i = j$ indica che la regina della colonna $i$ è nella riga $j$), viene proposta una modellazione basata su variabili booleane:

NP-Completezza

I CSP (Constraint Satisfaction Problems) possono codificare problemi NP-Hard.

2. Il Problema SAT (Boolean Satisfiability)

Il corso introduce SAT come un caso specifico di CSP con domini booleani.

Definizione

Dato un insieme di variabili booleane $X_1, \dots, X_n$ e una formula proposizionale $\Phi$ in CNF (Forma Normale Congiuntiva), il problema consiste nel trovare un assegnamento di verità che soddisfi $\Phi$.

Codifica dei Vincoli in SAT

Ogni vincolo CSP può essere tradotto in clausole SAT.

Formato DIMACS

È lo standard per i file di input dei risolutori SAT:

Algoritmo DPLL

Per risolvere SAT si utilizza l’algoritmo di Davis-Putnam-Logemann-Loveland (DPLL).

A differenza degli approcci costruttivi (che costruiscono la soluzione passo dopo passo), la ricerca locale parte da un assegnamento completo (spesso casuale e errato) e cerca di ripararlo.

Funzionamento

  1. Si parte da una configurazione completa.
  2. Si valuta una funzione di costo (es. numero di vincoli violati).
  3. Si effettuano modifiche locali (swap o cambio valore) per migliorare la soluzione (es. scambiare due regine per ridurre gli attacchi).

Problema dei Minimi Locali

L’algoritmo può bloccarsi in un “minimo locale”, una configurazione non ottimale dove nessun movimento locale migliora la situazione, ma la soluzione non è stata trovata.

Meta-euristiche

Per uscire dai minimi locali si usano strategie avanzate:

4. Constraint Propagation (Propagazione dei Vincoli)

Questa sezione introduce i concetti formali per la riduzione dello spazio di ricerca.

Constraint Solver

Un risolutore è una procedura che trasforma un CSP $P$ in un CSP equivalente $P’$ più semplice.

Regole di Consistenza

Gli algoritmi di propagazione applicano ripetutamente regole di inferenza per rimuovere valori inconsistenti dai domini.

  1. Node Consistency (Consistenza di Nodo): Verifica i vincoli unari (che coinvolgono una sola variabile). Ogni valore nel dominio $D_i$ deve soddisfare i vincoli unari su $X_i$. Complessità: $O(cd)$.
  2. Arc Consistency (Consistenza d’Arco): Riguarda i vincoli binari. Un arco $(X_i, X_j)$ è consistente se per ogni valore $x \in D_i$ esiste almeno un valore $y \in D_j$ che soddisfa il vincolo binario tra loro.
    • La complessità standard è $O(ncd^3)$ (dove $n$ variabili, $c$ vincoli, $d$ dimensione dominio).
    • La propagazione continua finché non si raggiunge un “punto fisso” (fixpoint) in cui non si possono rimuovere altri valori.

Riepilogo Complessità


Local Search, Formalizzazione CSP e Constraint Solving

CP_2025_04.pdf

Il documento riprende il concetto di Ricerca Locale applicato ai CSP, utilizzando il problema delle 4 Regine come caso di studio principale.

Meccanismo di base

Meta-euristiche Principali

Per superare i minimi locali e i cicli, vengono utilizzate strategie avanzate:

  1. Monte Carlo: Descritto come una sorta di Simulated Annealing con temperatura fissa e parametro $F = 0.5$. Il nome deriva dai lavori degli anni ‘40 di Ulam, Fermi e Von Neumann a Los Alamos,.
  2. Tabu Search: Simile al Simulated Annealing, ma utilizza una memoria esplicita (Tabu list) che memorizza le ultime $k$ soluzioni visitate per evitare di tornare su configurazioni recenti e creare cicli,.

2. Formalizzazione del CSP (Constraint Satisfaction Problem)

Questa sezione fornisce le definizioni formali necessarie per trattare i vincoli in modo rigoroso, indipendentemente dalla sintassi specifica.

Definizioni

Esempio Estensionale (4-Regine)

Il documento mostra come i vincoli possano essere rappresentati come insiemi di tuple ammissibili.

3. Constraint Solving (Risoluzione dei Vincoli)

Viene introdotto il concetto teorico di “Risolutore”.

Cos’è un Constraint Solver?

È una procedura che trasforma un CSP $P$ in un CSP equivalente $P’$ (che ha le stesse soluzioni sui variabili originali).

Regole di Prova (Proof Rules)

I solver si basano sull’applicazione ripetuta di regole di trasformazione nella forma: $ \phi \to \psi $. Dove $\phi$ e $\psi$ sono CSP. La regola preserva l’equivalenza, cioè $Sol(\phi) = Sol(\psi)|_{vars(\phi)}$ (le soluzioni sono identiche se ristrette alle variabili originali, poiché $\psi$ potrebbe introdurre nuove variabili ausiliarie),.

4. Propagazione dei Vincoli (Constraint Propagation)

Questa è la parte centrale per l’efficienza dei risolutori moderni.

Regole di Riduzione del Dominio

Le regole sfruttano i vincoli per rimuovere valori dai domini che non possono far parte di una soluzione. Hanno la forma: $\langle C; D_{in} \rangle \to \langle C^\prime; D^\prime_{in} \rangle$ Dove $D^\prime_{in}$ implica che i nuovi domini sono sottoinsiemi dei precedenti ($D^\prime_i \subseteq D_i$).

Regole di Trasformazione

A volte è necessario trasformare la struttura del problema introducendo nuove variabili.

5. Complessità degli Algoritmi di Consistenza

Il documento conclude con un riepilogo delle complessità computazionali per gli algoritmi di consistenza base (fondamentali per l’esame). Siano $n$ le variabili, $c$ i vincoli, e $d$ la dimensione massima del dominio.

Nota finale: Le regole di consistenza d’arco riducono solo i domini; l’ordine di applicazione non importa per il risultato finale (si raggiunge un unico fixpoint). Esistono algoritmi ottimizzati come AC-4, AC-5, ecc., che migliorano queste prestazioni.


Propagazione Avanzata e Consistenza

CP_2025_05.pdf

1. Hyper Arc Consistency (HAC)

L’Hyper Arc Consistency è la generalizzazione della consistenza d’arco per vincoli non binari (ovvero vincoli che coinvolgono più di due variabili).

Definizione e Regole

Un CSP è Hyper Arc Consistent se, per ogni vincolo $C$ sulle variabili $X_1, \dots, X_m$, e per ogni variabile $X_i$ nel suo scopo, ogni valore nel dominio $D_i$ può essere esteso a una tupla completa che soddisfa $C$.

La consistenza viene ottenuta applicando ripetutamente le regole $HAC_i$ (per $i = 1, \dots, m$): $ \langle C; D_1, \dots, D_i, \dots, D_m \rangle \to \langle C; D_1, \dots, D^\prime_i, \dots, D_m \rangle $

Dove il nuovo dominio $D^\prime_i$ è definito come: $ D^\prime_i = { a_i \in D_i : (\exists a_1 \in D_1) \dots (\exists a_{i-1} \in D_{i-1}) (\exists a_{i+1} \in D_{i+1}) \dots (\exists a_m \in D_m) (\langle a_1, \dots, a_m \rangle \in C) } $ In pratica, si rimuovono dal dominio $D_i$ i valori che non fanno parte di nessuna soluzione valida locale per il vincolo $C$.

2. Path Consistency (Consistenza di Cammino)

La Path Consistency è una forma di inferenza più forte della consistenza d’arco, che lavora su triangoli di variabili per inferire nuovi vincoli o restringere quelli esistenti.

Normalizzazione del CSP

Prima di applicare la Path Consistency, è utile normalizzare il CSP.

Nota sulla soddisfacibilità: Durante la fase di riscrittura e normalizzazione, è possibile rilevare l’insoddisfacibilità del problema forzando la consistenza d’arco.

Operazioni su Relazioni

Per definire le regole di Path Consistency, si utilizzano operazioni sulle relazioni binarie:

Regole di Prova (Proof Rules) per Path Consistency

La Path Consistency applica regole di triangolazione su terne di variabili $X, Y, Z$. Le regole aggiornano i vincoli diretti tra le coppie basandosi sui percorsi alternativi. Le regole principali sono:

  1. PC1 (Aggiornamento $X,Y$): $ C^\prime(X, Y) = C(X, Y) \cap (C(X, Z) \cdot C(Y, Z)^T) $ Il vincolo tra $X$ e $Y$ viene ristretto intersecandolo con la composizione dei vincoli che passano per $Z$.

  2. PC2 (Aggiornamento $X,Z$): $ C^\prime(X, Z) = C(X, Z) \cap (C(X, Y) \cdot C(Y, Z)) $

  3. PC3 (Aggiornamento $Y,Z$): $ C^\prime(Y, Z) = C(Y, Z) \cap (C(X, Y)^T \cdot C(X, Z)) $

Complessità

La complessità computazionale per applicare la Path Consistency su un grafo con $v$ variabili e dimensione massima del dominio $d$ è: $ O(v^4 d^5) $ Questo costo è significativamente più alto rispetto alla consistenza d’arco ($O(ncd^3)$), il che ne limita l’uso pratico su problemi di grandi dimensioni.

3. k-Consistency

Il documento introduce il concetto di k-consistenza come generalizzazione delle nozioni precedenti:

4. Algoritmi di Ricerca e Storia (DPLL)

Il documento fa riferimento alla storia degli algoritmi di risoluzione per problemi logici e SAT, fondamentali per capire i moderni risolutori.

L’algoritmo di Davis-Putnam (DP) vs DPLL

Unit Propagation (Propagazione Unitaria)

Una componente chiave del DPLL è la Unit Propagation.

Esempio di Traccia di Esecuzione

Il documento contiene tracce di esecuzione di algoritmi di ricerca (probabilmente Branch and Bound o DPLL su CSP), mostrando nodi di decisione (es. $W=1, C=1$) e nodi di fallimento (“fail node”) dove i vincoli non sono soddisfatti o il bound non è rispettato (es. $26 < 28$).


Modellazione e Risoluzione con MiniZinc

CP_2025_06.pdf

1. Panoramica su MiniZinc

MiniZinc è un linguaggio di modellazione di alto livello per problemi di vincoli, sviluppato e mantenuto dalle Università di Monash e Melbourne.

2. Il Processo di Risoluzione (Pipeline)

Il flusso di lavoro standard per risolvere un problema scritto in MiniZinc prevede diversi passaggi di traduzione:

  1. Modello MiniZinc (.mzn): Il codice sorgente scritto dall’utente.
  2. Traduzione a FlatZinc: Il modello viene compilato tramite il tool mzn2fzn (o minizinc -c).
  3. FlatZinc (.fzn): È una versione “srotolata” (unfolded) del modello MiniZinc. Consiste fondamentalmente in una sequenza di vincoli semplici (piatti), privi di costrutti di alto livello come cicli o array complessi.
  4. Risolutore: I moderni risolutori di vincoli leggono in input il file FlatZinc per trovare le soluzioni.

3. Strategie di Ricerca (Search Strategies)

Una parte fondamentale per l’efficienza della risoluzione è la definizione di annotazioni di ricerca. MiniZinc permette di specificare come esplorare l’albero di ricerca attraverso due scelte principali: quale variabile istanziare e quale valore assegnare/escludere,.

A. Scelta della Variabile (varchoice)

Queste euristiche determinano l’ordine in cui le variabili vengono selezionate per l’assegnamento,:

B. Scelta del Valore (constrainchoice)

Una volta selezionata la variabile, queste euristiche decidono come assegnare o restringere il dominio,,:

Nota per l’esame: È importante ricordare che le strategie possono essere combinate. A volte si hanno opzioni aggiuntive, come specificare che il dominio è all_different.

4. Sintassi e Modellazione

Il documento accenna ad alcuni elementi sintattici chiave:

5. Esempi di Problemi Noti

Il corso utilizza diversi problemi classici per illustrare la modellazione in MiniZinc. È probabile che all’esame venga chiesto di riconoscere o scrivere parti di questi modelli,:

  1. N-Queens: Posizionare N regine senza che si attacchino.
  2. Send More Money: Un classico problema di crittoaritmetica.
  3. WrongWrongRight: Probabilmente un puzzle logico o di soddisfacimento.
  4. Latin Square: Griglia n x n dove ogni simbolo appare una volta per riga e colonna.
  5. Magic Square: Quadrato magico (somme di righe, colonne e diagonali uguali).
  6. Sudoku: Variazione del Latin Square con vincoli aggiuntivi sui sottogruppi 3x3.

Strategie di Ricerca e Sintassi in MiniZinc

CP_2025_08.pdf (Ottimizzazione del processo di risoluzione e modellazione avanzata)

1. Strategie di Ricerca (Search Annotations)

In MiniZinc, è possibile guidare il solver su come esplorare l’albero di ricerca specificando l’ordine di scelta delle variabili e dei valori. Questo è cruciale per l’efficienza della risoluzione.

A. Scelta della Variabile (varchoice)

Queste annotazioni determinano quale variabile deve essere istanziata per prima durante la ricerca:

B. Scelta del Valore (constrainchoice)

Una volta selezionata una variabile, queste annotazioni determinano quale valore assegnare o come restringere il dominio:

2. Sintassi MiniZinc

Il documento fornisce dettagli sulla definizione di predicati personalizzati, utili per incapsulare logica di modellazione riutilizzabile.

3. Esempi di Codifiche (Encodings)

Il documento elenca specifici problemi classici che sono stati o saranno trattati come esempi di modellazione in MiniZinc. È fondamentale conoscere questi modelli per l’esame:

  1. Send More Money: Problema di crittoaritmetica.
  2. WrongWrongRight: Probabile puzzle logico.
  3. Latin Square: Griglia $n \times n$ con simboli unici per riga e colonna.
  4. Magic Square: Quadrato magico (somme costanti su righe, colonne e diagonali).
  5. Sudoku: Esercizio di gruppo citato nel documento.

Modellazione CSP dei Codici di Hamming

CP_2025_10.pdf

1. Introduzione ai Codici di Hamming

Il documento introduce i codici di Hamming come concetto fondamentale per la correzione degli errori nelle trasmissioni digitali.

2. Il Problema CSP: Hamming Codes

L’obiettivo è modellare la generazione di codici robusti come un Problema di Soddisfacimento di Vincoli (CSP).

Definizione del Problema

Dati tre numeri interi $n$, $k$ e $d$, il problema consiste nel trovare un insieme di parole (un codice) con le seguenti caratteristiche:

  1. Dimensione del codice: Il codice deve contenere $k$ parole distinte.
  2. Struttura delle parole: Ogni parola è un vettore di bit di lunghezza $n$.
  3. Vincolo di Distanza: La distanza di Hamming minima tra una qualsiasi coppia di parole nel codice deve essere almeno $d$.

Nota per lo studio: La distanza di Hamming tra due stringhe di uguale lunghezza è il numero di posizioni nelle quali i simboli corrispondenti sono diversi. In un CSP, questo si traduce nel vincolare che due vettori differiscano in almeno $d$ elementi.

Esempio Applicativo

Il documento cita un esempio pratico di utilizzo di questi codici in ambito industriale, specificamente nelle acciaierie (“steel plants”), dove è necessario leggere codici visivi (come sensori o marcatori) in ambienti difficili, richiedendo quindi una forte capacità di correzione degli errori per identificare correttamente i numeri (es. il numero 5 mostrato nella slide).

3. Elementi per la Modellazione (MiniZinc)

Sebbene il codice specifico non sia presente nell’estratto, per l’esame è utile prepararsi a come tradurre la definizione formale sopra in un modello MiniZinc:


Predizione della Struttura delle Proteine

CP_2025_11.pdf e CP_2025_12.pdf

A. Il Dogma Centrale della Biologia Molecolare

Il documento introduce i concetti biologici fondamentali necessari per modellare il problema:

B. Il Problema del Protein Folding (Ripiegamento)

Le proteine non rimangono catene lineari, ma si ripiegano in strutture 3D complesse che ne determinano la funzione.

C. Definizione del Problema (PSP - Protein Structure Prediction)

D. Modellazione Semplificata: Modello HP su Reticolo

Per rendere il problema trattabile computazionalmente, si utilizzano modelli discreti semplificati.

  1. Semplificazione della Proteina: Si considerano solo due classi di amminoacidi:
    • H (Idrofobici): Odiano l’acqua, tendono a raggrupparsi all’interno della proteina (core).
    • P (Polari): Amano l’acqua, tendono a stare sulla superficie.
  2. Semplificazione Spaziale: Si usa un reticolo 2D (o 3D) quadrato invece dello spazio continuo.

E. Il Modello CSP (Constraint Satisfaction Problem)

Il problema viene formalizzato come la ricerca di un “folding” $\omega$ su una griglia:

F. Complessità

Anche con queste enormi semplificazioni (modello HP su reticolo 2D), stabilire se esiste un folding con energia $< k$ è un problema NP-completo.


I Vincoli Globali (Global Constraints)

CP_2025_13.pdf

Questa sezione rappresenta il passaggio dai vincoli elementari (binari/ternari) a componenti di modellazione complessi che incapsulano algoritmi di propagazione specializzati.

1. Cosa sono i Vincoli Globali?

I vincoli globali sono vincoli definiti su un insieme di variabili (anziché solo su una o due).

2. Il Catalogo dei Vincoli Globali

Esiste una risorsa di riferimento fondamentale citata nel corso: il Global Constraint Catalog (disponibile su sofdem.github.io/gccat/).

3. Vincoli Globali in MiniZinc

Il documento elenca i principali vincoli globali disponibili nella libreria standard di MiniZinc. È fondamentale conoscerli per la modellazione,:

4. Approfondimento su due Vincoli Chiave

Il documento utilizza due problemi classici per illustrare la necessità di specifici vincoli globali al posto di vincoli semplici.

A. Il vincolo circuit (per il TSP)

Nel Traveling Salesman Problem (TSP), non basta usare alldifferent per dire che ogni città viene visitata una sola volta.

B. Il vincolo cumulative (per lo Scheduling)

Per problemi di pianificazione (Scheduling) in cui le attività consumano risorse limitate (es. macchinari, elettricità, personale), si usa il vincolo cumulative.