Tail,PermTail), delete1(head,permlist. PermList,PermTail).

Documenti analoghi
Algebra di Boole Algebra di Boole

Programmazione Dichiarativa. Programmazione Logica. SICStus PROLOG PROLOG. Bob Kowalski: "Algoritmo = Logica + Controllo"

Introduzione alle macchine a stati (non definitivo)

Matematica e-learning - Corso Zero di Matematica. Gli Insiemi. Prof. Erasmo Modica A.A.

INDICE. Vista Libretto Livello Digitale 2. Importazione di dati da strumento 3. Inserisci File Vari 5. Compensazione Quote 5.

Distribuzioni campionarie. Antonello Maruotti

AXO - Architettura dei Calcolatori e Sistema Operativo. organizzazione strutturata dei calcolatori

Procedura operativa per la gestione della funzione di formazione classi prime

Linguaggio C: introduzione

Fondamenti VBA. Che cos è VBA

2. Simulazione discreta: entità ed operazioni

SOTTOSPAZI E OPERAZIONI IN SPAZI DIVERSI DA R n

Introduzione alla programmazione Object Oriented. Luca Lista

Il concetto di calcolatore e di algoritmo

DISPENSE DI PROGRAMMAZIONE

Definizione di metodi in Java

SQL - Sottointerrogazioni

Diagrammi a blocchi 1

Il file system. Le caratteristiche di file, direttorio e partizione sono del tutto indipendenti dalla natura e dal tipo di dispositivo utilizzato.

1 IL LINGUAGGIO MATEMATICO

Uso di metodi statici. Walter Didimo

SISTEMI OPERATIVI. Nucleo di un SO. Il Nucleo. Il nucleo di un SO Gestione delle interruzioni Sincronizzazione tra processi Dispatcher. 06.

Corso di Programmazione a oggetti

Architettura degli elaboratori Docente:

Algoritmi. Pagina 1 di 5

Progetto B. Utenti. Di conseguenza si potranno avere solo utenti di questi tipi

M.P. Cavaliere ELEMENTI DI MATEMATICA E LOGICA MATEMATICA DISCRETA INSIEMI

Normalizzazione. Definizione

SUI SISTEMI DI DISEQUAZIONI IN DUE INCOGNITE

Bit, Byte, Word e Codifica Dati

Prof.ssa Laura Pagnozzi Prof. Ivano Coccorullo. Calcolo Combinatorio

Heap e code di priorità

BASI DATI: algebra relazionale

ACCESS. Database: archivio elettronico, dotato di un programma di interfaccia che facilita la registrazione e la ricerca dei dati.

Unità Didattica 3 Linguaggio C. Generalità sulle Funzioni. Variabili locali e globali. Passaggio di parametri per valore.

I transistor. I transistor come interruttori

Parole note, nuovi significati: linguaggio, determinismo e infinito

QUESTIONARIO PER LO STUDIO DELLA PERCEZIONE DEL CENSIMENTO DELLA POPOLAZIONE

UML I diagrammi implementativi

ESTRAZIONE DI DATI 3D DA IMMAGINI DIGITALI. (Visione 3D)

Progettazione: CONSORZIO RAETIA

Introduzione all uso di FICO Xpress. Metodi di Ottimizzazione per la Logistica e la Produzione

Documenti accessibili

Sommario. Tabelle ad indirizzamento diretto e hash Funzioni Hash

Classi. Oggetti e classi. Creazione e inizializzazione di oggetti in C++ Distruzione di oggetti in C++

Unità Didattica 2 I Linguaggi di Programmazione

Problemi di Flusso: Il modello del Trasporto

Esame Informatica Generale 13/04/2016 Tema A

Compito Sistemi Informativi LA. Tempo concesso : 90 minuti 28 Giugno 05 Nome: Cognome: Matricola: Esercizio 1

FUNZIONI REALI DI UNA VARIABILE REALE

CAPITOLO V. DATABASE: Il modello relazionale

Campionamento La statistica media campionaria e la sua distribuzione

Esercitazione 3. Espressioni booleane I comandi if-else e while

Analisi. Calcolo Combinatorio. Ing. Ivano Coccorullo

AGGIORNAMENTO SOFTWARE

In molte applicazioni sorge il problema di sapere in quanti modi possibili si può presentare un certo fenomeno.

Esercizi su algebra lineare, fattorizzazione LU e risoluzione di sistemi lineari

Metodi e Modelli per l Ottimizzazione Combinatoria Ripasso sulla Programmazione Lineare e il metodo del Simplesso (parte I)

Prof.ssa Laura Pagnozzi Prof. Ivano Coccorullo. Calcolo Combinatorio

BOLLETTINO dei controlli della produttività del latte 2015

Valutazione del personale

Introduzione a MapGuide Author 6.5

Circ. n. 199 Breda di Piave, 20/04/2016

PVIS: Pilz VISualization

Lezione 4. Sommario. L artimetica binaria: I numeri relativi e frazionari. I numeri relativi I numeri frazionari

Parte 6 Esercitazione sull accesso ai file

Strutture Dinamiche. Fondamenti di Informatica

Cercare il percorso minimo Ant Colony Optimization

Riconoscere e formalizzare le dipendenze funzionali

B2B. Manuale per l utilizzatore.

Per sistema di acquisizione dati, si deve intendere qualsiasi sistema in grado di rilevare e memorizzare grandezze analogiche e/o digitali.

I circuiti digitali: dalle funzioni logiche ai circuiti

OPERAZIONI CHIUSURA E APERTURA Note operative

Incertezza di Misura: Concetti di Base

Esercitazione n o 3 per il corso di Ricerca Operativa

Introduzione alla probabilità

MONOMI. Donatella Candelo 13/11/2004 1

TEOREMA DEL RESTO E REGOLA DI RUFFINI

(Art c.c.)

WINDOWS TERMINAL SERVER PER L ACCESSO REMOTO AL SISTEMA DI PROTOCOLLO INFORMATICO

Liceo Marie Curie (Meda) Scientifico Classico Linguistico PROGRAMMAZIONE DISCIPLINARE PER COMPETENZE

Questo paragrafo e quello successivo trattano gli stessi argomenti del capitolo B6 relativo alla soluzione grafica dei sistemi di primo grado.

Somma di numeri floating point. Algoritmi di moltiplicazione e divisione per numeri interi

LEZIONE 4. { x + y + z = 1 x y + 2z = 3

LA SINTESI PROTEICA LE MOLECOLE CHE INTERVENGONO IN TALE PROCESSO SONO:

Esercizi sulla retta. Gruppo 1 (4A TSS SER, 4B TSS SER, 4A AM )

Innovazione nei modelli di Business e operativi delle compagnie di assicurazione alla luce dell evoluzione dello scenario competitivo

TomTom WEBFLEET Tachograph Manager Installazione

1 PERCHÉ LA AG-HPX301E È UNA CAMERA RIVOLUZIONARIA?

Si considerino le seguenti specifiche per la realizzazione di un sito web per la gestione di abbonamenti a riviste di vario genere..

FONTUR MANUALE UTENTE

ESERCIZI DI CALCOLO COMBINATORIO

Fondamenti di Informatica T1 Mappe

APPUNTI DI MATEMATICA ALGEBRA \ CALCOLO LETTERALE \ MONOMI (1)

ˆp(1 ˆp) n 1 +n 2 totale di successi considerando i due gruppi come fossero uno solo e si costruisce z come segue ˆp 1 ˆp 2. n 1

ARL WORKLAM CARPENTERIA INDUSTRIALE COMPETITIVA PROMOSSA DA LANTEK. Case Study:

Elezioni comunali Esempi di attribuzione dei seggi

Integrazione di rete di campo PROFIBUS in reti di fabbrica di tipo Ethernet

DESCRIZIONE CREAZIONE APP Si suddivide in 4 fasi di lavoro: 1. PIANIFICAZIONE; 2. PROGETTAZIONE; 3. SVILUPPO; 4. DISTRIBUZIONE.

Esempi di attribuzione dei seggi

Transcript:

N-Regine POSSIBILE SOLUZIONE IN PROLOG: GENERATE AND TEST La soluzione è rappresentata da una permutazione della lista: [1,2,3,4,5,6,7,8] La permutazione è una soluzione se le posizioni di ogni regina sono s sicure. solution(s): (S permutation([1,2,3,4,5,6,7,8],s), safe(s). permutation([],[]). permutation([head Tail],PermList) :-: permutation(tail Tail,PermTail), delete1(head,permlist PermList,PermTail). (chiamando delete1 di fatto si inserisce un elemento nella lista). 1 N- regine con SOLUZIONE IN PROLOG: GENERATE AND TEST Definizione di safe: Se S è la lista vuota è sicuramente "safe". Se S è una lista della forma [Queen Others],, è safe se Others è safe e Queen non attacca nessuna regina in Others. safe([]). safe([queen Others]) :-: safe(others),noattack(queen Queen,Others,1). noattack(_,[],_). noattack(y,[y1 Ylist],Xdist) :-: Y-Y1= Y1=\=Xdist, =Xdist, Y1-Y= Y=\=Xdist, =Xdist, Dist1 is Xdist +1 noattack(y, (Y,Ylist,Dist1). Nota: questa impostazione non è particolarmente efficiente: genera una soluzione completa e poi la controlla (generate and test). 2

PROBLEMA DELLE 8 REGINE Standard Backtracking in Prolog solution(x): queens(x,[], [1,2,3,4,5,6,7,8]). queens([], Placed, []). queens([x Xs], Placed, Values delete1(x,values,newvalues), noattack(x,placed), queens(xs,[x Placed],NewValues). La delete1/3 istanzia la variabile X a un valore contenuto nel suo dominio. La noattack/2 controlla (a posteriori) che il valore scelto per X sia compatibile con le variabili già istanziate. 3 FORWARD CHECKING IN PROLOG queens([x1,x2,x3,x4,x5,x6,x7,x8], [1,2,3,4,5,6,7,8] L=[1,2,3,4,5,6,7,8], queens_aux([[x1,l],[x2,l],[x3,l],[x4,l], [X5,L],[X6,L],[X7,L],[X8,L]]). queens_aux([]). queens_aux([[x1,d] Rest] member(x1,d), % istanzia la variabile X1 forward(x1,rest,newrest),%propagazione queens_aux(newrest). forward(x,rest,newrest): forward(x,rest,1,newrest). forward(x,[],nb,[]).,[]). // segue prossima 4

FORWARD CHECKING IN PROLOG forward(x,[[var,dom] Rest],Nb,[[Var,[F T]] Newrest]): ] remove_value(x,dom,nb,[f T]), Nb1 is Nb +1, forward(x,rest,nb1,newrest). remove_value(x,[],nb,[]).,[]). remove_value(x,[val Rest],Nb,[Val Newrest]): ] compatible(x,val,nb),!, remove_value(x,rest,nb,newrest). remove_value(x,[val Rest],Nb,Newrest): remove_value(x,rest,nb,newrest). compatible(value1,value2,nb Value1 =\= = = Value2 +Nb+ Nb, Value1 =\= = = Value2 - Nb, Value1 =\= = = Value2. 5 I VINCOLI NEI LINGUAGGI Linguaggi di programmazione che combinano la dichiaratività della Programmazione Logica e l'efficienza della Risoluzione di Vincoli. Limitazioni della programmazione logica: gli oggetti manipolati dai programmi logici sono strutture non interpretate i per cui l'unificazione ha successo solo tra oggetti sintatticamente nte identici. strategia di ricerca del tipo depth-first con backtracking cronologico nello spazio delle soluzioni e conducono a strategie del tipo Generate and Test. 6

PROGRAMMAZIONE LOGICA A VINCOLI Programmazione logica a vincoli: Constraint Logic Programming CLP 1989 Jaffar Lassez CLP permette di: associare a ciascun oggetto la sua semantica e le operazioni primitive che agiscono su di esso (domini di computazione quali reali, interi, razionali, booleani e domini finiti di ogni genere). sfruttare procedure di ricerca nello spazio delle soluzioni più intelligenti che conducono ad una computazione guidata dai dati e ad uno sfruttamento attivo dei vincoli. 7 LO SCHEMA CLP Sviluppato nel 1989 da Jaffar e Lassez. Aspetto chiave: l'aumento di flessibilità derivante dall'introduzione di oggetti semantici primitivi su cui il linguaggio può inferire. L'unificazione è solo un caso particolare di risoluzione di vincoli. Superamento di una delle lacune presenti nello schema tradizionale della PL che ne inficia il meccanismo fondamentale dell'unificazione. ione. Due termini, intesi come strutture non interpretate, sono unificabili solo se sintatticamente identici. In tal modo la struttura 5 e la struttura 2+3 non sono considerate lo stesso oggetto. Predicato is/2 che consente di rispondere affermativamente alla query 5 is 2+3 e alla query A is 2+3 con A=5, yes ma non si comporta correttamente nel caso in si ponga la query 5 is A+3 rispondendo A=2. 8

LO SCHEMA CLP (continua) Lo schema CLP(X) (dove X è il generico dominio di computazione) permette la definizione di oggetti semantici appartenenti ad X, di operazioni primitive e di relazioni (vincoli) su questi. Estrarre dalle relazioni Y=2+3, 5=A+3 le informazioni corrette sull'istanziazione della variabile libera. Possibilità di trattare relazioni del tipo X+3=Y-2. Questo vincolo viene mantenuto in forma implicita fino a quando una istanziazione di una delle due variabili libere fornisce informazioni sull'altra. Tra i principali domini di computazione per i quali è stato costruito un constraint solver troviamo i reali e lo schema CLP(R), i razionali con CLP(Q), gli interi CLP(Z), i booleani e i domini finiti. Domini come strumento realizzativo delle Tecniche di Consistenza. 9 LO SCHEMA CLP Le Tecniche di Consistenza possono essere realizzate con la PL costruendo programmi strutturati in modo tale da garantire il pruning a priori dell'albero decisionale. Gli insiemi di valori ammissibili per ciascuna variabile possono essere trattati utilizzando le liste e alcune primitive per agire su di esse. Tuttavia le operazioni sulle liste sono molto pesanti computazionalmente. 10

LO SCHEMA CLP Un algoritmo che realizza il Forward Checking con gli strumenti offerti dalla PL risulta, in media, meno efficiente di uno che utilizza lo Standard Backtracking per problemi di dimensione ridotta (n<12). Estendere la PL con meccanismi specifici per il trattamento delle Tecniche di Consistenza. Introdurre il concetto di dominio associato ad una variabile che ne definisca un range cioè un insieme di valori ammissibili. La realizzazione dei domini deve essere tale da permettere un loro utilizzo efficiente quindi deve essere svincolata dalle liste e dal loro trattamento. 11 DOMINIO NELLA CLP Supponiamo di avere a disposizione una primitiva domain(x,d) che associa alla variabile X un insieme di valori possibili contenuto in D,, e una primitiva indomain(x) che istanzia X,, in modo backtrackabile,, con un elemento del suo dominio. Un vincolo su una variabile con dominio agisce sul dominio stesso riducendolo. 12

DOMINIO NELLA CLP Esempio :- domain(x,[1,2,3,4,5]), X>3. X ha come effetto la riduzione del dominio di X a [4,5] mentre il vincolo X>7 conduce al fallimento non essendoci, nel dominio X,, alcun valore che soddisfa il vincolo imposto. Arricchendo la PL in questo modo è possibile esprimere relazioni tra le variabili con dominio: :- domain(x,[1,2,3,4,5]), domain(y,[3,4,5,6]), X=Y. L'unificazione delle variabili con dominio deve essere opportunamente gestita e la query precedente effettua la riduzione dei domini di X e di Y ai soli valori [3,4,5],, intersezione dei due domini. 13 N-Regine FORWARD CHECKING CON DOMINI Molto più leggibile ed efficiente queens([]). queens([x Y] indomain(x), noattack(x,y), queens(y). noattack(x,y): noattack(x,y,1). noattack(x,[],nb). noattack(x,[y Ys],Nb): X Y, X Y-Nb, X Y+Nb, Nb1=Nb+1, noattack(x,ys,nb1). I vincoli contenuti in noattack/3 agiscono eliminando i valori dai domini di Y non consistenti. Chiaramente tutte le variabili devono essere dotate di dominio tramite t la primitiva 14