Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống
1
/ 57 trang
THÔNG TIN TÀI LIỆU
Thông tin cơ bản
Định dạng
Số trang
57
Dung lượng
1,02 MB
Nội dung
B GIO DC V O TO TRNG I HC BCH KHOA H NI lời cảm ơn LUN VN THC S KHOA HC NGHIấN CU CC PHNG PHP BIU DIN TRI THC TRONG LP TRèNH LOGIC NGNH: CễNG NGH THễNG TIN NGUYN THANH T Trớc tiên xin gửi lời cảm ơn đặc biệt tới PGS.TS Nguyễn Thanh Thủy, ngời định hớng đề tài tận tình hớng dẫn bảo suốt trình thực luận văn thạc sỹ khoa học, từ ý tởng đề cơng nghiên cứu, phơng pháp giải vấn đề, đến điều kiện lý tởng để thực hành luận văn Tôi xin chân thành bày tỏ lòng biết ơn tới tất giáo s, đặc biệt GS José Júlio Alferes, trung tâm Logic tính toán, Universidade Nova de Líboa, Bồ Đào Nha cho nhiều kiến thức quý báu vấn đề đại ngành logic tính toán, trí tuệ nhân tạo, công nghệ thông tin, cho môi trờng tập thể, khoảng thời gian khó quên động viên, giúp đỡ khích lệ thời gian thực luận văn Bản luận văn đợc hoàn thành với động viên giúp đỡ bạn bè lớp cao học Công nghệ thông tin 2004 - 2006 Tôi xin bày tỏ lòng cám ơn chân tình tới tất bạn, bạn dành nhiều thời gian quý báu để trao đổi, giúp đỡ gặp vớng mắc suốt thời gian thực luận văn Ngi hng dn khoa hc: PGS.TS.NGUYN THANH THY Nguyễn Thanh Tú Công nghệ thông tin 2004 - 2006 H NI 2006 MC LC (i.2) Lut phõn bit 61 (i.3) Lut ph nh 62 (ii) Rng buc 65 Chi Ha(ii.1) Rng buc ton 65 (ii.2) Rng buc yu 67 3.3 Gúi DLV Java 70 M U Chng CHNG TRèNH LOGIC TNG QUT 3.3.1 Biu din d liu: cỏc lp Predicate, Literal, Model v Program 70 3.3.2 Kin trỳc gúi DLV: lp DlvHandler 72 Chng CC BI TON MINH HA 77 1.1 M u 4.1 Bi toỏn N quõn hu 78 1.2 Biu din tri thc chng trỡnh logic tng quỏt 12 4.1.1 Phõn tớch bi toỏn 78 1.3 Cõu tr li cho truy 17 1.4 Mt s ng ngha khỏc ca chng trỡnh logic tng quỏt 19 Chng LP TRèNH LOGIC M RNG 22 4.1.2 Ci t 82 4.2 Bi toỏn Cõy khung nh nht 84 4.2.1 Mụ t bi toỏn 84 4.2.2 Phõn tớch v ci t 85 a Chng trỡnh logic DLV 85 b Ci t trờn Java 87 2.1 Biu din tri thc s dng cỏc chng trỡnh logic m rng 26 2.2 Ng ngha khỏc ca chng trỡnh logic m rng 37 KT LUN 93 TI LIU THAM KHO 95 PH LC 97 2.3 Cỏc chng trỡnh logic phõn bit (Disjunctive Logic Programs) 38 2.3.1 Gii thiu 38 2.3.2 Biu din tri thc s dng chng trỡnh logic phõn bit 42 2.3.3 Tỡm cõu tr li cho truy 46 Chng MễI TRNG LP TRèNH LOGIC 50 3.1 Gii thiu 50 3.2 H thng DLV 53 3.2.1 Ngụn ng ca mụi trng DLV 54 3.2.2 Cu trỳc mt chng trỡnh 57 a C s d liu m rng EDB 57 b C s d liu c bn IDB 58 (i) Lut 58 (i.1) Lut ngm nh 59 M U logic ca tri thc ú, ú nú c lp vi bt k cỏch thc hin riờng bit no, vi ng cnh t do, d dng thao tỏc v suy din Chớnh vỡ vy, cỳ phỏp ca ngụn ng lp trỡnh phi kt hp c bt k chng trỡnh no vi c thự khai bỏo ca nú Khi ú, vic thc hin cỏc Logic tớnh toỏn c cỏc nh logic hc a vo nhng nm 1950, da trờn phng phỏp tớnh toỏn s thụng qua so sỏnh cỏc thuc tớnh c th vi cỳ phỏp cỏc k thut t ng húa quỏ trỡnh suy din logic Logic tớnh toỏn c phỏt khai bỏo Vic a mt cỳ phỏp thớch hp cho cỏc chng trỡnh logic c trin thnh lp trỡnh logic vo nhng nm 1970 T ú hỡnh thnh mt khỏi coi nh mt nhng lnh vc nghiờn cu quan trng nht v khú nht nim quan trng l lp trỡnh khai bỏo (declarative programming) i lp vi lp trỡnh logic lp trỡnh cu trỳc (procedural programming) V ý tng, cỏc lp trỡnh viờn Lun ny s trỡnh by cỏc kt qu nghiờn cu v cỳ phỏp v ng ngha ch cn a khai bỏo ca chng trỡnh cũn vic thc hin c th mỏy ca chng trỡnh logic, bao gm cỏc lp trỡnh logic thụng thng v lp trỡnh tớnh t xỏc lp, ú vic thc hin cỏc chng trỡnh hng th tc li logic m rng, tip ú s cp mụi trng lp trỡnh logic DLV (Datalog c xỏc lp c th bi lp trỡnh viờn Ngụn ng Prolog l mt cụng c thc with Vel) v cỏch thc kt hp mụi trng logic ny mó ngun hng hin rừ ý tng ny Chng trỡnh dch Prolog u tiờn i ó chng t ú i tng Java, cui cựng trỡnh by hai bi toỏn minh (bi toỏn N quõn l mt ngụn ng thc hnh v c ph bin trờn ton th gii hu v bi toỏn Cõy khung nh nht) c ci t trờn DLV v c chy S phỏt trin ca lp trỡnh logic chớnh thc bt u vo cui nhng nm 1970 Nhng phỏt trin xa hn t c vo u thp k 80, bt u vi s xut hin ca quyn sỏch u tiờn núi v cỏc c s lp trỡnh logic Vic la chn lp trỡnh logic lm mụ hỡnh c s cho d ỏn Cỏc h thng mỏy tớnh i th ca Nht (Japanese Fifth Generation Computer Systems Project) ó m u cho s phỏt trin ca cỏc ngụn ng lp trỡnh logic khỏc Nh kh nng khai bỏo t nhiờn ca lp trỡnh logic, Prolog nhanh chúng tr thnh mt ng c viờn cho vic biu din tri thc Tớnh y ca nú tr nờn rừ rng hn mi liờn h gia cỏc chng trỡnh logic vi c s d liu suy din c a vo gia thp k 80 Vic s dng lp trỡnh logic v c s d liu suy din biu din tri thc c gi l cỏch tip cn logic cho vic biu din tri thc Cỏch tip cn ny da trờn ý tng l chng trỡnh mỏy tớnh c cung cp cỏc c thự mó ngun hng i tng Java Chng (i) bin l toỏn hng, (ii) hng s l toỏn hng, (iii) Nu f l mt ký hiu hm bc n v t1 , , tn l cỏc toỏn hng thỡ CHNG TRèNH LOGIC TNG QUT f ( t1 , , tn ) cng l mt toỏn hng nh ngha 1.3 Mt toỏn hng c gi l cú tớnh cht nn (ground) nu khụng cú bin no xut hin nú 1.1 M u nh ngha 1.4 Mt nguyờn t biu din trờn bng ch cỏi l mt biu thc Ngụn ng ca mt chng trỡnh logic tng quỏt c xõy dng trờn cú dng p ( t1 , , tn ) , ú p l mt ký hiu v t v ti l cỏc toỏn bng ch cỏi c nh ngha nh sau: hng Nu mi ti l toỏn hng nn thỡ nguyờn t ny cng c gi l cú tớnh nh ngha 1.1 Bng ch cỏi bao gm cỏc loi ký hiu sau: cht nn - Cỏc bin Mt lut ca chng trỡnh c biu din di dng: - Cỏc hng s i tng (cú th gi l hng s) - Cỏc ký hiu hm (function symbol) A0 A1 , , Am , not Am+1 , , not An - Cỏc ký hiu v t (predicate symbol) ú, Ai l cỏc nguyờn t V trỏi ca lut c gi phn u hay l kt - Cỏc liờn kt logic: not, v , lun, v phi ca lut l phn thõn hay l gi thit Mt cỏc lut to thnh (1.1) mt chng trỡnh logic tng quỏt (cũn c gi l chng trỡnh logic thụng - Cỏc ký hiu phõn cỏch ( v ) thng) Chng trỡnh logic tng quỏt khụng cha not thỡ c gi l chng Trong ú, not l liờn kt logic c gi l ph nh ngm (negation as trỡnh xỏc nh Cỏc biu thc v lut khụng cha bin thỡ c gi l cú tớnh failure); bin l xõu bt k bao gm cỏc ký t ca bng ch cỏi v cỏc ch s, cht nn c bt u bng ch cỏi vit hoa; hng s, ký hiu hm v ký hiu v t l nh ngha 1.5 Khụng gian xỏc nh Herbrand biu din trờn ngụn ng ca cỏc xõu bt u bi ch cỏi vit thng Thụng thng, s dng cỏc ch cỏi p, chng trỡnh , ký hiu l HU ( ) , l tt c cỏc toỏn hng nn c q, cho cỏc ký hiu v t, X, Y, Z, cho cỏc bin, f, g, h, cho cỏc ký hiu biu din vi cỏc hm v hng s Tp tt c cỏc nguyờn t nn hm v a, b, c, cho cỏc hng s ngụn ng ca mt chng trỡnh c nh ngha l HB ( ) (c s nh ngha 1.2 Mt toỏn hng c nh ngha nh sau: Herbrand ca ) Vi mt v t p, atoms(p) c nh ngha l ca HB ( ) c biu din di dng v t p v vi mt cỏc v t A, atoms(A) Mụ hỡnh n nh ca chng trỡnh xỏc nh c ký hiu l a( ) l mt cỏc phn t ca HB ( ) c biu din di dng cỏc v t Gi l mt chng trỡnh logic tng quỏt bt k Vi mi phn t S, t thuc A S l mt chng trỡnh thu c t bng cỏch xúa: Vớ d 1.1 Xột chng trỡnh logic thụng thng sau: (i) cỏc lut cú cha not A vi A S p ( a ) (ii) tt c cỏc not A cỏc lut cũn li p ( b ) Rừ rng, S khụng cha not v tn ti mt mụ hỡnh n nh ó nh ngha p ( c ) trờn Nu mụ hỡnh n nh ny trựng vi S, thỡ ta núi rng S l mt mụ hỡnh n p ( f ( X ) ) p ( X ) nh ca Hay núi cỏch khỏc, mụ hỡnh n nh ca c biu din bi Ngụn ng ca chng trỡnh da trờn bng ch cỏi bao gm v t p, hm f v cỏc hng s a, b v c { } HU ( ) = a, b, c, f ( a ) , f ( b ) , f ( c ) , f ( f ( a ) ) , f ( f ( b ) ) , { phng trỡnh: S = a (S ) (1.2) Mt phn t nn P l ỳng S nu P S , ngc li P l sai (tc l ơP ( l ỳng) S suy din mt biu thc f (ký hiu bi |= f ) nu f l ) } HB ( ) = p ( a ) , p ( b ) , p ( c ) , p ( f ( a ) ) , p ( f ( b ) ) , p ( f ( c ) ) , p f ( f ( a ) ) , ỳng mi mụ hỡnh n nh ca Ta cng núi rng cõu tr li cho mt truy nn q l cú nu q l ỳng mi mụ hỡnh n nh ca (tc l Mt chng trỡnh logic c coi l mt c t cho phộp xõy dng cỏc lý |= q ), l khụng nu ơq l ỳng mi mụ hỡnh n nh ca (tc l thuyt cú th cho mt th gii quan cũn cỏc lut chng trỡnh l nhng |= ơq ) v khụng xỏc nh trng hp cũn li rng buc m cỏc lý thuyt ny cn phi tha Ng ngha ca chng trỡnh logic c phõn bit tựy theo cỏch nh ngha tớnh tha cỏc lut Trong lun ny s s dng ng ngha v mụ hỡnh n nh v cỏc dng m rng ca nú Vi ng ngha ny, cỏc lý thuyt c xỏc nh nh cỏc Vớ d 1.2 Xột ngụn ng cha hai i tng a v b v mt chng trỡnh : p ( X ) not q ( X ) q ( a ) nguyờn t nn, gi l cỏc mụ hỡnh n nh ca mt chng trỡnh Ng ngha Ta s ch rng S = {q ( a ) , p ( b )} l mt mụ hỡnh n nh ca Xõy c nh ngha nh sau: dng chng trỡnh S theo cỏch trờn, ta cú S = { p ( b ) , q ( a ) } cú mt nh ngha 1.6 Mụ hỡnh n nh ca mt chng trỡnh xỏc nh l mt mụ hỡnh n nh trựng vi S Do ú S chớnh l mụ hỡnh n nh ca nh nht S ca HB cho vi mi lut A0 A1 , , Am ca , nu A1 , , Am S thỡ A0 S 10 D dng nhn thy rng cỏc chng trỡnh logic l khụng n iu, tc l nu vic thờm thụng tin mi vo chng trỡnh s nh hng n cỏc kt lun ó cú Cht ch v tuyt i l cỏc thuc tớnh quan trng ca cỏc chng trỡnh logic trc ú ca chng trỡnh Vớ d, nu ta m rng chng trỡnh vớ d 1.2 nh ngha 1.7 Mt lỏt ct , , k cho mt tt c cỏc ký hiu v t ca bng cỏch thờm vo mt s kin q ( b ) Ta nhn thy chng trỡnh c suy din mt chng trỡnh logic tng quỏt l mt b phõn lp ca , nu vi mi p(b) chng trỡnh mi li khụng th lut cú dng (1.1) v vi mi p s , s k , nu A0 atoms ( p ) thỡ: Tn ti nht mt mụ hỡnh n nh i vi mt chng trỡnh logic l mt thuc tớnh quan trng Cỏc chng trỡnh cú nht mt mụ hỡnh n nh c gi l cú tớnh tuyt i Khụng phi tt c cỏc chng trỡnh u cú (i) vi mi i m , cú q v j s cho q j v Ai atoms ( q ) (ii) vi mi m + i n , cú q v cho q j v Ai atoms ( q ) tớnh tuyt i Cú nhng chng trỡnh cú nhiu mụ hỡnh n nh, c gi l cht ch; cú nhng chng trỡnh khụng cú mụ hỡnh n nh no, c gi l j l nhón ca cnh D v ch cú mt lut r vi Pi l phn u v Pj thuc phn thõn ca nú; s {+, } nh ngha Pj xut hin vi dng khng nh hay ph nh thõn ca r Chỳ ý rng mt cnh cú th c gỏn c hai nhón + v Mt chu trỡnh th ph thuc ca chng trỡnh ny c gi l chu trỡnh õm nu nú cha ớt nht mt cnh c gỏn nhón õm sau õy v cỏc chng trỡnh logic tng quỏt B 1.4 Vi mi mụ hỡnh n nh S ca mt chng trỡnh logic tng quỏt , ta cú: (i) vi bt k lut nn cú dng (1.1) ca , nu { Am+1, , An } S = thỡ (ii) { A1, , Am } S A0 S nu S l mt mụ hỡnh n nh ca v A0 S thỡ tn ti mt lut nn cú dng (1.1) ca cho { A1, , Am } S v { Am+1, , An } S = Mnh 1.1 Mt chng trỡnh logic tng quỏt c gi l phõn lp v ch th ph thuc D khụng cha bt k mt chu trỡnh õm no v 1.2 Biu din tri thc chng trỡnh logic tng quỏt Trong phn ny s a mt s vớ d v cỏch s dng chng trỡnh logic Khỏi nim phõn lp ó úng mt vai trũ quan trng lp trỡnh logic, c tng quỏt cho vic biu din tri thc v suy din thụng thng Vic chng s d liu suy din v trớ tu nhõn to nh lý sau õy mụ t mt thuc tớnh minh gn vi phng thc s dng chng trỡnh logic tng quỏt hỡnh thc quan trng ca cỏc chng trỡnh phõn lp húa cỏc cõu núi chun, tc l cỏc cõu s dng cỏch núi A thụng thng l Mnh 1.2 Mi chng trỡnh logic tng quỏt phõn lp u cú tớnh tuyt i D dng thy c chng trỡnh vớ d 1.2 cú tớnh phõn lp v ú cú nht mt mụ hỡnh n nh Mt chng trỡnh logic tng quỏt c gi l cht ch tng i nu th ph thuc ca nú khụng cú mt chu trỡnh vi s lng l cỏc cnh õm B Cỏc cõu núi dng ny thng c s dng cỏc kiu khỏc ca suy din thụng thng Gi thit mt i lý cú mt s thụng tin sau v loi chim: c trng ca loi chim l bit bay v cỏnh ct l loi chim khụng bit bay Ta cng c bit rng Tweety l mt chim v c thuờ úng mt cỏi chung chim cho nú nhng s khụng xõy mỏi vỡ khụng bit c rng Tweety cú bit bay hay khụng bit bay ú s l lý núi rng sn phm ca i lý cú giỏ tr 13 14 hay khụng Trong trng hp Tweety khụng th bay vỡ mt s lý no ú ab ( r , X ) c ( X ) (m i lý khụng c bit) v i lý quyt nh lm cỏi mỏi cho chung chim thỡ ta cú quyn t chi tr tin vỡ s khụng cn thit ú Vớ d sau s a cỏch biu din thụng tin trờn bng chng trỡnh logic tng quỏt (1.4) Trng hp c bit ca loi ny c gi l ngoi l mnh (strong exception) D dng nhn thy rng mt chng trỡnh tng quỏt bao gm cỏc lut Vớ d 1.6 Xem xột mt chng trỡnh bao gm cỏc lut sau: t n v cỏc s kin f1 v f2 cú tớnh cht phõn tng, ú chng trỡnh flies ( X ) bird ( X ) , not ab ( r1, X ) s cú nht mt mụ hỡnh n nh S dng b 1.4 tỡm cõu tr li cho 2.bird ( X ) penguin ( X ) mt s truy v kh nng bit bay ca cỏc loi chim khỏc Ta s bt 3.ab ( r1, X ) penguin ( X ) u vi truy flies(tweety) t S l mụ hỡnh n nh ca B Do ú, 4.make _ top ( X ) flies ( X ) flies(tweety) S v ch khi: cựng vi cỏc thc t v loi chim: (i) bird(tweety) S v f1 bird(tweety) (ii) ab ( r1, tweety ) S f2.penguin(sam) Hu ht cỏc tờn ca v t vớ d ny u cú ý ngha riờng r1 l hng s ngụn ng ca chng trỡnh, dựng gỏn tờn cho lut v phn t ab(r1,X) c s dng cho loi chim khụng chc chn v kh nng bit bay (tc l khụng th s dng lut 1) Lut u tiờn mụ t mt cõu núi thụng thng loi chim l bit bay (nhng cõu núi loi ny c gi l gi thit Ta cú c iu kin (i) da trờn s kin f1 v b chng minh (ii), ta cn cú penguin(tweety) S c suy t b Khi ú, s dng (i) v (ii), cựng vi lut 1, v phn u ca b , ta cú flies(tweety) S Vy cõu tr li cho truy flies(tweety) l ỳng Tng t nh vy, ta cú cõu tr li cho truy flies(sam) l sai ngm nh default assumptions, hoc ch l ngm nh default) Nú cho phộp ta kt lun chim X bit bay tr ta cú th ch c trng hp Tip theo õy s a mt vi tho lun v cỏc ng dng ca lp trỡnh logic c bit Lut c s dng a trng hp c bit l chim cỏnh ct, tng quỏt suy din v kt qu hnh ng in hỡnh cho cỏc dng suy c gi l lut kh (cancellation rule) din ny l phộp ỏnh x thi gian (temporal projection), ú cú mụ t Tng quỏt, cõu núi thụng thng cú dng a thụng thng l b c trng thỏi to ban u v mụ t hiu qu ca cỏc hnh ng Ta s phi quyt nh trng thỏi cui cựng s nh th no sau thc hin mt chui biu din theo lut sau: b ( X ) a ( X ) , not ab ( r , X ) (1.3) ú r l hng s ca ngụn ng l tờn ca mt lut chng trỡnh Tng t, trng hp c bit ca cõu núi thụng thng cú dng c l trng hp ngoi l ca a, c khụng l b, c biu din nh sau: cỏc hnh ng ú Mt vớ d thng c a nht cho dng suy din ny l bi toỏn Bn chớnh xỏc (Yale Shooting Problem - YSP) Cỳ phỏp ca ngụn ng bao gm ba loi bin: bin trng thỏi S, S, , bin chớnh xỏc F, F, , v bin hnh ng A, A, Ch cú mt bin trng thỏi hng s l s0, v res(A, S) 16 15 nh ngha mt trng thỏi mi thu nhn c sau thc hin hnh ng A trng thỏi S, hold(F, S) cú ngha l s chớnh xỏc F l ỳng trng thỏi S Ngoi cũn cú mt s ký hiu v t v chc nng khỏc Cỏc loi tham s v giỏ tr c th hin rừ cỏch s dng cỏc lut di õy Vớ d 1.7 Trong bi toỏn Bn chớnh xỏc (Yale Shooting Problem YSP), cú hai fluents: alive (sng) v loaded (ó np), ba hnh ng: wait (ch), load (np) v shoot (bn) Ta bit rng thc hin vic np n s dn n trng thỏi sỳng ó c np n v bn sỳng trng thỏi sỳng ó c np n, g tõy (tờn l Fred) s cht Ta mun ch rng sau thc hin cỏc hnh ng load, wait v shoot (theo ỳng trỡnh t), Fred s cht Tc l dn n chõn lý ca quỏn tớnh Cỏc s vt cú xu hng khụng i õy l cng l mt kiu núi thụng thng, phự hp vi (3) v c biu din nh sau: y1: holds ( F , res ( A, S ) ) holds ( F , S ) , not ab ( y1, A, F , S ) biu din hiu qu ca cỏc hnh ng load, shoot v wait, ta ch cn cú mt lut sau: y : holds ( loaded , res ( load , S ) ) v mt lut kh: ( ( ( ơholds alive, res shoot , res wait , ( res ( load , s0 ) ) ))) Nh ta thy, li gii lp trỡnh logic cho bi toỏn YSP thc s n gin v t nhiờn Biu din cỏc dng suy din k tha v suy din da trờn cỏc hnh ng l mt lnh vc nghiờn cu thit thc Mt s cụng vic (works) trờn c hai dng suy din ny s c tho lun cỏc phn tip theo c bit l ta mun cp ti cỏc khú khn quan trng nh trỡnh by cỏc dng tng quỏt hn ca k tha, phỏt trin lý thuyt cỏc hnh ng v tỡm kim ý ngha tớnh toỏn hiu qu ca vic dũ vũng lp v kt ni vi cỏc truy nhp nhng S tn ti nht mt mụ hỡnh n nh v s rừ rng c thờm vo li gii trờn cú th thu nhn c t cỏc s kin m nú thuc vo lp cỏc chng trỡnh khụng lp Ta s mụ t rừ rng hn lp chng trỡnh ny v cỏc thuc tớnh ca nú th ph thuc nguyờn t ca mt chng trỡnh tng t nh th ph thuc, nhng cỏc nh ca th ny l cỏc nguyờn t nn thay cho tờn cỏc v t y3: ab ( y1, shoot , alive, S ) holds ( loaded , S ) Xột mt chng trỡnh , cỏc lut cha bin ca nú c thay bng cỏc biu din mc u tiờn ca tri thc c thự v kt qu ca cỏc hnh ng thụng lut nn tng ng th ph thuc nguyờn t AD ca (atom qua lut quỏn tớnh t s0 l trng thỏi ban u v gi thit ta cú: dependency graph) cú cỏc nguyờn t nn l cỏc nh Mt b ba < Pi , Pj , s > l y : holds ( alive, s0 ) nhón ca cnh AD v ch cú mt lut r vi Pi l phn Cho dự chng trỡnh trờn bao gm cỏc lut y1 n y4 khụng cú tớnh phõn u v Pj thuc phn thõn ca nú; s {+, } nh ngha Pj xut hin vi dng tng, ta cú th ch c rng nú cú nht mt mụ hỡnh n nh V khng nh hay ph nh thõn ca r suy din c holds ( alive, res ( load , s0 ) ) , v Mt chng trỡnh logic tng quỏt c gi l khụng lp nu th ph thuc nguyờn t ca nú khụng cha chu trỡnh 17 18 Vớ d, th ph thuc ca mt chng trỡnh = { p ( a ) p ( b )} cha mt chu trỡnh vi cỏc cnh dng nhng th ph thuc nguyờn t ca A+ vo ngụn ng ca chng trỡnh A+ cú ngha l A c tin l ỳng v A cú ngha l A khụng c tin l ỳng Vi chng trỡnh ó c bin i, tr1 ( ) c thu nhn bng cỏch khụng cú chu trỡnh Ta cng d thy chng trỡnh l khụng lp Hu ht ng ngha ca cỏc chng trỡnh logic tng quỏt l thuc vo lp dch mi lut nn ca chng trỡnh logic tng quỏt dng (1.1): A0 A1 , , Am , not Am+1 , , not An chng trỡnh ny nh lý 1.5 Cho l mt chng trỡnh khụng lp Do ú, ta cú: v biu thc v t: (i) cú nht mt mụ hỡnh quy n nh (Mt c gi l (ii) Vi quy nu chc nng c trng ca nú l quy) mi nguyờn t nn A, |= A v ch comp ( ) DCA |= A , ú comp ( ) l b biờn dch Clark ca (iii) A1 Am ( Am +1 An A0 ) Am+ +1 An+ t l mt chng trỡnh logic tng quỏt v M ( tr1 ( ) ) c nh ngha l cỏc mụ hỡnh nh nht ca tr1 ( ) , tha cỏc thuc tớnh sau: v DCA l mnh úng (i) nu mt mụ hỡnh cha A thỡ nú phi khụng c cha c A v A+ Vi tt c cỏc nguyờn t nn A khụng nhp nhng, |= A v ch (ii) nu mt mụ hỡnh cha A+ thỡ nú phi cha c A cú mt dn xut SLDNF ca A t (ta núi A l nhp nhng t stable ( ) ={ S : S ' M ( tr1 ( ) ) v S c thu nhn t S bng cỏch xúa nu chng minh A t , ta ch nhn c mt cỏc i tt c cỏc phn t cú cha + v } phn t ph nh khụng nn) nh lý 1.6 [2] Vi mt chng trỡnh logic tng quỏt bt k, stable ( ) l cỏc mụ hỡnh n nh ca iu kin u tiờn ca nh lý m bo rng vi mt lp bao quỏt hn cỏc chng trỡnh (bao gm c ), tn ti mt gii thut tr li cho tt c cỏc Vớ d 1.8 Xột chng trỡnh logic tng quỏt : truy nn (tt nhiờn iu ny l khụng ỳng vi trng hp tng quỏt , p not q thm vi cỏc chng trỡnh xỏc nh) q not p tr1 ( ) bao gm cỏc lut: 1.3 Cõu tr li cho truy (q (p Mt s phng phỏp tỡm cõu tr li cho truy vi cỏc chng trỡnh phõn tng c a phn ny, c th l dn xut SLDNF v dn xut XOLDT p ) q+ q ) p+ v cú bn mụ hỡnh nh nht sau: Trong s bin i, ta s dng cỏc phn t mi c xõy dng t cỏc phn t ca chng trỡnh ban u Vi mi phn t A, ta thờm hai phn t mi A v {q , p, p , q} , {q , p, p } , {q , p , q} v {q + + + , p+} 83 84 col(X) :- #int(X), X > out(X, Y) :- row(X), col(Y), not in(X, Y) in(X, Y) :- row(X), col(Y), not out(X, Y) has_queen(X) :- row(X), col(Y), in(X, Y) :- row(X), not has_queen(X) :- Y YY, in(X, Y), in(X, YY) :- X XX, in(X, Y), in(XX, Y) :- in(X1, Y1), in(X2, Y2), X2=X1+N, Y2 = Y1 + N, N > :- in(X1, Y1), in(X2, Y2), X2=X1+N, Y1 = Y2 + N, N > Trong ú, #int(X) l cỏc hm ca ngụn ng lp trỡnh Datalog phõn bit, cho bit X nhn giỏ tr khong t n N, vi N c nhn t dũng lnh Dũng lnh chy chng trỡnh DLV nh sau: $ DLV -silent N=4 NQueens4.dl Kt qu nhn c nh sau: Trng hp N = 4, ta cú hai tr li: Hỡnh 4-2 Cỏc tr li ca NQueens vi N = 4.2 Bi toỏn Cõy khung nh nht 4.2.1 Mụ t bi toỏn Trong thit k mch in, cn thit phi cú mt s cỏc phớch cm cho cỏc thit Hỡnh 4-1 Hai tr li ca NQueens vi N = b in t tng ng kt ni mt n phớch cm, ta cú th s dng n-1 Trng hp N = 8, ta cú 92 tr li, hỡnh di õy ch lit kờ mt s li gii dõy in, mi dõy ni hai phớch cm vi Cú nhiu cỏch ni cỏc phớch ca bi toỏn in vi nhau, v cỏch ti u nht l cỏch s dng ớt dõy in nht Ta cú th mụ hỡnh húa bi toỏn ny bng mt th liờn thụng vụ hng G=(V,E), ú V l cỏc phớch in, E l cỏc kh nng cú th kt ni gia cỏc phớch in vi nhau, v mi cnh (u,v) thuc E, ta cú mt trng s w(u,v) l lng dõy cn thit ni u v v vi Yờu cu ca bi toỏn l tỡm T l mt ca E, ni tt c cỏc nh v cú tng trng s cỏc 85 86 cnh T l nh nht Do T l khụng cha chu trỡnh v kt ni tt c cỏc nh vi nhau, nờn T phi cú dng cõy, v c gi l cõy bao trựm ca th G Bi toỏn cn tỡm T c gi l bi toỏn cõy bao trựm nh nht Hỡnh 4.3 a mt vớ d v th liờn thụng vụ hng v cõy bao trựm nh nht ca nú is_edge(X, Y, C) :edge(X, Y, C) is_edge(X, Y, C) :edge(Y, X, C) Lit kờ: - Lit kờ tt c cỏc trng hp l cõy bao trựm ca th, vi mi trng hp, xỏc nh mt cnh ca th cú thuc cõy hay khụng thuc cõy bng lut phõn bit sau: in_tree(X, Y, C) v out_tree(X, Y) :is_edge(X, Y, C), reached(X) - Vỡ cn xõy dng mt cõy bao trựm ca th cho trc, nờn ta cn phi Hỡnh 4-3 Cõy bao trựm nh nht ca mt th vụ hng Trờn mi cnh ca th u cú trng s, v cỏc cnh thuc cõy bao trựm nh nht c tụ m Tng trng s ca cõy l 37 Cõy bao trựm nh nht khụng phi l tn ti nht, nu ta thay th cnh (b,c) bng cnh (a,h), ta nhn c mt cõy bao trựm nh nht cú cựng tng trng s l 37 :- in_tree(X, Y, _), has_path(X, Y) has_path(X, Y) :- 4.2.2 Phõn tớch v ci t in_tree(X, Z, _), in_tree(Z, Y, _), a Chng trỡnh logic DLV X != Z, Chia d liu vo DLV thnh nhiu ngun khỏc C s d liu m rng EDB ca chng trỡnh c lu file biu din tớnh cht khụng cha chu trỡnh ca cõy bao trựm bng rng buc sau: MST.inp, mụ t mt th liờn thụng vụ hng C s d liu c bn IDB ca chng trỡnh c lu Z != Y has_path(X, Y) :in_tree(X, Z, _), have_path(Z, Y), file MST.dl, l cỏc lut v rng buc mụ t bi toỏn X != Z, Khai bỏo: Z != Y - quyt nh mt nh l gc ca cõy, õy cng ng thi l nh xut phỏt quỏ trỡnh lit kờ cỏc trng hp cú th l cõy bao trựm ca th - xỏc nh (X,Y, C) l cnh ca th (X, Y, C) hoc (Y, X, C) thuc c s d liu m rng ca chng trỡnh, tc l thuc file MST.inp root(a) Tc l s khụng th tn ti ng thi mt cnh (X,Y) v mt ng i khỏc t X n Y - m bo tt c cỏc nh phi c duyt ti mi trng hp ca cõy bao trựm: reached(X) :- root(X) reached(Y) :- 87 88 reached(X), in_tree(X, Y, C) Program pr=new Program(); // :- node(X), not reached(X) set input pr.addProgramFile(this.dlvFileName); pr.addProgramFile(this.inputFileName); Loi b: Ti u húa cõy bao trựm bng rng buc yu nhn c kt qu Bc 2: Xõy dng i tng DlvHandler l cõy bao trựm nh nht: // build a DlvHandler object DlvHandler dlv=new DlvHandler(this.dlvExeFile); :~ in_tree(X, Y, C) [C:1] Bc 3: To chng trỡnh u vo v cỏc thụng s cn thit Kt qu chy ca chng trỡnh DLV: // set input program // set invocation parameters dlv.setProgram(pr); dlv.setNumberOfModels(1); //computes no more than solutions dlv.setIncludeFacts(false); dlv.setFilter(new String[]{"in_tree"}); Bc 4: Chy DLV Hỡnh 4-4 Tp tr li l cỏc cnh thuc cõy bao trựm nh nht cú tng trng s l 12 V cui cựng, ta cú th chy th chng trỡnh ny vi cỏc thụng s v mc ỏnh giỏ v u tiờn c truyn t dũng // run DLV by using model synchronous method of invocation dlv.run(DlvHandler.MODEL_SYNCHRONOUS); Bc 5: Qun lý kt qu DLV bng cỏch s dng cỏc lp Model, Predicate, Literal // DLV output handling // for each model, wait until DLV find a new model while(dlv.hasMoreModels()) { Model m=dlv.nextModel(); // gets next model if(!m.isNoModel()) { // for each predicate in m while(m.hasMorePredicates()){ Hỡnh 4-5 Cỏc cõy bao trựm cú trng s nh hn hoc bng 13 // gets next predicate b Ci t trờn Java Predicate p=m.nextPredicate(); System.out.println(p.toString()); Chy chng trỡnh DLV trờn Java, ta phi thc hin vic gi DLV bng } mó ngun Java nh sau: System.out.println(" - END Model"); Bc 1: Xõy dng i tng Program v thit lp d liu vo // build a Program object and setup input } else System.out.println("I cannot find a model"); } 89 90 Phn mm MST_DLV bao gm bn file: - Node.java - Edge.java - MST.java : nh kiu cho mt nỳt ca th, bao gm tờn nỳt, ta x v y ca nỳt ú trờn khung kt qu : mụ t mt cnh ca th, bao gm cú nh u, nh cui v trng s ca cnh ny : thc hin cỏc bc gi DLV Java v v th v cõy Hỡnh 4-7 Danh sỏch cnh thuc cõy khung nh nht vi th nh cha file MST6.inp khung tng ng - MSTGUI.java : mụ t giao din lm vic gia ngi s dng v chng trỡnh Giao din lm vic ca MST nh sau: Hỡnh 4-8 th v cõy khung nh nht ca MST6.inp Hỡnh 4-6 Giao din lm vic ca chng trỡnh MST Ta cn nhp cỏc tờn file tng ng, ú l file d liu vo cha cỏc s kin mụ Vi file MST7.inp, ta nhn c kt qu cõy khung nh nht cú tng trng s l 130 t mt th vi cỏc v t node v edge; file chng trỡnh l file bao gm cỏc rng buc v cỏc lut; v cui cựng l file kt qu cha kt qu va tớnh c vi v t in_tree Vi file MST6.inp, ta cú c kt qu cõy khung nh nht cú tng trng s l 16 Hỡnh 4-9 Danh sỏch cnh thuc cõy khung nh nht vi th nh cha file MST7.inp 91 92 Hỡnh 4-10 th v cõy khung nh nht ca MST7.inp Vi file MST8.inp, Ta nhn c kt qu cõy khung nh nht cú tng trng s l 103 Hỡnh 4-11 Danh sỏch cnh thuc cõy khung nh nht vi th nh cha file MST8.inp Hỡnh 4-12 th v cõy khung nh nht ca MST8.inp 93 KT LUN 94 tng Java thụng qua gúi DLV Bng cỏch s dng mt cỏch th t thớch hp cho cỏc lp Java, gúi DLV cho phộp kt ni mó ngun Java vi cỏc chng trỡnh logic phõn bit Cui cựng, bn lun ó a hai bi toỏn minh ha: bi toỏn N Bn lun ó trỡnh by cỏc kt qu nghiờn cu v cỏch biu din tri thc quõn hu v bi toỏn Cõy khung nh nht Cỏc bi toỏn ny c ci t trong lp trỡnh logic Cỏc chng trỡnh logic khỏc s cú nhng cỏch biu mụi trng lp trỡnh logic DLV v chng trỡnh mụ t bi toỏn Cõy khung din tri thc khỏc Mt chng trỡnh logic c coi l mt c thự nh nht ó c nhỳng vo mó ngun Java v c chy di dng mt xõy dng cỏc lý thuyt cú th cho mt th gii quan v cỏc lut chng chng trỡnh hng i tng Java trỡnh l nhng rng buc m cỏc lý thuyt ny cn phi tha Ng ngha Bn lun ó nghiờn cu cỏc phng phỏp biu din tri thc ca cỏc chng trỡnh logic khỏc v cỏch nh ngha tớnh tha cỏc lp trỡnh logic Nu cú thờm iu kin, bn lun cú th m rng nghiờn lut cu thờm phc tớnh toỏn ca chng trỡnh, ci thin tc tớnh toỏn Chng trỡnh logic tng quỏt s dng ng ngha mụ hỡnh n nh v cỏc dng m rng ca nú Vi ng ngha ny, cỏc lý thuyt tng ng l cỏc nguyờn t nn, c gi l cỏc mụ hỡnh n nh ca mt chng trỡnh Chng trỡnh logic m rng xut hin thờm mt cỏch biu din ph nh, ú l ph nh hin Trong ngụn ng ca chng trỡnh m rng, ta cú th phõn bit mt truy vi ý ngha nú khụng thnh cụng vi mt truy vi ý ngha mnh hn ph nh ca nú thnh cụng Ng ngha ca mt chng trỡnh logic m rng l mt cỏc tr li ca chng trỡnh, tr li ca mt chng trỡnh l mt cỏc phn t c coi l ỳng da vo s suy din chng trỡnh Vi cỏc nghiờn cu v cỏch biu din tri thc cỏc chng trỡnh logic, bn lun ó trỡnh by mt mụi trng lp trỡnh logic hiu qu, DLV (datalog vi phộp hoc) l mt h thng c s d liu tng thut khỏ mnh Nú c to trờn c s ca ngụn ng lp trỡnh tng thut datalog, thớch hp vi cỏc loi suy din khụng n iu, bao gm c chun oỏn v lp k hoch V ngoi ra, DLV cũn c nhỳng vo mó ngun hng i cng phỏt trin cỏc phng phỏp biu din tri thc khỏc i vi cỏc bi toỏn NP khú 95 96 [8] TI LIU THAM KHO Vivek Nigam (2006), Dynamic Logic Programming and 3APL, Master thesis in Computational Logic, Universidade Nova de Lisboa, Portugal [9] Ting Vit [1] Luớs Moniz Pereira, Josộ Jỳlio Alferes (1996), Reasoning with Logic Programming, Universidade Nova de Lisboa, Portugal Nguyn Xuõn Thỏi (1999), Lp trỡnh logic v nguyờn lý gii, Lun Thc s khoa hc, trng i hc Khoa hc T nhiờn, i hc Quc Gia H Ni [10] Francesco Ricca (2004), Java Wrapper for DLV, Department of Mathematics, University of Calabria, Italy [11] Wolfgang Faber, Gerald Pfeifer (since 1996), DLV homepage, http://www.dlvsystem.com/ Ting Anh [2] Chitta Baral (2004), Knowledge Representation, Reasoning and Declarative Problem Solving, Arizona State University, U.S.A [3] Chitta Baral, Michael Gelfond (1994), Logic Programming and Knowledge Representation, Computer Science Department, University of Texas at El Paso, El Paso, Texaz, U.S.A [4] Michael Gelfond (1994), The Stable Model Semantics for Logic Programming, University of Texas at El Paso, El Paso, Texaz, U.S.A [5] Steffen Hửlldobler (2004), Computational Logic - Working material, Artificial Intelligence Institute, Technische Universitọt Dresden, Germany [6] Matthias Knorr (2006), A Comparative Study of Disjunctive Wellfounded Sematics, Master thesis in Computational Logic, Universidade Nova de Lisboa, Portugal [7] Vladimir Lifschitz, Foundations of Logic Programming, Department of Computer Sciences, University of Texas, U.S.A 97 PH LC 98 Bi toỏn Cõy khung nh nht DLV: root(a) node(a) node(b) node(c) node(d) node(e) Bi toỏn N quõn hu trờn DLV: row(X) :- #int(X), X > col(X) :- #int(X), X > out(X, Y) :- row(X), col(Y), not in(X, Y) in(X, Y) :- row(X), col(Y), not out(X, Y) has_queen(X) :- row(X), col(Y), in(X, Y) :- row(X), not has_queen(X) :- Y YY, in(X, Y), in(X, YY) :- X XX, in(X, Y), in(XX, Y) :- in(X1, Y1), in(X2, Y2), X2=X1+N, Y2 = Y1 + N, N > :- in(X1, Y1), in(X2, Y2), X2=X1+N, Y1 = Y2 + N, N > edge(a, b, 4) edge(a, c, 3) edge(c, b, edge(b, e, 4) edge(d, e, 5) in_tree(X, Y, C) v out_tree(X, Y) :edge(X, Y, C), reached(X) :- root(X), in_tree(_, X, C) :- in_tree(X, Y, C), in_tree(Z, Y, C), X != Z reached(X) :- root(X) reached(Y) :reached(X), in_tree(X, Y, C) :- node(X), not reached(X) :~ in_tree(X, Y, C) [C:1] 2) edge(c, d, 3) PH LC Chng trỡnh MSTGUI.java package com.studyMST; import java.awt.Container; Bi toỏn N quõn hu trờn DLV: import java.awt.GridLayout; row(X) :- #int(X), X > import java.awt.event.WindowEvent; col(X) :- #int(X), X > import java.io.File; import java.awt.event.ActionEvent; import java.io.IOException; out(X, Y) :- row(X), col(Y), not in(X, Y) import javax.swing.BoxLayout; in(X, Y) :- row(X), col(Y), not out(X, Y) import javax.swing.JButton; import javax.swing.JFileChooser; has_queen(X) :- row(X), col(Y), in(X, Y) import javax.swing.JFrame; :- row(X), not has_queen(X) import javax.swing.JLabel; import javax.swing.JPanel; :- Y YY, in(X, Y), in(X, YY) import javax.swing.JScrollPane; :- X XX, in(X, Y), in(XX, Y) import javax.swing.JTextField; :- in(X1, Y1), in(X2, Y2), X2=X1+N, Y2 = Y1 + N, N > import org.jgraph.JGraph; :- in(X1, Y1), in(X2, Y2), X2=X1+N, Y1 = Y2 + N, N > import org.jgraph.graph.DefaultGraphModel; import org.jgraph.graph.GraphModel; import DLV.DLVInvocationException; Bi toỏn Cõy khung nh nht DLV: root(a) node(a) node(b) node(c) node(d) node(e) edge(a, b, 4) edge(a, c, 3) edge(c, b, 2) edge(c, d, 3) edge(b, e, 4) edge(d, e, 5) in_tree(X, Y, C) v out_tree(X, Y) :edge(X, Y, C), reached(X) :- root(X), in_tree(_, X, C) :- in_tree(X, Y, C), in_tree(Z, Y, C), X != Z reached(X) :- root(X) reached(Y) :reached(X), in_tree(X, Y, C) :- node(X), not reached(X) :~ in_tree(X, Y, C) [C:1] public class MSTGUI extends JFrame { public Container contentPane; private JTextField textNameInputFile = new JTextField("MST.inp"); private JButton buttonOpenInputFile = new JButton("Open Input File"); private JTextField textNameProgramFile = new JTextField("MST.dl"); private JButton buttonOpenProgramFile = new JButton("Open Program File"); private JTextField textNameOutputFile = new JTextField("MST.out"); private JButton buttonOpenOutputFile = new JButton("Open Output File"); private JButton buttonPress = new JButton("Solve!"); private JFileChooser fileChooserInput = new JFileChooser(); private JPanel inputPanel = new JPanel(); private static final long serialVersionUID = 1L; public static void main(String[] args) throws Exception, DLVInvocationException { MSTGUI studyGUIObject = new MSTGUI(); studyGUIObject.setSize(800, 175); studyGUIObject.contentPane = studyGUIObject.getContentPane(); studyGUIObject.contentPane.setLayout(new BoxLayout(studyGUIObject.contentPane, this.buttonOpenProgramFile.addActionListener(new java.awt.event.ActionListener() { BoxLayout.Y_AXIS)); public void actionPerformed(java.awt.event.ActionEvent evt) { buttonOpenProgramFileActionPerformed(evt); studyGUIObject.initPanels(); } studyGUIObject.initContainer(); }); studyGUIObject.setVisible(true); this.inputPanel.add(buttonOpenProgramFile); studyGUIObject.addWindowListener(new java.awt.event.WindowAdapter() { public void windowClosing(WindowEvent winEvt) { //third row System.exit(0); this.inputPanel.add(new JLabel("Enter MST Output File")); } textNameOutputFile.setColumns(25); }); this.inputPanel.add(textNameOutputFile); } this.buttonOpenOutputFile.addActionListener(new java.awt.event.ActionListener() { public void initContainer() public void actionPerformed(java.awt.event.ActionEvent evt) { { buttonOpenOutputFileActionPerformed(evt); this.contentPane = this.getContentPane(); } this.contentPane.add(this.inputPanel); }); } this.inputPanel.add(buttonOpenOutputFile); public void initPanels() throws IOException, DLVInvocationException { //set the layout to be rows and columns //fourth row GridLayout inputPanelLayout = new GridLayout(4,3); this.buttonPress.addActionListener(new java.awt.event.ActionListener() { this.inputPanel.setLayout(inputPanelLayout); public void actionPerformed(java.awt.event.ActionEvent evt) { try { //first row buttonPressActionPerformed(evt); this.inputPanel.add(new JLabel("Enter MST Input File")); } catch (IOException e) { textNameInputFile.setColumns(25); e.printStackTrace(); this.inputPanel.add(textNameInputFile); } catch (DLVInvocationException e) { this.buttonOpenInputFile.addActionListener(new e.printStackTrace(); java.awt.event.ActionListener() { } public void actionPerformed(java.awt.event.ActionEvent evt) { } buttonOpenInputFileActionPerformed(evt); }); } this.inputPanel.add(new JLabel("")); }); this.inputPanel.add(new JLabel("")); this.inputPanel.add(buttonOpenInputFile); this.inputPanel.add(buttonPress); } //second row this.inputPanel.add(new JLabel("Enter MST Program File")); private void buttonOpenInputFileActionPerformed(ActionEvent evt) { int returnVal = fileChooserInput.showOpenDialog(MSTGUI.this); textNameProgramFile.setColumns(25); this.inputPanel.add(textNameProgramFile); if (returnVal == JFileChooser.APPROVE_OPTION) { File file = fileChooserInput.getSelectedFile(); //This is where a real application would open the file //add the result to the new frame just created textNameInputFile.setText(file.getAbsolutePath()); resultFrame.getContentPane().add(new JScrollPane(mstObject.graph)); } resultFrame.setSize(800, 600); } resultFrame.setVisible(true); resultFrame.setDefaultCloseOperation(JFrame.DISPOSE_ON_CLOSE); private void buttonOpenProgramFileActionPerformed(ActionEvent evt) { int returnVal = fileChooserInput.showOpenDialog(MSTGUI.this); if (returnVal == JFileChooser.APPROVE_OPTION) { } } File file = fileChooserInput.getSelectedFile(); Chng trỡnh MST.java: //This is where a real application would open the file package com.studyMST; textNameProgramFile.setText(file.getAbsolutePath()); } import java.awt.Color; } import java.awt.geom.Point2D; import java.awt.geom.Rectangle2D; private void buttonOpenOutputFileActionPerformed(ActionEvent evt) { int returnVal = fileChooserInput.showOpenDialog(MSTGUI.this); import java.io.BufferedReader; import java.io.File; import java.io.FileInputStream; if (returnVal == JFileChooser.APPROVE_OPTION) { import java.io.FileWriter; File file = fileChooserInput.getSelectedFile(); import java.io.IOException; //This is where a real application would open the file import java.io.InputStreamReader; textNameOutputFile.setText(file.getAbsolutePath()); import java.util.ArrayList; } import java.util.HashMap; } import java.util.Hashtable; import java.util.Map; private void buttonPressActionPerformed(java.awt.event.ActionEvent evt)throws IOException, DLVInvocationException { import java.util.Random; import java.util.StringTokenizer; String inputFileName = textNameInputFile.getText(); String outputFileName = textNameOutputFile.getText(); import javax.swing.BorderFactory; String dlvFileName = textNameProgramFile.getText(); import org.jgraph.JGraph; import org.jgraph.graph.DefaultEdge; MST mstObject = new MST(); import org.jgraph.graph.DefaultGraphCell; GraphModel model = new DefaultGraphModel(); import org.jgraph.graph.GraphConstants; import DLV.DLVException; mstObject.dlvFileName = dlvFileName; import DLV.DLVExceptionUncheked; mstObject.inputFileName = inputFileName; import DLV.DLVInvocationException; mstObject.outputFileName = outputFileName; import DLV.DlvHandler; import DLV.Model; mstObject.graph = new JGraph(model); import DLV.Predicate; mstObject.drawGraphFromInput(); import DLV.Program; mstObject.calculateMST(); mstObject.drawMSTFromOutput(); public class MST { private static final int NODE = 1; //create a new frame for the result JFrame resultFrame = new JFrame(); private static final int EDGE = 2; private HashMap mapOfNodes = new HashMap(); Model m=dlv.nextModel(); // gets next model private ArrayList listOfEdges = new ArrayList(); if(!m.isNoModel()) public ArrayList listOfInTree = new ArrayList(); { private HashMap mapOfEdges = new HashMap(); while(m.hasMorePredicates()) // for each predicate in m { public String dlvFileName = "MST.dl"; public String inputFileName = "MST.inp"; Predicate p=m.nextPredicate(); // gets next predicate public String outputFileName = "MST.out"; private String dlvExeFile = "dl.exe"; System.out.println(p.toString()); // print out p out.write(p.toString()); public JGraph graph; } System.out.println(" - END Model"); /** } else System.out.println("I cannot find a model"); * @param args } * @throws IOException } */ catch(DLVException d) { d.printStackTrace(); } catch(DLVExceptionUncheked du) { du.printStackTrace(); } finally public void calculateMST () throws IOException, DLVInvocationException{ { File outputFile = new File(this.outputFileName); System.err.println(dlv.getWarnings()); // print out errors FileWriter out = new FileWriter(outputFile); } out.close(); // build a Program object and setup input } Program pr=new Program(); // set input public void drawGraphFromInput() throws IOException pr.addProgramFile(this.dlvFileName); { pr.addProgramFile(this.inputFileName); BufferedReader d = new BufferedReader(new InputStreamReader(new FileInputStream(new File(this.inputFileName)))); // build a DlvHandler object DlvHandler dlv=new DlvHandler(this.dlvExeFile); // set input program dlv.setProgram(pr); // String line = ""; while((line = d.readLine()) != null) { set invocation parameters dlv.setNumberOfModels(1); // computes no more than solutions dlv.setIncludeFacts(false); dlv.setFilter(new String[]{"in_tree"}); String verticeOrEdge = line.substring(line.indexOf("(") + 1, line.indexOf(")")); //System.out.println(verticeOrEdge); try { // int type = this.getType(verticeOrEdge); run DLV by using model synchronous method of invocation dlv.run(DlvHandler.MODEL_SYNCHRONOUS); // DLV output handling while(dlv.hasMoreModels()) // for each model, wait until DLV find a new model if(type == MST.NODE) { Node theNode = new Node(); theNode.label = verticeOrEdge; mapOfNodes.put(theNode.label, theNode); } else if(type == MST.EDGE) { { StringTokenizer st = new StringTokenizer(verticeOrEdge, ","); String labelNode1 = st.nextToken().trim(); String labelNode2 = st.nextToken().trim(); Edge theEdge = new Edge(); int edgeWeight = Integer.parseInt(st.nextToken().trim()); theEdge.node1 = node1; theEdge.node2 = node2; Node node1 = (Node) mapOfNodes.get(labelNode1); theEdge.weight = edgeWeight; Node node2 = (Node) mapOfNodes.get(labelNode2); listOfInTree.add(theEdge); Edge theEdge = new Edge(); } theEdge.node1 = node1; theEdge.node2 = node2; theEdge.weight = edgeWeight; listOfEdges.add(theEdge); modifyGraph(); } } else { public void modifyGraph() { } for(int i=0; i[...]... có tính tuyệt đối □ Các ví dụ trên đã chỉ ra tính hiệu quả của chương trình logic mở rộng là một ngôn ngữ biểu diễn tri thức và các ý tưởng cơ bản của các phương thức biểu diễn tri thức về hành động và thời gian 2.2 Ngữ nghĩa khác của chương trình logic mở rộng Trong phần trước, ta đã thảo luận đến ngữ nghĩa tập trả lời của chương trình a ← not b b ← not a ¬a Ngữ nghĩa mô hình hoàn hảo sẽ suy ra ¬a... 41 42 {Lk +1, , Lm } ⊆ S , và 2.3.2 Biểu diễn tri thức sử dụng chương trình logic phân biệt {Lm+1, , Ln } ∩ S = ∅ , và Các ví dụ sau sẽ chỉ ra phương thức biểu diễn các thông tin phân biệt trong {L0 , , Lk } ∩ S = {L} suy diễn thông thường Ta sẽ bắt đầu với việc biểu diễn CWA với các thông □ Định nghĩa về sự phân lớp cũng có thể được áp dụng với các chương trình logic phân biệt không chứa ¬ Định lý... chương trình logic phân biệt là các chương trình 1 logic trong đó phép phân cách được phép xuất hiện trong phần đầu của các 2 luật và phủ định có thể có trong thân của luật Các chương trình này được □ nhận biết rộng rãi là một công cụ có giá trị cho biểu diễn tri thức và suy diễn 51 52 ý thức thông thường Trong một vài năm gần đây, rất nhiều nỗ lực được sử chương này sẽ mô tả một API, thực hiện trong. .. chương trình logic mở rộng Π có tính chất tuyệt đối nếu: (i) Π + là phân lớp và (ii) Tập trả lời của Π + không chứa các nguyên tố dạng p ( t ) và p ' ( t ) 2.1 Biểu diễn tri thức sử dụng các chương trình logic mở rộng Vậy chương trình logic tổng quát cũng là chương trình logic mở rộng, do đó, ví dụ 1.3 cũng là ví dụ về chương trình logic mở rộng không có tập trả lời và ví dụ 1.4 là ví dụ cho chương trình. .. chúng bằng cách xóa tất cả các nguyên các lĩnh vực khác nhau của khoa học máy tính, đặc biệt trong trí tuệ nhân tạo tố chứa + và – trong đó và các nguyên tố có dạng vị từ x, có nghĩa là Π có và quản lý tri thức Hình thức hóa trên cơ sở logic cho việc biểu diễn và suy các tập trả lời sau: diễn tri thức và lập trình logic phân biệt đã trở thành công cụ thú vị để thỏa { person ( a ) , ¬lh _ usable ( a ) ,... chương trình cách xóa: logic mở rộng được giảm xuống thành việc tìm câu trả lời cho hai truy vấn S (i) các luật chứa biểu thức not L với L ∈ S và trong chương trình không chứa phủ định ngầm Sự mở rộng cho các chương (ii) tất cả các biểu thức có dạng not L trong các luật còn lại trình logic tổng quát hầu như không mang lại bất kỳ sự khó khăn nào trong □ tính toán 25 26 Định nghĩa 2.2 Một chương trình logic. .. sẽ chỉ ra sự khó khăn khi biểu diễn các thông tin phân biệt đúng đắn của phương pháp biểu diễn này không phụ thuộc vào các giả thiết trong logic ngầm định của Reiter Chú ý rằng nó có một cách biểu diễn tự trên Biểu diễn các câu nói thông thường phức tạp hơn (như (2.6) và (2.7) nhiên trong ngôn ngữ của các chương trình phân biệt trong phần trên) cũng có được kết quả tốt như vậy Ví dụ 2.9 Xem xét một... thế giới đóng cho các vị từ biểu diễn cánh tay bị gãy john, marry và giả thiết một chương trình logic phân biệt Π 3 chứa một danh sách đầy đủ các giáo sư trong khoa Khoa học máy tính: 1 p ( mike, cs ) Ta sẽ biểu diễn thông tin này bằng chương trình logic phân biệt Câu 2 p ( john, cs ) đầu tiên của yêu cầu được biểu diễn như sau: lh _ usable ( X ) ← not ab ( l , X ) Để biểu diễn tính đầy đủ của danh... MÔI TRƯỜNG LẬP TRÌNH ab1− ( X ) ← x1 ( X ) lh _ usable ( X ) ← x1 ( X ) LOGIC x2 ( X ) or ab2+ ( X ) ← person ( X ) ab2− ( X ) ← x2 ( X ) rh _ usable ( X ) ← x2 ( X ) ab1 ( X ) ← ¬lh _ usable ( X ) ab2 ( X ) ← ¬rh _ usable ( X ) Các chương trình logic phân biệt là một công cụ mạnh để biểu diễn tri thức và person ( a ) suy diễn thông thường Sự phát tri n gần đây nhất về môi trường lập trình ¬lh... g là đúng trong Định nghĩa về một tập trả lời của chương trình logic phân biệt Π cũng S giống như của chương trình logic mở rộng Đầu tiên ta sẽ xét tập trả lời của 5 f or g là sai trong S khi và chỉ khi f là sai và g là sai trong S một chương trình logic phân biệt không có phủ định ngầm 6 ¬f là đúng (sai) trong S khi và chỉ khi f là sai (đúng) trong S Một tập trả lời của một chương trình logic phân