Esercitazione CLIPS. Realizzazione di un Sistema a Regole per la Risoluzione del Problema dell'agricoltore



Documenti analoghi
Esercitazione CLIPS (I)

Corso di Laurea in INFORMATICA

CATALOGO E-COMMERCE E NEGOZIO A GRIGLIA

9. Urti e conservazione della quantità di moto.

B9. Equazioni di grado superiore al secondo

FPf per Windows 3.1. Guida all uso

INDICAZIONI E AVVERTENZE PRELIMINARI

Introduzione al MATLAB c Parte 2

Release 7.2 > Tailback. Utente web Parte II: manuale per l operatore

CTVClient. Dopo aver inserito correttamente i dati, verrà visualizzata la schermata del tabellone con i giorni e le ore.

Raccolta dei Requisiti con i Casi D'uso. Corso di Ingegneria del Software Anno Accademico 2012/13

Progetto di Ingegneria del Software 2. SWIMv2

COME CREARE UNA LEZIONE

Portale tirocini. Manuale utente Per la gestione del Progetto Formativo

Università degli Studi di Bari Dipartimento di Informatica. Laboratorio di ICSE. CLIPS - Parte 3 - Claudia d'amato claudia.damato@di.uniba.

MANUALE D'USO DEL PROGRAMMA IMMOBIPHONE

Esercitazione di Basi di Dati

WoWords. Guida all uso: creare ed utilizzare le frasi. In questa guida è descritto come creare ed utilizzare le frasi nel software WoWords.

Manuale Utente CONSERVAZIONE A NORMA Caricamento Singolo & Massivo electronic Document Keeper

ci sono più problemi che programmi esiste un problema che non si può risolvere con un programma

Gestione delle Presenze WorkFlow Manuale Operativo

PIANO DI EVACUAZIONE CLASSI PRIME PLESSO DUCA D AOSTA A.S.2009/2010

MODELLISTICA DI IMPIANTI E SISTEMI 2

Sistema Esperto per il Consiglio di vini data una portata

Capitolo Quarto...2 Le direttive di assemblaggio di ASM Premessa Program Location Counter e direttiva ORG

Gestione Turni. Introduzione

Corso di Laurea in INFORMATICA

REGOLAMENTO TOP TRUMPS CELEBS

Prof. Giuseppe Chiumeo. Avete già studiato che qualsiasi algoritmo appropriato può essere scritto utilizzando soltanto tre strutture di base:

Il database management system Access

Funzionamento di una casella di PEC integrata nel sistema di protocollo Titulus

Algoritmi di Ricerca. Esempi di programmi Java

File, Modifica, Visualizza, Strumenti, Messaggio

Esercitazione 1. Sistemi Informativi T. Versione elettronica: L01.2.DDLDMLbase.pdf

RILANCIO ALLARMI SU SWC701

2.7 La cartella Preparazioni e CD Quiz Casa

Università degli Studi di L Aquila. Facoltà di Ingegneria. Corso di Laurea in Ingegneria Elettronica Corso di Sistemi Informativi

Codifica: dal diagramma a blocchi al linguaggio C++

Come si può vedere, la regola è stata fatta in modo da spostare tutti i messaggi di Spam nella cartella del cestino.

Esercitazioni di Progettazione del Software. Esercitazione (Prova al calcolatore del 17 settembre 2010)

5. Fondamenti di navigazione e ricerca di informazioni sul Web

ASSOCIAZIONE ITALIANA EDITORI

GUIDA OPERATIVA APPLICAZIONE PER LA VISUALIZZAZIONE DELLE FORNITURE DEI DATI DEI FABBRICATI MAI DICHIARATI CON ACCERTAMENTO CONCLUSO

GCEWEB Denunce mensili in WEB

RISOLUTORE AUTOMATICO PER SUDOKU

Struttura logica di un programma

Il sapere tende oggi a caratterizzarsi non più come un insieme di contenuti ma come un insieme di metodi e di strategie per risolvere problemi.

Logging in Python. Linguaggi dinamici A.A. 2010/2011 1

ESERCIZI - SERIE N. 5

Sistema operativo. Sommario. Sistema operativo...1 Browser...1. Convenzioni adottate

BALDAZZI STYL ART S.p.A. - Via dell artigiano Pianoro (BO) Tel Fax info@baldazzi.com

HikVision. Creazione e gestione di collegamenti con sistemi TVCC HikVision DVR/Network Camera

APP RIO8 APP PER LA CONFIGURAZIONE GUIDA PER L UTENTE. Omniabit s.r.l. Via Val Camonica 11, Milan, Italy support@omniabit.

GUIDA ALLA CONFIGURAZIONE E ALL UTILIZZO

Gestore Comunicazioni Obbligatorie - VARDATORI - Progetto SINTESI Dominio Provinciale Modulo Applicativo:COB Procedura VARDATORI

11/02/2015 MANUALE DI INSTALLAZIONE DELL APPLICAZIONE DESKTOP TELEMATICO VERSIONE 1.0

Algoritmi e Strutture Dati

MODULO 5 ACCESS Basi di dati. Lezione 4

Indice generale. OOA Analisi Orientata agli Oggetti. Introduzione. Analisi

MANUALE EDICOLA 04.05

BALDAZZI STYL ART S.p.A. - Via dell artigiano Pianoro (BO) Tel Fax info@baldazzi.com

PSNET UC RUPAR PIEMONTE MANUALE OPERATIVO

Costruite un grafo che rappresenti la situazione del torneo (in modo che siano rappresentate le squadre e le partite). Che tipo di grafo ottenete?

REGOLAMENTO KONG THE 8 TH WONDER OF THE WORLD

CREAZIONE ARCHIVI 2014

Istruzioni per la configurazione di IziOzi

1. Piattaforma esercizi Dati anagrafici Tipologia Attività Dati input Riepilogo Giochi...

Procedura per l abbinamento tenico-atleta

WBS-01 Guida rapida alla configurazione

GUIDA AL PRONTUARIO MOBILE

Intelligenza Artificiale I

DAL DIAGRAMMA AL CODICE

CREARE UNA LIBRERIA IN C

INSTALLAZIONE NUOVO CLIENT SUITE IPSOA (04 Novembre 2014)

Algoritmi e Strutture Dati

ATOLLO BACKUP GUIDA INSTALLAZIONE E CONFIGURAZIONE

Funzioni in C. Violetta Lonati

SPECTER OPS. L'obiettivo del giocatore agente è quello che il suo agente completi 3 su 4 missioni obiettivo qualsiasi

FOXWave Gestione gare ARDF IZ1FAL Secco Marco Sezione ARI BIELLA

IL FANTABASKET DEDICATO AL CAMPIONATO DI BASKET A2 FEMMINILE

Esercizio 2. Client e server comunicano attraverso socket TCP

Tutorial per l installazione del J2SE 6 e configurazione del sistema operativo

Alcuni consigli per un uso di base delle serie di dati automatiche in Microsoft Excel

REGOLAMENTO GLADIATOR

SIEMENS GIGASET S450 IP GUIDA ALLA CONFIGURAZIONE EUTELIAVOIP

Esercizio su MT. Svolgimento

SCENARIO. Personas ALICE Lucchin / BENITO Condemi de Felice. All rights reserved.

MANUALE D USO DELLA PIATTAFORMA ITCMS

1. RETI INFORMATICHE CORSO DI LAUREA IN INGEGNERIA INFORMATICA SPECIFICHE DI PROGETTO A.A. 2013/ Lato client

Manuale Modulo FATTURE FORNITORI

FORMEZ - Centro di Formazione e Studi. Banca dati Consiglio di Stato 2010

Uso di base delle funzioni in Microsoft Excel

Invio SMS. DM Board ICS Invio SMS

Installazione e caratteristiche generali 1

Corso di formazione assicurativa - 60 ore. (a norma Reg. IVASS n.6/2014) Guida all utilizzo

Guida rapida all uso di Moodle per gli studenti

ADEMPIMENTI FORMATIVI IVASS

Paghe Scaglioni. Fascia di reddito. Fascia di reddito

H1 Hrms Gestione eventi/scadenze automatiche

Informatica 3. Informatica 3. LEZIONE 10: Introduzione agli algoritmi e alle strutture dati. Lezione 10 - Modulo 1. Importanza delle strutture dati

Transcript:

Esercitazione CLIPS Realizzazione di un Sistema a Regole per la Risoluzione del Problema dell'agricoltore 1

Dati: IL PROBLEMA DELL AGRICOLTORE, IL CAVOLO, LA PECORA, IL LUPO Situazione Iniziale: Sulla riva di un fiume ci sono un agricoltore, un cavolo, una pecora ed un lupo. Situazione Finale: Portare i quattro protagonisti sull'altra riva del fiume. Vincoli: - L'agricoltore può attraversare il fiume portando con se solo un solo elemento per volta - La pecora non può stare da sola nè con il cavolo nè con il lupo. Trovare: La sequenza di mosse che l agricoltore deve compiere per raggiungere il suo scopo. 2

Concettualizzazione del Problema Ci sono fatti da rappresentare? Se si, quali sono? Come rappresentare i fatti? Definire la strategia solutiva del problema Stabilire la struttura delle regole in base alla strategia ed alla eventuale rappresentazione dei fatti stabilita 3

Strategia Solutiva RIVA VICINA A C L P _ C L _ A C L _ L _ A _ L P _ P A P RIVA LONTANA A P _ P A C _ P _ C A C L C L _ A C L P 4

Base di Conoscenza: Fatti I fatti in questo problema rappresenteranno gli stati legali, ossia le configurazioni che soddisfano i vincoli del problema (che possono essere accettate in ingresso) Ci sarà bisogno di: 1.Un template per memorizzare le configurazioni. Esso sarà costituito da: Nome (A P L-C) ;contiene info su ogni personaggio Posizione ( riva-vicina riva-lontana ) L informazione relativa alla posizione risulta necessaria nella scelta della regola da applicare. 5

Base di Conoscenza: Fatti I fatti in questo problema rappresentano le configurazioni (stati legali) del problema. Utilizzo di: 1.Un template per memorizzare le configurazioni. Esso sarà costituito da 4 slot contenente l informazione relative ad ogni personaggio: Nome (Agricoltore Cavolo Lupo- Pecora) Posizione ( riva-vicina riva-lontana ) L informazione relativa alla posizione risulta necessaria nella scelta della regola da applicare. 6

Base di Conoscenza: Fatti (deftemplate configurazione "Stato del gioco" (slot agricoltore (type STRING) (default "sulla-riva-vicina")) (slot cavolo (type STRING) (default "sulla-riva-vicina")) (slot pecora (type STRING) (default "sulla-riva-vicina")) (slot lupo (type STRING) (default "sulla-riva-vicina"))) 7

Base di Conoscenza: Fatti 1. Un template per memorizzare la configurazione iniziale. Esso sarà costituito da un solo slot contenente la configurazione iniziale scelta dall utente: (deftemplate inizia Configurazione iniziale" (slot config_iniziale (type SYMBOL) (default ACPL))) 8

Base di Conoscenza: Fatti 1. Un insieme di possibili configurazioni legali in cui i personaggi possono trovarsi. (deffacts stati_legali "Stati validi nel gioco (stato ACPL) ; Tutti i personaggi sono sulla riva 1 (stato ) ; Nessun personaggio è sulla riva 1 (stato A_P_) ; Agricoltore e pecora sulla riva 1 ; Cavolo e Lupo sulla riva 2 (stato _C_L) ; Cavolo e Lupo sulla riva 2 ; Agricoltore e pecora sulla riva 2 (stato A_PL)... (stato _C ) (stato AC_L) (stato L) (stato ACP_) (stato P_)) 9

Base di Conoscenza: Regole Le regole che si andranno a definire agiranno sulla configurazione iniziale inserita dall utente. La loro funzione sarà quella di: testare la configurazione inserita rispetto alle 10 legali eventualmente, eseguire azioni che, cambiando lo stato dei personaggi, portino alla configurazione finale Si segnala e ferma il processo nel caso in cui la configurazione in input non risulti essere esatta 10

Se i quattro personaggi sono tutti sulla riva vicina, allora l agricoltore può andare sulla riva lontana e portare con sé la pecora. (defrule regola1 )?indice_conf1 <- (configurazione (agricoltore "sulla-riva-vicina") (cavolo "sulla-riva-vicina") (pecora "sulla-riva-vicina") (lupo "sulla-riva-vicina")) (printout t "Trasborda la pecora" crlf) (retract?indice_conf1) (assert(configurazione(agricoltore "sulla-riva-lontana") (cavolo "sulla-riva-vicina") (pecora "sulla-riva-lontana") (lupo "sulla-riva-vicina"))) 11

Se l agricoltore e la pecora sono sulla riva lontana allora l agricoltore può tornare sulla riva vicina (sarebbe inutile la regola che, in questa situazione porti con sé la pecora). (defrule regola2?indice_conf2 <- (configurazione (agricoltore "sulla-riva- lontana") (cavolo "sulla-riva-vicina") (pecora "sulla-riva-lontana") (lupo "sulla-riva-vicina")) (printout t Ritorna alla riva vicina" crlf) (retract?indice_conf2) (assert(configurazione(agricoltore "sulla-riva-vicina") (cavolo "sulla-riva- vicina ") (pecora "sulla-riva-lontana") (lupo "sulla-riva-vicina")))) 12

Se l agricoltore è sulla riva vicina con il lupo e il cavolo, allora l agricoltore può andare sulla riva lontana portando con sé il lupo. (defrule regola3?indice_conf3 <- (configurazione (agricoltore "sulla-riva- lontana") (cavolo "sulla-riva-vicina") (pecora "sulla-riva-lontana") (lupo "sulla-riva-vicina")) (printout t Trasborda il lupo" crlf) (retract?indice_conf3) (assert(configurazione(agricoltore "sulla-riva-lontana") (cavolo "sulla-riva-vicina") (pecora "sulla-riva-lontana") (lupo "sulla-riva-lontana")))) 13

ma anche (defrule regola4?indice_conf4 <- (configurazione (agricoltore "sulla-riva- lontana") (cavolo "sulla-riva-vicina") (pecora "sulla-riva-lontana") (lupo "sulla-riva-vicina")) (printout t Trasborda il cavolo" crlf) (retract?indice_conf4) (assert(configurazione(agricoltore "sulla-riva-lontana") (cavolo "sulla-riva-lontana") (pecora "sulla-riva-lontana") (lupo "sulla-riva-vicina")))) 14

Se l agricoltore la pecora e il lupo (o il cavolo) sono sulla riva lontana allora l agricoltore può andare sulla riva vicina portando con sé la pecora. (defrule regola5?indice_conf5 <- (configurazione (agricoltore "sulla-riva- lontana") (cavolo "sulla-riva-vicina") (pecora "sulla-riva-lontana") (lupo "sulla-riva-lontana")) (printout t Riporta indietro la pecora" crlf) (retract?indice_conf5) (assert(configurazione(agricoltore "sulla-riva-vicina") (cavolo "sulla-riva-vicina") (pecora "sulla-riva-vicina") (lupo "sulla-riva-lontana")))) 15

(defrule regola6?indice_conf6 <- (configurazione (agricoltore "sulla-riva- lontana") (cavolo "sulla-riva-lontana") (pecora "sulla-riva-lontana") (lupo "sulla-riva-vicina")) (printout t Riporta indietro la pecora" crlf) (retract?indice_conf6) (assert(configurazione(agricoltore "sulla-riva-vicina") (cavolo "sulla-riva-lontana") (pecora "sulla-riva-vicina") (lupo "sulla-riva-vicina")))) 16

Se solo il lupo è sulla riva lontana allora l agricoltore può andare sulla riva lontana portando con sé il cavolo. (defrule regola7?indice_conf7 <- (configurazione (agricoltore "sulla-riva-vicina") (cavolo "sulla-riva-vicina") (pecora "sulla-riva-vicina") (lupo "sulla-riva-lontana")) (printout t Trasborda il cavolo" crlf) (retract?indice_conf7) (assert(configurazione(agricoltore "sulla-riva-lontana") (cavolo "sulla-riva-lontana") (pecora "sulla-riva-vicina") (lupo "sulla-riva-lontana")))) 17

Se, invece, è solo il cavolo ad essere sulla riva lontana allora l agricoltore può andare sulla riva lontana portando con sé il lupo. (defrule regola8?indice_conf8 <- (configurazione (agricoltore "sulla-riva-vicina") (cavolo "sulla-riva-lontana") (pecora "sulla-riva-vicina") (lupo "sulla-riva-vicina")) (printout t Trasborda il lupo" crlf) (retract?indice_conf8) (assert(configurazione(agricoltore "sulla-riva-lontana") (cavolo "sulla-riva-lontana") (pecora "sulla-riva-vicina") (lupo "sulla-riva-lontana")))) 18

Se c è solo la pecora sulla riva vicina allora l agricoltore può andare sulla riva vicina. (defrule regola9?indice_conf9 <- (configurazione (agricoltore "sulla-riva-lontana") (cavolo "sulla-riva-lontana") (pecora "sulla-riva-vicina") (lupo "sulla-riva-lontana")) (printout t Ritorna alla riva vicina" crlf) (retract?indice_conf9) (assert(configurazione(agricoltore "sulla-riva-vicina") (cavolo "sulla-riva-lontana") (pecora "sulla-riva-vicina") (lupo "sulla-riva-lontana")))) 19

Se l agricoltore è sulla riva vicina con la sola pecora allora l agricoltore può andare sulla riva lontana portando con sé la pecora. (defrule regola10?indice_conf10 <- (configurazione (agricoltore "sulla-riva-vicina") (cavolo "sulla-riva-lontana") (pecora "sulla-riva-vicina") (lupo "sulla-riva-lontana")) (printout t Trasborda la pecora" crlf) (retract?indice_conf10) (assert(configurazione(agricoltore "sulla-riva-lontana") (cavolo "sulla-riva-lontana") (pecora "sulla-riva-lontana") (lupo "sulla-riva-lontana")))) 20

Definiamo la regola per iniziare a giocare (defrule chiedi_configurazione_iniziale (declare (salience 10000)) (printout t crlf"**************************" crlf crlf "Inserisci la configurazione iniziale:" crlf crlf) (printout t "L'agricoltore è sulla riva vicina? (S/N): ") (bind?agric (read)) (if (eq?agric S) then (bind?temp_a A) else (bind?temp_a _)) (printout t "Il cavolo è sulla riva vicina? (S/N): ") (bind?cav (read)) (if (eq?cav S) then (bind?temp_c C) else (bind?temp_c _)) (printout t "La pecora è sulla riva vicina? (S/N): ") (bind?pec (read)) (if (eq?pec S) then (bind?temp_p P) else (bind?temp_p _)) (printout t "Il lupo è sulla riva vicina? (S/N): ") (bind?lup (read)) (if (eq?lup S) then (bind?temp_l L) else (bind?temp_l _)) (bind?config (sym-cat?temp_a?temp_c?temp_p?temp_l)) (assert (inizia (config_iniziale?config))) (assert (config inesatta)) (printout t crlf crlf)) 21

Definiamo la regola per controllare la configurazione di input (defrule controlla_input (declare (salience 9000))?indice <- (inizia (config_iniziale?conf_iniz)) (stato?conf_iniz)?ind <- (config inesatta) (retract?indice?ind) (assert (config esatta)) (if (eq?conf_iniz ACPL) then (assert (configurazione)) else (if (eq?conf_iniz ) then (assert (configurazione (agricoltore "sulla-riva-lontana") (cavolo "sulla-riva-lontana") (pecora "sulla-riva-lontana") (lupo "sulla-riva-lontana"))) else... (printout t "Le mosse dell'agricoltore sono: " crlf crlf)) 22

Definiamo la regola per segnalare che la configurazione iniziale è inesatta (defrule ritenta "Se la configurazione data in input è errata (declare (salience 8500))?indice <- (config inesatta) (retract?indice) (printout t crlf "La configurazione iniziale data in input risulta illegale!!!" crlf crlf crlf) (printout t "Vuoi riprovare? (S/N): ") (bind?risposta (read)) (if (eq?risposta S) then (reset) else (printout t crlf crlf"**************" crlf crlf))) 23

Definiamo la regola per continuare a giocare dopo il termine di una sessione di gioco (defrule continua_gioco "L'utente vuole giocare ancora? (declare (salience -10000))?indice <- (config esatta) (retract?indice) (printout t crlf crlf crlf "Vuoi giocare ancora? (S/N): ") (bind?risposta(read)) (if (eq?risposta S) then (reset) else (printout t crlf "******************" crlf crlf))) 24