La programmazione a vincoli: OPL

Download Report

Transcript La programmazione a vincoli: OPL

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.
2
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.
3
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
4
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.
5
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);
6
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
7
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.
8