Programmazione a vincoli: algoritmi di scheduling in OPL Laureanda : Sara Zanette Relatore: Ch.mo Prof. Agostino Cortesi Correlatore: Ch.mo Prof. Elena Moretti Università Ca’Foscari - Venezia - A.A. 2000/2001
Gli obiettivi della tesi Primo obiettivo: studio della programmazione a vincoli, in particolare delle tecniche di risoluzione per i problemi a vincoli. Secondo obiettivo: verificare l’efficacia del linguaggio OPL (Optimization Programming Language) - modellare problemi di scheduling; - studiare l’efficienza del solver dal punto di vista della correttezza cioè se esso riesce a trovare una soluzione corretta e ottima per i problemi; - studiare l’efficienza del solver dal punto di vista dei tempi computazionali cioè studiare come reagisce il solver aumentando i dati di input.
La programmazione a vincoli Un vincolo è una relazione logica fra diverse variabili e la programmazione a vincoli è lo studio dei sistemi computazionali basati sui vincoli. Le tecniche risolutive studiate riguardano i problemi di Constraint Satisfaction cioè i problemi definiti su domini finiti. - La ricerca sistematica: Generete&Test e Backtracking. - Le tecniche di consistenza: dei nodi, degli archi, path consistenza. - La propagazione dei vincoli: metodi di look forward e di look ahead.
Classi di problemi particolari Problemi di ottimizzazione Lo scopo è trovare la soluzione migliore e la qualità della soluzione dipende da una funzione obiettivo. Metodo risolutivo: - Algoritmo di Branch&Bound Problemi di over-constraint Problemi in cui non tutti i vincoli verranno soddisfatti dalla soluzione. Metodi risolutivi: - Partial Constraint Satisfaction - Vincoli gerarchici
Vantaggi e limiti della programmazione a vincoli La natura dichiarativa: il programmatore descrive cosa deve essere risolto in un problema, non come va risolto. Trovare la soluzione è compito del solver e non è necessario verificarne la correttezza. La separazione tra la dichiarazione dei vincoli e la ricerca permette di modificare una componente senza modificare l’altra. I problemi NP-hard hanno efficienza imprevedibile. La stabilità dei modelli: apportando piccoli cambiamenti ai dati o aggiungendo vincoli ad un problema può verificarsi un notevole abbassamento di performance.
OPL : Optimization Programming Language OPL è un linguaggio ad alto livello per l’ottimizzazione che combina assieme la potenza dei linguaggi a vincoli con quella dei linguaggi a modelli. OPL è stato sviluppato da Pascal Van Hentenryck nel 1999. Le aree di applicazione di OPL: - La programmazione lineare, intera e mista - I problemi per la risoluzione di vincoli non di ottimizzazione - Lo scheduling. Il codice OPL è composto da: 1. Una sequenza di dichiarazioni di costanti e di variabili; 2. Un’istruzione che indica la funzione obiettivo; 3. Una sequenza di dichiarazioni di vincoli; 4. Una procedura di ricerca (opzionale);
I problemi di scheduling modellati nella tesi Skin flow shop Job shop Flow shop ibrido Flow shop con tempi di set-up - Ogni problema è stato modellato scrivendo in media solo 45 righe di codice e si sono usati algoritmi predefiniti da OPL - Si sono introdotti nuovi tipi di vincoli per poter modellare correttamente i problemi, potenziando gli strumenti di OPL. - In tutti i casi si è trovata la soluzione ottima e si è verificata la correttezza. - Si sono calcolate le curve di tendenza dei tempi d’esecuzione
Vantaggi di OPL Codice semplice da interpretare - vocabolario ridotto, strutture e algoritmi predefiniti; - la sintassi è facilmente apprendibile e il codice è di immediata comprensione per l’utente. Semplicità nell’individuare gli errori - il codice è chiaro ed ogni riga può essere interpretata correttamente senza l’onere di conoscere l’intero programma. La velocità e la funzionalità per lo studio di diversi input è assicurata dalla separazione tra il modello e la dichiarazione dei dati. Nei casi di tempi computazionali proibitivi, l’ambiente di sviluppo ILOG OPL Studio permette di ottenere una soluzione subottima senza attendere la fine del processo di ricerca.