Othello Strutture dati ed implementazione in prolog

Slides:



Advertisements
Presentazioni simili
La probabilità nei giochi
Advertisements

INFORMATICA Altre Istruzioni di I/O
COMITATO REGIONALE FRIULI VENEZIA GIULIA FEDERAZIONE ITALIANA PESISTICA E CULTURA FISICA Corso di prima formazione per ARBITRI REGIONALI di Pesistica e.
© 2007 SEI-Società Editrice Internazionale, Apogeo Unità E1 Dallanalisi del problema alla definizione dellalgoritmo.
Linguaggio C++ Selezione.
PROGRAMMARE IN PASCAL (le basi)
Algoritmi e Programmazione
Esercitazioni Anno Accademico
Time Sharing Il termine “Time Sharing” proviene dall'inglese e significa letteralmente “partizione di tempo”. Questa è una tecnica sviluppatasi negli.
Esercitazione con socket
Deadlock Modello del sistema Caratterizzazione dei deadlock
Algoritmi e Dimostrazioni Stefano Berardi
Iterazione enumerativa (for)
Lab X: Battaglia Navale
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 7: 10 Giugno 2013 Gianluca Durelli – Marco D. Santambrogio –
Informatica 2. Concetti fondamentali di programmazione Programmare vuol dire scrivere un algoritmo in un linguaggio che faccia funzionare un calcolatore.
Algoritmi e Strutture Dati (Mod. A)
IL GIOCO DEGLI SCACCHI Cosa sono gli scacchi?
Struttura dei sistemi operativi (panoramica)
Corso di Laurea in Ingegneria per lAmbiente e il Territorio Informatica per lAmbiente e il Territorio Docente: Giandomenico Spezzano Tutor: Alfredo Cuzzocrea.
Strutture di controllo in C -- Flow Chart --
Alessandro Tanasi - 1 Snake Alessandro Tanasi Gioco dello Snake.
Lezione 2 Programmare in ASP
Introduzione alle basi di dati
Gestione documenti La funzione principale di MOSAICO è il trattamento documenti. Grazie ad una corretta configurazione dellanagrafica documenti e causali,
Elementi di Informatica
Istruzioni d’uso per invio telematico
Informatica 1 (SAM) - a.a. 2010/11
Algoritmi di String Matching
BENVENUTI. Istruzioni per la compilazione dei moduli di domanda interattivi del Comune di Vignola Consigliamo di leggere attentamente queste istruzioni.
SY-MAP tools Guida allutilizzo. SY-MAP tools I SY-MAP tools permettono di collegare informazioni memorizzate su un database e elementi grafici dei file.dgn.
Elenchi in Excel E’ possibile inserire le voci del nuovo elenco oppure
Progetto di un linguaggio e interprete per giocare a MemoryPlus Progetto di:Docente: Vito La PortaEnrico Denti.
DIPARTIMENTO DI ELETTRONICA E INFORMAZIONE Lab 7: 13 Giugno 2013 Gianluca Durelli – Marco D. Santambrogio –
BIOINFO3 - Lezione 211 INPUT La lettura di un input dallo standard input (tastiera) si effettua utilizzando lespressione. Quando il programma incontra.
BIOINFO3 - Lezione 15 ISTRUZIONI
Università degli Studi di Bologna Facoltà di Ingegneria Anno Accademico 2007/2008 Laurea Specialistica in Ingegneria Informatica Linguaggi e Modelli Computazionali.
Idee per rendere la matematica divertente
Utilizzare gli schemi stampati j quindi premere F5 o fare clic su Presentazione > Dall'inizio per iniziare il corso. Sulla barra dei messaggi fare clic.
Regole degli scacchi -1 luglio2014
Università degli Studi di Napoli Parthenope programmazione III.
1 Il Buffer Cache Unix (Bach: the Design of the Unix Operating System (cap: 3)
Tecnica SCAP.
Automatismi Scacchistici
Apertura Cos’è ed a cosa serve.
Sistemi e Tecnologie Informatiche Verifica di correttezza di un programma.
Introduzione a Javascript
R 255 G 211 B 8 R 255 G 175 B 0 R 127 G 16 B 162 R 163 G 166 B 173 R 104 G 113 B 122 R 234 G 234 B 234 R 175 G 0 B 51 R 0 G 0 B 0 R 255 G 255 B 255 Supporting.
La ricorsione.
Scuola Salvemini Virgilio
Didattica e Fondamenti degli Algoritmi e della Calcolabilità Terza giornata: principali classi di complessità computazionale dei problemi Guido Proietti.
Informatica Lezione 5 Scienze e tecniche psicologiche dello sviluppo e dell'educazione (laurea triennale) Anno accademico:
Gestione del processore (Scheduler)
DRAUGHTS Linguaggi e Modelli Computazionali LS Linguaggio e interprete per effettuare una partita di dama inglese contro un’intelligenza artificiale Progetto.
Linguaggi e Modelli Computazionali LS Anno Accademico 2007/2008 Alessio Della Motta Un linguaggio per descrivere partite di Maraffone: il gioco più popolare.
Capitolo 10 Tecniche algoritmiche Algoritmi e Strutture Dati.
Capitolo 10 Tecniche algoritmiche Algoritmi e Strutture Dati.
1 Laboratorio di Introduzione alla Programmazione §II MODULO §3 crediti §Esame e voto unico (su 6 crediti totali)
1 Macchine astratte, linguaggi, interpretazione, compilazione.
Automi temporizzati.
Informatica e Informatica di Base
I giochi con avversario Maria Simi a.a. 2008/2009.
Giochiamo a tris. Un campo di esperienza per il problem-solving: i giochi di interazione strategica.
Corso integrato di Matematica, Informatica e Statistica Informatica di base Linea 1 Daniela Besozzi Dipartimento di Informatica e Comunicazione Università.
Sistemi e Tecnologie Informatiche Complessità di calcolo.
Come risolvere il cubo di RUBIK
Quattro giocatori seduti al tavolo. Il primo giocatore distribuisce 10 carte a testa. Il secondo giocatore inizia la partita e può scartare qualsiasi carta.
Autoresizing e autolayout. Posizionare gli elementi All’interno dello storyboard, gli elementi possono essere posizionati trascinandoli nella posizione.
Eccezioni in Java. Le eccezioni in Java Exception handling: insieme di costrutti e regole sintattiche e semantiche presenti nel linguaggio allo scopo.
Lezione n. Parole chiave: Corso di Laurea: Insegnamento: Docente: A.A Salvatore Cuomo La ricorsione 15 Approccio ricorsivo, esercizi sulla.
Transcript della presentazione:

Othello Strutture dati ed implementazione in prolog Approfondimento per il corso di Linguaggi Logici A.A. 2006/07 Cappellazzo Pietro Carminati Roberto

Othello - Strutture dati ed implementazione in Prolog Othello: Le Regole Othello si gioca in due, su una scacchiera 8x8, con 64 pedine bicolori. Un giocatore ha il Nero, l'avversario il Bianco. La disposizione iniziale delle pedine sulla scacchiera è rappresentata in figura, inizia a giocare il Nero. Le “x” in figura rappresentano le mosse possibili. Othello - Strutture dati ed implementazione in Prolog

Othello - Strutture dati ed implementazione in Prolog Othello: Le Regole Al suo turno ogni giocatore poggia una pedina, con la faccia del proprio colore rivolta verso l'alto, su una casella ancora vuota. Una pedina imprigiona quelle avversarie in una o più direzioni (orizzontale, verticale e/o diagonale), rendendo le pedine imprigionate del proprio colore (ovvero capovolgendole). Othello - Strutture dati ed implementazione in Prolog

Othello - Strutture dati ed implementazione in Prolog Othello: Le Regole Il giocatore, al suo turno, è obbligato a giocare appoggiando una pedina in modo da imprigionare almeno un disco avversario. ESEMPIO: posizionando la pedina nera in b-4(“x” in figura), si girerà solo la pedina bianca in c-4. Othello - Strutture dati ed implementazione in Prolog

Othello - Strutture dati ed implementazione in Prolog Othello: Le Regole Vince chi, quando è stata giocata l'ultima mossa, ha più pedine dell'avversario. In caso di pari pedine, la partita è dichiarata patta. Nonostante la sua apparente semplicità, la complessità dell'Othello è elevatissima, superiore a quella della dama e poco inferiore a quella degli scacchi. Othello - Strutture dati ed implementazione in Prolog

Implementazione: Strutture dati Inizialmente è stata definita la scacchiera, come una lista di triple. Ogni tripla (X,Y,V) è composta dalle coordinate X,Y e dal valore della casella. La tavola vuota sarà quindi rappresentata come: [(1,1,0),(2,1,0),(3,1,0),…,(8,1,0),(1,2,0),…,(8,8,0)] Othello - Strutture dati ed implementazione in Prolog

Implementazione: Strutture dati I valori Assegnati ad ogni casella possono essere: 0  Casella Vuota 1  Casella con pedina Nera 2  Casella con pedina Bianca Le future operazioni di modifica del valore, l’unica modifica che sarà effettuata sulla struttura dati, una volta inizializzata,non influenzeranno l’ordine della lista. Othello - Strutture dati ed implementazione in Prolog

Implementazione: Rappresentazione grafica La scacchiera viene stampata a video come vediamo in figura I punti rappresentano caselle vuote (0) x e o rappresentano rispettivamente la presenza di una pedina nera (1) oppure bianca (2) (6,8,0) (5,8,2) (4,8,1) Othello - Strutture dati ed implementazione in Prolog

Implementazione: Inizializzazione Inizialmente viene generata la scacchiera: Lista di 64 terne (X,Y,Val), ordinate per righe Val viene posto a 0, casella vuota Vengono quindi posizionate le pedine iniziali Nelle coordinate d-4 e e-5 vengono posizionate le pedine nere (4,4,0)(4,4,1) (5,5,0)(5,5,1) in d-5 ed e-4 quelle bianche (4,5,0)(4,5,2) (5,4,0)(5,4,2) Othello - Strutture dati ed implementazione in Prolog

Implementazione: Turno del giocatore A questo punto inizia il gioco vero e proprio, la prima mossa spetta al giocatore con le pedine nere (umano): Viene disegnato il tavolo attuale Si controlla se il giocatore può muovere Si richiede la mossa in input Se la mossa inserita è corretta si esegue, altrimenti si ritorna al punto precedente Si passa il turno al giocatore che controlla le pedine bianche (computer oppure umano) Othello - Strutture dati ed implementazione in Prolog

Implementazione: Controllo Disponibilità mosse Per controllare se sono disponibili mosse: Comincio a considerare le mosse a partire dalla casella con coordinate a-1. Se la mossa è valida viene inserita tra le clausole del programma, altrimenti viene ignorata. Continua con le casella a-2,a-3,...,a-8,b-1,…,h-8 se trova una mossa disponibile la aggiunge Se giunti alla casella h-8, non ci sono mosse disponibili, siamo sicuri che il giocatore non può muovere (il turno passa all’avversario) Altrimenti, se sono disponibili mosse, ne viene richiesta una in input Othello - Strutture dati ed implementazione in Prolog

Implementazione: Esecuzione di una mossa Per eseguire una mossa: Posiziono la pedina sulla scacchiera Comincio dal basso  e giro le caselle del colore opposto contenute fra la pedina posizionata ed un’altra dello stesso colore Continuo in tutte le altre direzioni in questo ordine:        Othello - Strutture dati ed implementazione in Prolog

Implementazione: Esecuzione di una mossa Se la scacchiera non è cambiata dopo queste operazioni (la lista risultante è uguale a quella di partenza), allora la mossa effettuata non è valida: Se la mossa non è valida lo segnalo e chiedo una nuova mossa in input Altrimenti passo il turno al prossimo giocatore Othello - Strutture dati ed implementazione in Prolog

Implementazione: Turno del compuer A questo punto nel caso in cui la mossa passi al computer (modalità singolo giocatore): Viene disegnato il tavolo Si controlla se il computer può muovere Si decide quale mossa effettuare Si esegue la mossa Si passa il turno al giocatore che controlla le pedine nere Othello - Strutture dati ed implementazione in Prolog

Implementazione: Scelta della mossa Il computer non sceglie la mossa da effettuare in modo casuale, ma effettua la giocata che farà capovolgere più pedine avversarie: La scelta, avviene simulando tutte le mosse disponibili. A seconda del livello di difficoltà la simulazione procede per 1, 3 oppure 5 turni. Othello - Strutture dati ed implementazione in Prolog

Implementazione: Simulazione mosse La mossa da effettuare viene scelta simulando tutte le combinazioni possibili per 1,3 oppure 5 turni: Vengono generate tutte le mosse valide possibili Con un turno al massimo 64 Con tre turni 643 Con cinque turni 645 Ad ogni mossa viene assegnato un punteggio, corrispondente al numero di pedine avversarie girate Viene selezionata la mossa che porta al punteggio maggiore Se due mosse diverse portano allo stesso punteggio viene selezionata la prima rilevata, la visita della scacchiera avviene sempre in ordine (a-1,a-2,…a-8,b-1,…,h-8). Othello - Strutture dati ed implementazione in Prolog

Un esempio di utilizzo: human vs computer Simuliamo uno spezzone di partita, per far meglio capire come vengono gestite le varie fasi di gioco: E’ il turno del giocatore: Viene disegnato il tavolo attuale Othello - Strutture dati ed implementazione in Prolog

Un esempio di utilizzo: turno del giocatore Viene selezionata la clausola di programma possibile_muovere(ColorePedina,Tavolo) che verifica se esiste almeno una mossa valida nel tavolo per il giocatore, selezionando a sua volta: genera_possibili_mosse(X,Y,CPedina,Tavolo) che a partire dalla casella a-1 verifica se la mossa attuale è valida: se lo è la inserisco tra le clausole di programma utilizzando asserta(possibile_mossa(X,Y,ColorePedina) altrimenti continua senza inserire Othello - Strutture dati ed implementazione in Prolog

Un esempio di utilizzo: turno del giocatore Quando abbiamo analizzato tutta la scacchiera controlliamo se abbiamo generato delle mosse. In questo esempio sono disponibili le seguenti mosse: c-2, c-3, c-4, d-2, g-2, g-3, h-4. Othello - Strutture dati ed implementazione in Prolog

Un esempio di utilizzo: turno del giocatore Verificata la disponibilità di mosse, il programma ne richiede in input una al giocatore, che inserirà la mossa, in questo caso: c-4 (fig 1). L’input viene letto, e viene selezionata la clausola esegui_mossa(X,Y,CPedina,Tavolo,TavoloNew)questa: inserisce la pedina sulla scacchiera (fig 2) capovolge le pedine avversarie racchiuse tra la pedina appena poggiata e le altre già presenti nella scacchiera (fig 3). Fig.1 Fig.2 Fig.3 Othello - Strutture dati ed implementazione in Prolog

Un esempio di utilizzo: turno del computer A questo punto è il computer che deve muovere. I primi passi sono identici a quelli effettuati per il giocatore umano: disegno del tavolo e verifica dell’esistenza di almeno una mossa. Othello - Strutture dati ed implementazione in Prolog

Un esempio di utilizzo: turno del computer In questo caso non viene richiesto un input, ma viene lanciata la clausola simula(X,Y,CPedina,Livello,Lista), questa: valuta ogni possibile mossa valida, in questo esempio, ipotizziamo che sia stato selezionato il livello di difficoltà normale, quindi la simulazione continuerà per 3 turni. Saranno prese in considerazione (incluse fra le clausole di programma) man mano solo le mosse che incrementano il punteggio; vengono generate tutte le mosse a partire da b-4,b-5,b-7,d-6,f-5 (le mosse disponibili appena riscontrate) vengono simulate le risposte del giocatore umano e nuovamente, le future mosse del computer In totale vengono valutate circa 53 mosse (supponendo di trovare circa 5 mosse valide per ogni combinazione) Othello - Strutture dati ed implementazione in Prolog

Un esempio di utilizzo: turno del computer Arrivati al terzo turno,ogni volta che viene generata una mossa: Se è la prima, oppure ha punteggio maggiore rispetto all’ultima inserita, viene inserita tra le clausole di programma, altrimenti viene ignorata. La mossa che alla fine viene selezionata,sarà la prima mossa rilevata che porta al massimo punteggio (caselle avversarie girate), in quanto le altre che portano allo stesso punteggio vengono ignorate. Othello - Strutture dati ed implementazione in Prolog

Un esempio di utilizzo: turno del computer I Turno Mosse valutate: 5 II Turno – Mosse ≈ 52 III Turno – Mosse ≈ 53 In questo esempio vediamo come alla mossa b-4 viene temporaneamente assegnato il punteggio 2 (dato dalla mossa b-7 del terzo turno) Questo punteggio non è definitivo in quanto devono ancora essere controllate tutte le possibili risposte simulate (in verde) Othello - Strutture dati ed implementazione in Prolog

Un esempio di utilizzo: turno del computer In questo caso il computer sceglie come risposta b-4, in quanto porta anche dopo tre turni ad aver girato più caselle avversarie possibile. La mossa viene quindi eseguita, esattamente come accadeva nel turno del giocatore Othello - Strutture dati ed implementazione in Prolog

Othello - Strutture dati ed implementazione in Prolog Sviluppi futuri Implementare algoritmi di intelligenza artificiale più efficienti Non è stata posta attenzione alla maggiore importanza che hanno le caselle sugli angoli che una volta acquisite non possono più essere capovolte dall’avversario. Un altro stratagemma utilizzato dai giocatori professionisti è quello di massimizzare le mosse a propria disposizione e, contemporaneamente, minimizzare il numero delle mosse a disposizione dell'avversario. Othello - Strutture dati ed implementazione in Prolog

Othello - Strutture dati ed implementazione in Prolog Sviluppi futuri Nella nostra implementazione prima che un giocatore effettui la proprio mossa, il programma controlla l’esistenza di tutte le mosse disponibili. Si può sfruttare questa ricerca per visualizzare in tempo reale tali mosse (facilitando anche il gioco). Si possono escludere in modo automatico le mosse non valide digitate dal giocatore. Othello - Strutture dati ed implementazione in Prolog

Othello - Strutture dati ed implementazione in Prolog Conclusioni Utilizzare la programmazione logica rende semplice l’implementazione di giochi logici e la relativa intelligenza artificiale. Dal punto di vista prestazionale però si incontrano dei problemi; questo è dovuto al fatto che il prolog interpreta il codice, che quindi non viene ottimizzato (alto uso della memoria e cpu). Othello - Strutture dati ed implementazione in Prolog

Othello - Strutture dati ed implementazione in Prolog Riferimenti http://www.fngo.it Federazione Nazionale Gioco Othello Prothello (Prolog Othello), M.Purtonen, M.Komu, Jan 2003 Othello - Strutture dati ed implementazione in Prolog