230 likes | 524 Views
Kecerdasan Buatan / Artificial Intelligence. Logic Programming. Imam Cholissodin, S.Si., M.Kom. Pokok Bahasan. Sekilas Inference FOL ( Optional ) Logic Programming Logika Predikat Bahasa Deklaratif Pemrograman Prolog Fakta (Clauses) Aturan (Rules) Klausa (Clauses) Variabel Query
E N D
KecerdasanBuatan/ Artificial Intelligence Logic Programming Imam Cholissodin, S.Si., M.Kom.
Pokok Bahasan • Sekilas Inference FOL (Optional) • Logic Programming • Logika Predikat • Bahasa Deklaratif • Pemrograman Prolog • Fakta (Clauses) • Aturan (Rules) • Klausa (Clauses) • Variabel • Query • Implementasi Prolog (The Next) • Latihan Individu + Tugas Kelompok
Logic Programming • SejarahSingkat • PemrogramanLogikadiperkenakanoleh Robert Kowalski padatahun 1974 • AlgoritmatersusunatasLogikadankontrol • Prolog • Merupakanpemrogramandalamlogika • Bahasapemrograman yang menggunakanpemrogramanlogikauntkkomputasi • Diperkenalkanoleh Alain Colmerauerpadatahun 1970 an • ImprementasiProlog yang digunakan SWI Prolog versi 5.6.32 • Bebasmelakukan download di URL: http://www.swi-prolog.org/ • Dikembangkanoleh Jan Wielenmaker, Universitas Amsterdam • Ada berbagaiimplementasi lain seperti: SICStus Prolog, XSB, dsb.)
Logic Programming • PROLOG adalah kependekan dari PROgramming in LOGic, yang berarti pemrograman. • Pemrograman Prolog menggunakan bahasa deklaratif, dimana pemrogram memberi fakta dan aturan untuk selanjutnya diselesaikan oleh Prolog secara deduktif sehingga menghasilkan suatu kesimpulan. • Hal ini berbeda dengan bahasa prosedural seperti Pascal, Fortran, C, atau yang sejenis, dimana pemrogram memberi perintah atau penugasan untuk memecahkan persoalan langkah demi langkah. • Prolog menggunakan relasi, bukan fungsi sehingga sangat sesuai untuk implementasi sistem pakar.
Logic Programming • Contoh : Pemrograman Logika • Temukan seluruh elemen yang beranggotakan dua list yang diberikan • List: [a1, a2, ..., an] atau [a1 | [a2..., an]] a1disebutdengan head dari [a1, a2, ..., an] [a2, ..., an] disebut tail dari [a1, a2, ..., an] • Contoh: [1,2,3,4,5=[1|[2,3,4,5]] • Kita memerlukan definisi pada saat X merupakan member dari suatu list. • JikaX adalahsebagai head-nya, makajawabannyapositif (benar) member(X,[X|List]). • Sebaliknya, lakukanpengecekanapakah X adalah member dari tail. member(X,[Y|List]) member(X,List). • Maka dalam bahasa Prolog bisa dituliskan terurut sebagaimana berikut: member(X|[X|List]). member(X,[Y|List]):-member(X,List). member_both(X,L1,L2):-member(X,L1),member(X,L2). • Kemudian jalankan program untuk memecahkan permasalahan ?-member_both(X,[1,2,3],[2,3,4,5]).
Logika Predikat • Logikapredikat (kalkuluspredikat) merupakanbagiandarikomputasilogika yang jugamencakuplogikaproposisional, dimanafaktadanaturandinyatakanmelaluipredikatseperti: lelaki(Joko) . // fakta menikah(Joko, Tuti) . // fakta ∀x ∀y [menikah(x,y) ∧ lelaki(x)] → ~lelaki(y) . // aturan ∀y ∃x [orang(y) → ibu(x,y) . // aturan • KalimatpertamamenunjukkanadanyafaktabahwaJokoadalahseoranglelaki. • kalimatkeduamenyatakanbahwaJokomenikahdenganTuti. • Kalimatketigadankeempatmenunjukkansuatuaturanataukaidah yang umumberlaku. • Simbolpredikat yang digunakandalamkalimat-kalimattersebutadalahlelaki, menikah, orang, danibu yang seringdisebutsebagairelasi, sedangkanJokodanTutidisebutsebagaisimbolkonstanta.
Bahasa Deklaratif • Sebagaibuktibahwa Prolog merupakanbahasadeklaratifadalahdalammenyatakanfaktadanaturansepertiberikut: • Jikainginmenyatakanbahwa“PrawiroadalahbapakdariJoko”, makadalamProlog dituliskansebagai: bapak(prawiro, joko). • Jikainginmenerangkansuatukaidahbahwa A adalahkakekdari Z makaharusdibuatdahululogikadalambahasa Indonesia sehinggamenjadisuatuaturansepertiberikut: A adalahkakekZ jika A adalahbapakdari X dan X adalahbapak Z atau A adalahkakekZ jika A adalahbapakdari X dan X adalahibuZ dalamProlog dituliskansebagai: kakek(A,Z) :- bapak(A,X), bapak(X,Z). atau kakek(A,Z) :- bapak(A,X), ibu(X,Z).
Pemrograman Prolog • Faktaadalahsuatukenyataanataukebenaran yang diketahui, danmenyatakanhubungan (relasi) antaraduaataulebihobyek. Faktadapat pula menunjukkansifatsuatuobyek. Contoh : bapak(prawiro, joko). merah(darah). asin(garam). • Aturanmerupakanlogika yang dirumuskandalambentukrelasisebab-akibatdanhubunganimplikasi. Misalnyadapatdibuataturanbahwajika A adalahbapakdari X dan X adalahbapakatauibudari Z makadapatdipastikanbahwa A adalahkakekdari Z. Contoh : kakek(A,Z) :- bapak(A,X), bapak(X,Z). kakek(A,Z) :- bapak(A,X), ibu(X,Z).
Pemrograman Prolog • Klausaadalahaturanyang ditulisberupaklausa (clause) danterdiridarihead (kakek) dantail yang dipisahkanolehtanda :- (bapakdanibu). Klausaselaludiakhiridengantandatitik (.). Suatutail klausadapatterdiridaribeberapa sub-klausa yang dihubungkandengantandakoma (,) yang berartihubungananddantandatitikkoma (;) yang menunjukkanhubunganor. Contoh : orangtua(P,Q) :- bapak(P,Q); ibu(P,Q). kakek(A,Z) :- bapak(A,X), orangtua(X,Z). • Variabeladalahargumensuatupredikatdapatberupakonstanta (atom), variabel, atauobyeklain. Suatuatom, variabel, atauobyek lain dalam Prolog disebutterm, sehinggaargumenselaluberupa term.Dalam Prolog terdapat dua variabel, yaitu 1. Variabelbernama, sepertiX, Orang, dansebagainya 2. Variabeltakbernama (placeholder), dilambangkan(_).
Pemrograman Prolog • Variabeladalahargumensuatupredikatdapatberupakonstanta (atom), variabel, atauobyeklain. Suatuatom, variabel, atauobyek lain dalam Prolog disebutterm, sehinggaargumenselaluberupa term.Dalam Prolog terdapat dua variabel, yaitu 1. Variabelbernama, sepertiX, Orang, dansebagainya 2. Variabeltakbernama(placeholder), dilambangkan(_). Setiapterm yang ditulisdenganawalanhurufkapitalselaludianggapsebagaivariabelbernamadalam Prolog, sedangkanawalandenganhurufkecildianggapsebagaisuaturelasiataukonstanta. Variabeltakbernamadigunakanuntukmengabaikannilaisuatuvariabel, yang berartibisabernilaiapasaja. Contoh : member(X,[X|_]). member(X,[_|Y]) :- member(X,Y)
Pemrograman Prolog • Contoh gambaran Prolog : Fakta : link(fortran,algol60). link(algol60, simula67). link(algol60, cpl). link(simula67, smalltalk80). link(simula67, cpp). link(cpl, bcpl). link(bcpl, c). link(c, cpp). path(L,L). path(L,M):-link(L,X),path(X,M).
Pemrograman Prolog • Contoh gambaran Prolog : Fakta : father(john,bill). father(bill,mary). father(bill,tom). father(tom,chris). father(tom,bob). mother(mary,june). mother(mary,katie) john bill tom mary june katie chris bob
Pemrograman Prolog • Contoh dua Program keluarga : Fakta : female(pat). male(jim), offspring(Y,X) :- parent(X,Y). mother(X,Y) :- parent(X,Y),female(X). grandparent(X,Z) :- parent(X,Y),parent(Y,Z). sister(X,Y) :- parent(Z,X),parent(Z,Y),female(X), different(X,Y). predecessor(X,Z) :- parent(X,Z). predecessor(X,Z) :- parent(X,Y),predecessor(Y,Z). Fakta : parent(pam,bob). % Pam is a parent of Bob parent(tom,bob). parent(tom,liz). parent(bob,ann). parent(bob,pat). parent(pat,jim). female(pam). % Pam is female male(tom). male(bob). female(liz). female(ann).
Pemrograman Prolog • Queryadalahpertanyaan yang digunakan untuk memperoleh jawaban dari suatu problem. Contoh : • Fakta : • edge(a,b). • edge(a,e). • edge(b,d). • edge(b,c). • edge(c,a). • edge(e,b). • edge(X,Y) :- tedge(X,Y). tedge(Node1,Node2) :-edge(Node1,SomeNode), edge(SomeNode,Node2). • Query : • ?- edge(a,c). • ?- edge(a,b). • ?- edge(e,c).
Pemrograman Prolog • FOL form: X (barks(X) wags_tail(X) dog(X)) • Knowledge Base dog(X) :- barks(X), wags_tail(X). barks(woff). barks(spot). wags_tail(woff). • Queries ?- dog(woff) => yes ?- dog(Y) => Y = woff(menggunakanVariabel) ?- dog(spot) => no Means no more matches found.
Pemrograman Prolog • Knowledge Base : big(bear). big(elephant). small(cat). brown(bear). black(cat). gray(elephant). dark(Z) :- black(Z). dark(Z) :- brown(Z). • Queries : ?- dark(X), big(X).
Pemrograman Prolog • Penyelesian (Unification) : • Knowledge Base : written_by(fleming, "DR NO"). written_by(melville, "MOBY DICK"). book("MOBY DICK", 250). book("DR NO", 310). long_novel(Title):- written_by(_, Title), book(Title, Length), Length > 300. • Queries : ?- written_by(X,Y) ?- written_by(X,Y) written_by( X , Y ). | | written_by(fleming, "DR NO"). written_by( X , Y ). | | written_by(melville, "MOBY DICK"). Prolog menampilkan semua solusi : X=fleming, Y=DR NO X=melville, Y=MOBY DICK 2 Solusi
Pemrograman Prolog • Penyelesian (Unification) : • Knowledge Base : written_by(fleming, "DR NO"). written_by(melville, "MOBY DICK"). book("MOBY DICK", 250). book("DR NO", 310). long_novel(Title):- written_by(_, Title), book(Title, Length), Length > 300. • Queries : ?- written_by(X,Y) ?- written_by(X, “MOBY DICK”) ?- written_by(X, “MOBY DICK”) ?- written_by(X, “MOBY DICK”). | | written_by(fleming, "DR NO"). FAIL ?- written_by(X, “MOBY DICK”). | | written_by(melville, "MOBY DICK"). Prolog menampilkan 1 solusi : X=melville
Pemrograman Prolog • Penyelesian (Unification) : • Knowledge Base : written_by(fleming, "DR NO"). written_by(melville, "MOBY DICK"). book("MOBY DICK", 250). book("DR NO", 310). long_novel(Title):- written_by(_, Title), book(Title, Length), Length > 300. • Queries : ?- written_by(X,Y) ?- written_by(X, “MOBY DICK”) ?- long_novel(X) ?- long_novel(X) ?- long_novel(X) | long_novel(Title):- written_by(_, Title), book(Title, Length), Length > 300. written_by(_, Title) | | written_by(fleming,"DR NO"). book(Title, Length) | book("DR NO", Length). | book("DR NO", 310). Length > 300 | 310> 300. Prolog menampilkan 1 solusi : X=DR NO
Backtracking • Penyelesaian (Backtracking) : • Knowledge Base : likes(bill,X):-food(X),tastes(X,good). tastes(pizza,good). tastes(brussels_sprouts,bad). food(brussels_sprouts). food(pizza). • Queries : ?- likes(bill, What). likes(bill, What). | likes(bill, X) food(X) | backtracking point food(brussels_sprouts) tastes(X,good). | | FAIL tastes(brussels_sprouts,bad). Backtracking food(X) | food(pizza) tastes(X, good). | | tastes(pizza,good). X => What = pizza
Latihan Individu • Perhatikansilsilahkeluargaberikut: • Buatlah Code Prolog sesuaifaktayang adadarisilsilahkeluarga di atas! • Buatlah minimal 2 query yang merepresentasikanpermasalahan di atasdalam Code Prolog! Ninda Alya Arya Ari Level 3 Nisak Aldi Roy Aisah Fahmi Level 2 Soni Tian Maya Level 1
Tugas Kelompok • Buatlah 1 silsilah keluarga minimal sampai pada tingkatan buyut (Level 4). Kemudian buatlah fakta-fakta yang mungkin dan berikakan 5 query yang representatif dengan permasalahan tersebut! • Perhatikan Program Plolog berikut : Ubahlah pertanyaan berikut menjadi Program Prolog & Jawaban! • Was George1 the parent of Charles1? • Who was Charles1's parent? • Who were the children of Charles1? • parent(charles1, james1). • parent(elizabeth, james1). • parent(charles2, charles1). parent(catherine, charles1). • parent(james2, charles1). • parent(sophia, elizabeth). • parent(george1, sophia). • Fakta : • male(james1). • male(charles1). • male(charles2). • male(james2). • male(george1). • female(catherine). • female(elizabeth). • female(sophia).