Pomoc przy wyborze dania na obiad - system ekspertowy.
Autor:Tomasz Bańka (140302)
Projekt z kursu:Metody i algorytmy sztucznej inteligencji, ARE3513
Prowadzący:dr inż. Witold Paluszyński
Data:15.06.2008
Jest wiele osób nie mających pomysłu co można zrobić na obiad, ze składników które posiadają. Jest to dość częsty problem studentów, którzy nie mają zazwyczaj czasu na wertowanie książek kucharskich, szukając odpowiedniego przepisu. Z pomocą może im przyjść owy system napisany przeze mnie.Celem projektu było napisanie systemu, który doradza wybór dania na obiad. Program napisany w systemie ekspertowym CLIPS. Aby uruchomić program należy załadować plik danie_glowne.clp, następnie użytkownik podaje listę składników które posiada, określa swoje preferencje (typ dania, smak, stopień trudności) następnie otrzyma wynik w postaci przepisu lub nawet kilku przepisów, w zależności od ilości podanych składników. Dodatkowe informacje, testy są umieszczone poniżej.
The help in choice of dish on dinner - the expert system.
Author:Tomasz Bańka (140302)
This report has been prepared as a requirement for the course:Methods and algorithms of artificial intelligence, ARE3513
Conducted by:dr eng. Witold Paluszyński
Date:15.06.2008
Many persons have not idea what they can make on dinner, from components which they possess. Usually, it is students' problem, which have not enough time on flipping through cook's books, look for suitable recipe. System written by me, can help them in this. Writing the system, which advises the choice of dish on dinner, was the aim of this project. Program was written in CLIPS expert system. To start program you should load file danie_glowne.clp. The user writes down the list of components, which it possesses and defines his preferences (the type of dish, taste, rank of difficulty). As result he will receive recipe or even several recipes, it dependence from quantity of passed components. Additional information, are placed below.
1) Cel zadania:
Celem projektu było napisanie systemu doradczego. Ma on za zadanie doradzać, jakie dane wybrać do przygotowania na obiad.
Wybór ten jest zależny od:
- dostępności produktów,
- upodobań użytkownika,
- stopnia trudności wykonania,
- rodzaj dania,
Podając podstawowe informacje (wymienione powyżej) otrzymają wynik w
postaci opisu dania wraz z numerem przepisu który już można znaleźć łatwo w książce
2) Zastosowana metoda:
System zaimplementowany został przy użyciu narzędzia CLIPS (C Language
Integrated Production System) służącego do tworzenia systemów ekspertowych.
CLIPS został stworzony przez NASA/Johnson Space Center. Program w nim napisany
składa się z reguł oraz faktów. System CLIPS jest dostępny na zasadach public
domain dla dowolnych zastosowań.
3) Opis implementacji:
Program napisany w CLIPS-ie do prawidłowego działania wymaga określenia pewnej ilości reguł, które na podstawie wprowadzonych informacji (faktów) przez użytkownika oraz zbioru faktów początkowych (baza wiedzy programu, wiedza ekspercka), tworzy kolejne fakty i na podstawie nich, obierając odpowiednią strategie działania, może przedstawić wynik końcowy, będący zazwyczaj konkretnym faktem wiedzy eksperckiej.
W projekcie, przeze mnie napisanym, baza wiedzy eksperckiej zawiera ok. 200 reguł spośród których, na podstawie informacji od użytkownika, zostaje wyselekcjonowana konkretna (niekiedy kilka) reguła spełniająca odpowiednie założenia.
Program, w moim przypadku, składa się z 3 plików.
- wybor_posilku.clp (zawiera główną część programu, cały "interfejs" zadający pytania, i część odpowiedzialną za budowę kolejnych reguł)
- baza_wiedzy1.clp (zawiera wstępnie zdefiniowane reguły jako wiedzę ekspercką)
- baza_wiedzy2.clp
Aby uruchomić program wystarczy w CLIPS-ie załadować plik wybor_posilku.clp, ponieważ bazy wiedzy są doładowywane w trakcie działania programu.
4) Przykłady działania programu:
W programie nie używamy polskich znaków, a przy podawaniu produktów należy, w przypadku dwuwyrazowych elementów, użyć podkreślnika.
Po uruchomieniu podajemy listę artykułów, a następnie określamy nasze preferencje co do smaku, typu potrawy jak i poziomu trudności jej przygotowania.
Przykład 1.
CLIPS> (reset)
CLIPS> (run)
Defining deffacts: wiedza1
Defining deffacts: wiedza2
Wczytuje dane
******************************************************
SYSTEM REGULOWY - WYBOR DANIA
autor: Tomasz Banka
******************************************************
UWAGA przy podawaniu nazw skladnikow uzywaj podkreslnika do oddzielenia slow:
np.: mieso mielone -> mieso_mielone
Aby zakonczyc wpisywanie skladnikow nalezy wpisac koniec lub stop.
Podaj skladniki ktore posiadasz (wymieniaj po enterze): pomidory
Podaj skladniki ktore posiadasz (wymieniaj po enterze): ogorki
Podaj skladniki ktore posiadasz (wymieniaj po enterze): truskawki
Podaj skladniki ktore posiadasz (wymieniaj po enterze): smietana
Podaj skladniki ktore posiadasz (wymieniaj po enterze): koniec
Podaj sposob przygotowania (smazone, gotowane, pieczone, inne): inne
Podaj oczekiwany smak potrawy (pikantny, wytrawny, lagodny, slodki, inne):
slodki
Podaj stopien trudnosci (obojetne, latwy, trudny, sredni): latwy
-----------------------------------
Z tych skladnikow proponuje zrobic: 2) Truskawki na slodko ze smietana.
-----------------------------------
Z tych skladnikow proponuje zrobic: 1) Brak dopasowania dla takiego zestawu. Nie
ma podsatwy dania.
-----------------------------------
Znaleziono 2 dopasowanie(a) do podanych kryteriow.
-----------------------------------
CLIPS>
Obrazuje on przypadek gdy nie podamy żadnej podstawy do wyboru obiadu (podstawą mogą być ziemniaki, ryż, kasza, makaron). Jednakże zwrócił pewne danie, możliwe do wykonania, lecz jest to przypadek który nie nadaje się na obiad.
Istnieją sytuacje gdy mimo podania składników nie zostanie wygenerowany żaden przepis.
Przykład 2.
******************************************************
SYSTEM REGULOWY - WYBOR DANIA
autor: Tomasz Banka
******************************************************
UWAGA przy podawaniu nazw skladnikow uzywaj podkreslnika do oddzielenia slow:
np.: mieso mielone -> mieso_mielone
Aby zakonczyc wpisywanie skladnikow nalezy wpisac koniec lub stop.
Podaj skladniki ktore posiadasz (wymieniaj po enterze): kasza
Podaj skladniki ktore posiadasz (wymieniaj po enterze): schab
Podaj skladniki ktore posiadasz (wymieniaj po enterze): pomidor
Podaj skladniki ktore posiadasz (wymieniaj po enterze): ogorek
Podaj skladniki ktore posiadasz (wymieniaj po enterze): groszek
Podaj skladniki ktore posiadasz (wymieniaj po enterze): koniec
Podaj sposob przygotowania (smazone, gotowane, pieczone, inne): smazone
Podaj oczekiwany smak potrawy (pikantny, wytrawny, lagodny, slodki, inne):
pikantny
Podaj stopien trudnosci (obojetne, latwy, trudny, sredni): sredni
-----------------------------------
Z tych skladnikow proponuje zrobic: 22) Kasza ze smazonym kotletem schabowym do
tego salatka wazywna
-----------------------------------
Z tych skladnikow proponuje zrobic: 27) Kasza z miesnymi dodatkami na ostro (smazone)
-----------------------------------
Znaleziono 2 dopasowanie(a) do podanych kryteriow.
-----------------------------------
Dla tego przypadku widzimy, że przy takim zestawieniu produktów i określonych preferencjach, otrzymaliśmy 2 odpowiedzi. Gdzie w pierwszej mamy wykorzystane warzywa lecz dla drugiej już nie. System dopasował wszystkie możliwe przepisy do podanych kryteriów, niekoniecznie wykorzystując wszystkie składniki. Dzieje się tak dlatego gdyż program ma nam doradzić co możemy z wymienionych składników zrobić, a ostateczna decyzja zależy już od użytkownika.
Przykład 3
******************************************************
SYSTEM REGULOWY - WYBOR DANIA
autor: Tomasz Banka
******************************************************
UWAGA przy podawaniu nazw skladnikow uzywaj podkreslnika do oddzielenia slow:
np.: mieso mielone -> mieso_mielone
Aby zakonczyc wpisywanie skladnikow nalezy wpisac koniec lub stop.
Podaj skladniki ktore posiadasz (wymieniaj po enterze): makaron
Podaj skladniki ktore posiadasz (wymieniaj po enterze): ziemniaki
Podaj skladniki ktore posiadasz (wymieniaj po enterze): ryba
Podaj skladniki ktore posiadasz (wymieniaj po enterze): jajka
Podaj skladniki ktore posiadasz (wymieniaj po enterze): pomidory
Podaj skladniki ktore posiadasz (wymieniaj po enterze): salata
Podaj skladniki ktore posiadasz (wymieniaj po enterze): kasza
Podaj skladniki ktore posiadasz (wymieniaj po enterze): schab
Podaj skladniki ktore posiadasz (wymieniaj po enterze): koniec
Podaj sposob przygotowania (smazone, gotowane, pieczone, inne): pieczone
Podaj oczekiwany smak potrawy (pikantny, wytrawny, lagodny, slodki, inne):
pikantny
Podaj stopien trudnosci (obojetne, latwy, trudny, sredni): obojetne
-----------------------------------
Z tych skladnikow proponuje zrobic: 27) Kasza z miesnymi dodatkami na ostro
-----------------------------------
Z tych skladnikow proponuje zrobic: 82.2) Kasza z jajkiem sadzonym na ostro
-----------------------------------
Z tych skladnikow proponuje zrobic: 25.2) Kasza i ryba pieczona z rusztu
-----------------------------------
Z tych skladnikow proponuje zrobic: 8) Ziemniaki pieczone z miesnymi dodatkami
na ostro
-----------------------------------
Z tych skladnikow proponuje zrobic: 82.2) Ziemniaki z jajkiem sadzonym na ostro
-----------------------------------
Z tych skladnikow proponuje zrobic: 21.1) Zapiekanka ziemniaczana z salatka
rybna
-----------------------------------
Z tych skladnikow proponuje zrobic: 6.2) Ziemniaki gotowane i ryba pieczona z
rusztu
-----------------------------------
Z tych skladnikow proponuje zrobic: 82.2) Makaron z jajkiem zapiekany
-----------------------------------
Z tych skladnikow proponuje zrobic: 39.2) Makaron gotowany i ryba pieczona z
rusztu
-----------------------------------
Znaleziono 9 dopasowanie(a) do podanych kryteriow.
-----------------------------------
Tutaj natomiast przy podaniu kilku składników podstawowych i sporej ilości dodatków, widzimy że jest już możliwość skomponowania bardzo wielu przepisów. Im więcej mamy do dyspozycji tym więcej jesteśmy w stanie zrobić. Podając jako stopień trudności, opcję obojętne, otrzymamy listę wszystkich możliwych przepisów bez uwzględnienia tego kryterium.
5) Dodatkowe wyniki:
Program był testowany zarówno przeze mnie jak i przez osoby postronne (głównie przez innych studentów z mojego otoczenia). W trakcie tych testów wynikło kilka niedociągnięć które systematycznie starałem się poprawiać, głównie była to lista artykułów. Jednak większość osób stwierdzała poprawność działania programu i usatysfakcjonowanie z podsuwanych pomysłów w wyniku działania. W skutek uwag podsuwanych przez innych użytkowników powstała lista artykułów (które najczęściej się pojawiały) i zbiór przepisów, na których podstawie można jeszcze dopisać sporą książkę kucharską (jako dodatek do programu), która zawierałaby przepisy ponumerowane według schematu przy odpowiedziach.
6) Wnioski:
Program działa poprawnie, lecz jak wiadomo, ile osób tyle pomysłów na dania i listy produktów. Więc jest to dobry zalążek dla bardzo sporej bazy wiedzy na ten temat. Program może być w dalszym ciągu rozbudowywany poprzez dopisywanie kolejnych elementów do bazy wiedzy. Dodatkowo można jeszcze wprowadzić dodatkowe ograniczenia, takie jak np. koszt dania, okazja przy jakiej można serwować dany posiłek, oraz wiele innych kryteriów. Ograniczeniem jest tylko wyobraźnia osoby tworzącej aplikację. W przypadku listy, która już została utworzona, występują sytuacje w których nie będzie dopasowania. Aby uwzględnić wszystkie możliwe przypadki, to należałoby obecną już bazę danych rozbudować znacznie bardziej. Bardzo ciężko jest przy tylu możliwościach wygenerować wszystkie kombinacje. Program spełnia jednak założenia które zostały postawione na początku projektu.
7) Materiały źródłowe:
- wykłady dotyczące systemów regułowych (pliki pdf zestrony głównej prowadzącego)
- dokumentacja CLIPS (głównie help i materiałyze strony prowadzącego)
- dodatkowe materiały znalezione w internecie dotyczące systemów regułowych,
- "Książka kucharska - Smaczny Krążek", wydawnictwo Pruszyński
- wiedza i doświadczenie własne,
- uwagi i sugestie użytkowników testujących program.
Autor: Tomasz Bańka (140302)