You are on page 1of 115

TRNG I HC LT KHOA TON TIN Trng Ch Tn

GIO TRNH

NHP MN TR TU NHN TO

Lt, 04 - 2009

LI M U
Gio trnh Nhp mn Tr tu nhn to c vit dnh cho sinh vin ngnh Ton Tin, Tin hc v Cng ngh thng tin. c gio trnh ny, sinh vin cn c kin thc c bn v lgic, cu trc d liu v thut ton. Ni dung gio trnh ny gm 4 chng: Chng 1: Khi nim v tr tu nhn to Chng 2: Cc phng php gii quyt vn Chng 3: Biu din v x l tri thc Chng 4: Lp trnh lgic Chng 1 gii thiu tm tt lch s hnh thnh v pht trin cng nh cc khi nim chung nht, cc lnh vc nghin cu v ng dng chnh ca tr tu nhn to. Chng 2 trnh by cc phng php biu din v gii quyt vn c bn: biu din vn trong khng gian trng thi bng th thng thng, th V/HOC, cc phng php xc nh trc tip li gii, cc phng php th sai (trong trnh by cc phng php tm kim theo chiu rng, chiu su, theo hng cc tiu gi thnh trn cy v th, thut gii di truyn, phng php GPS, ) v cc k thut heuristic. Chng 3 cp n cc phng php biu din tri thc bng: lgic, lut sinh, mng ng ngha, khung v cc phng php x l tri thc bng suy din da trn lgic tt nh v bt nh. Chng 4 gii thiu k thut lp trnh lgic thng qua ngn ng lp tnh Prolog. Cui mi chng c phn bi tp nhm cng c chc hn kin thc l thuyt v rn luyn k nng thc hnh cho hc vin. Cc phn c in ch nh dnh cho hc vin c thm. Chc chn ti liu ny khng trnh khi s sut, tc gi rt mong nhn c v chn thnh bit n cc kin ng gp qu bu ca cc bn ng nghip v c gi nhm lm cho gio trnh hon chnh hn trong ln ti bn sau. lt, 04 - 2009 Tc gi

MC LC
Li m u CHNG I. KHI NIM V TR TU NHN TO I.1. Lc s hnh thnh v pht trin I.2. Nhng lnh vc nghin cu ca tr tu nhn to (TTNT) I.3. Nhng ng dng ca TTNT CHNG II. CC PHNG PHP GII QUYT VN II.1. Cc phng php xc nh trc tip li gii II.1.1. Phng php gii chnh xc II.1.2. Phng php gii gn ng II.1.3. Phng php gii khng tng minh, qui II.1.4. Phng php qui hoch ng II.2. Cc phng php th sai II.2.1. Phng php vt cn, nguyn l mt li, phng php sinh v th, phng php nhnh cn a. Phng php vt cn b. Nguyn l mt li c. Phng php sinh v th d. Phng php nhnh cn II.2.2. Phng php ngu nhin a. Phng php Monte - Carlo b. Thut gii di truyn GA II.2.3. Nguyn l m cung II.2.4. Cc phng php biu din v gii quyt vn trong khng gian trng thi bng cy v th a. Biu din vn trong khng gian trng thi b. Phng php tm kim li gii c. Cc dng c bit thng gp: tm kim theo chiu rng, chiu su, su dn, cc tiu AT II.2.5. Quy bi ton v bi ton con v cc chin lc tm kim trn th V / HOC a. Quy bi ton v bi ton con b. Biu din bi ton di dng th V / HOC c. Cc phng php tm kim trn cy V / HOC: 1 3 6 8 8 8 8 11 13 13 13 14 15 16 17 17 18 20 22 22 27 28 32 32 33

tm kim theo chiu rng, chiu su, cc tiu II.2.6. Phng php GPS II.3. K thut Heuristic II.3.1. Cc thut gii tm kim ti u trn cy v th vi tri thc heuristic a. Thut gii AKT b. Thut gii A* c. Cc v d II.3.2. Nguyn l tham lam II.3.3. Nguyn l hng ch, phng php leo ni II.3.4. Nguyn l sp th t, nguyn l trng khp nht Bi tp CHNG III. BIU DIN V X L TRI THC III.1. Khi nim v biu din v x l tri thc III.1.1. T d liu n tri thc III.1.2. Mt s c trng ca tri thc III.1.3. Phn loi tri thc III.1.4. Cc phng php biu din tri thc III.1.5. Cc phng php x l din tri thc III.2. Mt s phng php biu din tri thc III.2.1. Biu din tri thc nh lgic III.2.2. Biu din tri thc nh lut sinh 63 III.2.3. Biu din tri thc nh mng ng ngha III.2.4. Biu din tri thc bng Frame III.3. X l tri thc tt nh bng phng php suy din lgic III.3.1. Cc c ch lp lun vi tri thc tt nh III.3.2. Thut ton Vng Ho III.3.3. Thut ton Robinson III.3.4. Thut ton suy din tin III.3.5. Thut ton suy din li III.4. X l tri thc bt nh bng phng php suy din logic III.4.1. Cc c ch lp lun vi tri thc bt nh v khng chnh xc III.4.2. Phn b kh xut ca khi lut v cc php ton ni kt trn chng Bi tp

34 40 42 44 44
44 45 48 51 52

55 59 59 60 60 60 60 61 61 64 64 65 65 65 69 72 74 78 78 78 79

CHNG IV. LP TRNH LGIC IV.1. Gii thiu ngn ng lp trnh lgic Prolog 80 IV.1.1. M u 80 IV.1.2. V t, s kin, qui tc, mc tiu trong Prolog 81 IV.1.3. Cu trc chnh ca mt chng trnh trong Prolog 83 IV.2. Danh sch, qui, lt ct trong Prolog 87 IV.2.1. Danh sch 87 IV.2.2. qui, c ch quay lui v tm nghim bi trong Prolog 87 IV.2.3. Lt ct trong Prolog 89 IV.3. Cc v d 92 IV.3.1. Bi ton Thp H Ni 92 IV.3.2. Bi ton x l vi phn k hiu 93 IV.3.3. Bi ton suy lun lgic 94 IV.4. Ph lc: Vi v t chun trong Prolog 96 Bi tp 105

Ti liu tham kho

110

Chng 1 Khai niem ve Tr tue nhan tao

Chng I KHI NIM V TR TU NHN TO I.1. Lc s hnh thnh v pht trin


* Tr tu nhn to (TTNT hay AI Artificial Intelligence) l mt trong nhng ngnh mi trong lnh vc cng ngh thng tin. C nhiu quan im v tr tu nhn to. - Nm 1950, Alan Turing a ra cc trc nghim thng minh nhn bit my tnh c thng minh hay khng. Tuy vy, cng theo ng ta, tuy my tnh c th tht bi trong cc trc nghim thng minh nhng n vn c th thng minh. Theo quan im ca Minsky, tr tu nhn to l mt ngnh khoa hc nhm nghin cu, m phng trn my tnh cc hnh vi v t duy thng minh tng t nh con ngi. N gip my tnh c kh nng nhn thc, suy lun v phn ng. C hai hng tip cn tr tu nhn to: dng my tnh bt chc qu trnh x l ca con ngi v thit k nhng my tnh thng minh c lp vi cch suy ngh ca con ngi.

- T in bch khoa ton th Webster th nh ngha: Tr tu l kh nng: 1. Phn ng mt cch thch hp vi nhng tnh hung mi thng qua hiu chnh hnh vi mt cch thch ng; 2. Hiu r nhng mi lin h qua li gia cc s kin ca th gii bn ngoi nhm a ra nhng hnh ng ph hp t ti mt mc ch no . Theo nhng nh tm l hc nhn thc th qu trnh hot ng tr tu ca con ngi bao gm 4 thao tc c bn: 1. Xc nh tp ch (goal) cn t ti; 2. Thu thp cc s kin (facts) v cc lut suy din (inference rules) t ti tp ch t ra; 3. Thu gn (prunning) qu trnh suy lun nhm xc nh mt cch nhanh chng tp cc lut suy din c th s dng c t ti mt ch trung gian no ; 4. p dng cc c ch suy din (tin hoc li) c th (inference mechanisms), da trn cc thao tc thu gn qu trnh suy lun v nhng s kin trung gian mi c to ra, dn dt t nhng s kin ban u n nhng ch t ra.

* TTNT ra i da trn cc thnh qu ca cc ngnh tm l hc nhn thc, lgic hnh thc, T trn 2000 nm trc, cc nh trit hc v tm l

Chng 1 Khai niem ve Tr tue nhan tao

hc c gng tm hiu cch thc, c ch ca qu trnh nh, hc tp, nhn thc v suy l. - Vo u nhng nm 50 ca th k XX, nh s ra i v ci tin lin tc v hiu sut hot ng ca my tnh, xut hin xu hng khng ch nghin cu tr tu v mt l thuyt m cn kim nghim cc kt qu l thuyt thng minh trn my tnh. Trong thi gian u mi hnh thnh, nhiu cng trnh l thuyt v TTNT vn cha c kim nghim v trin khai trn thc t do cha c ngn ng lp trnh c trng cho TTNT, do hn ch v k thut my tnh, gii hn v b nh c bit l tc thc hin v do vn bng n t hp ny sinh trong nhng thut ton tm kim li gii cho cc bi ton kh trong TTNT. Da trn cc thnh qu v k thut phn cng, cng vi s xut hin cc ngn ng lp trnh c th cho TTNT, chuyn x l k hiu hnh thc phc v cho lp trnh lgic nh IPL.V, LISP (vit tt ca LISt Processing, do Mc Cathy ti i hc MIT xut nm 1960), PLANNER, PROLOG (vit tt ca PROgramming in LOGic, do Alain Colmerauer v nhm cng s ca ng ti i hc Marseilles xy dng nm 1972), nhiu gi thuyt hay kt qu th v v l thuyt trong TTNT c iu kin c kim nghim v tr thnh cc sn phm tin hc c th trn th trng mang tnh thng minh, hot ng nh cc nhm chuyn gia nhiu kinh nghim trong tng lnh vc hp no nh y hc, a cht, dy hc, chi c,... Chng hn cc sn phm, chng trnh: dn xut kt lun trong h hnh thc, chng minh cc nh l hnh hc phng, tnh tch phn bt nh, gii phng trnh i s s cp, chi c (Samuel), phn tch v cha bnh tm l (ELIZA), chuyn gia v y khoa (MYCIN i hc Stanford), phn tch v tng hp ting ni, iu khin Robot theo n Mt - tay, thm d khong sn (PROSPECTOR)... Khi s dng nhng sn phm chuyn dng thng minh ny, c bit l ln u tin, ta khng khi ngc nhin v tnh thng minh n mc i khi ta c cm gic chng vt tri hn kh nng ca nhng ngi khng chuyn nghin cu v lnh vc c th . Trong nhng nm 1990, ngnh TTNT cng pht trin mnh hn na theo cc hng: c s tri thc v h chuyn gia, x l ngn ng t nhin, l thuyt nhn dng hnh nh, ting ni v ng dng vo cc k thut a phng tin, siu vn bn, mng nron, my hc, l thuyt m trong lp lun xp x, lp trnh tin ho, khai thc tri thc t d liu, ...

* C vi du hiu quan trng ca tr tu my l cc kh nng: hc; m phng cc hnh vi sng to ca con ngi; tru tng ha, tng qut ha v suy din; t gii thch hnh vi; thch nghi vi tnh hung mi gm kh nng thu

Chng 1 Khai niem ve Tr tue nhan tao

np d liu tch hp, rt tri thc t d liu; x l cc biu din hnh thc (cc k hiu tng trng, danh sch); vn dng cc tri thc heuristics sn c; x l cc thng tin bt nh, khng y , khng chnh xc, ...Tr tu my khc tr tu ngi ch n khng th nhn trc c mt phn hay ton th qu trnh gii trong nhng tnh hung mi v khng t sinh ra c cc heuristics ca chnh bn thn chng. * TTNT gm cc phng php v k thut c bn sau: phng php biu din v gii quyt vn ; k thut heuristics; phng php biu din v x l tri thc; phng php hc v nhn dng, x l ngn ng t nhin v cc ngn ng lp trnh cho TTNT. TTNT vn k tha cc k thut c bn ca tin hc truyn thng nh: x l danh sch, k thut qui v quay lui, c php hnh thc, ... Trong bt k mt h thng TTNT no cng u c 2 thnh phn c bn lin quan mt thit vi nhau: cc phng php biu din vn v tri thc, cc phng php tm kim trong khng gian bi ton, cc chin lc thu hp khng gian li gii v suy din.

I.2. Nhng lnh vc nghin cu ca tr tu nhn to


I.2.1. T thut ton n thut gii * c trng ca thut ton (Algorithm): yu cu tha mn nghim ngt 3 tnh cht: xc nh, hu hn, ng n. u im: nhng bi ton gii c bng thut ton c phc tp khng qu a thc c p dng tt trong thc t. Nhc im: nhng thut ton c phc tp trn a thc ch c p dng vi khng gian bi ton nh; trn thc t, lp cc bi ton kh cha c thut ton gii hoc cha bit c thut ton gii hiu qu rng hn rt nhiu. Mt hng gii quyt kh khn l m rng tnh xc nh, tnh ng v a vo thm cc thng tin c trng v bi ton, a vo my tnh mt kiu kinh nghim v t duy ca con ngi l s c lng, thu c cc thut gii heuristic. * c trng ca thut gii heuristic: phc tp b, cho php nhanh chng tm ra cc li gii, nhng khng phi lun lun tm ra m c th tm thy li gii ch trong a s trng hp; v li, cc li gii ny cha chc lun ng hay ti u m thng gn ng hay gn ti u. I.2.2. Phn loi cc phng php gii quyt vn * Biu din vn : Xt vn : A B.

Chng 1 Khai niem ve Tr tue nhan tao

- Dng chun: Cho A, B tm (hai loi thut ton, chng trnh: thut ton cn xc nh trc chnh l v thut ton tng qut tm ra ). - Cho A, , tm B (suy din tin). - Cho B, , tm A (suy din li). * Nhm cc phng php xc nh trc tip li gii: phng php chnh xc, phng php xp x gn ng, phng php khng tng minh, qui, nguyn l qui hoch ng * Nhm cc phng php xc nh gin tip li gii hoc tm kim li gii: - Phng php th sai: vt cn, nguyn l mt li, phng php nhnh cn, sinh v th li gii, phng php ngu nhin (phng php Monte Carlo, thut gii di truyn GA), nguyn l m cung (dng qui), vt cn dn (di dng lp) bng cch quay lui v xc nh dn thng tin v bi ton trong qu trnh gii thng qua cc cu trc khng tuyn tnh (chng hn: cy, th hoc th V/HOC nh cc phng php tm kim: theo chiu rng, su, su dn, cc tiu AT), phng php GPS, Phng php heuristic trong tr tu nhn to: l hng tip cn quan trng xy dng cc h thng TTNT. N bao gm cc phng php v k thut tm kim c s dng cc tri thc c bit t chnh bn thn lp bi ton cn gii nhm rt ngn qu trnh gii v nhanh chng i n kt qu mong mun mc d c th khng chc chn l cch gii quyt ti u nhng li c tnh kh thi trong iu kin thit b hin c v thi gian yu cu. Trong k thut ny ngi ta thng s dng k thut heuristis nh lng thng qua cc hm nh gi. Chng ta s minh ha cc phng php heuristics thng qua cc phng php vt cn thng minh (tm kim ti u c b sung bng tri thc c trng v bi ton trn cy hoc th tng qut: AKT, A*), nguyn l tham lam, nguyn l hng ch (thut gii leo ni), nguyn l sp th t, nguyn l khp nht,

Nhng thng tin heuristic ny vn c gin tip a vo my tnh thng qua con ngi. Vy my tnh c th t to ra cc tri thc, bit suy lun, chng minh, t hc qua kinh nghim, my c kh nng rt ra tri thc v vn dng chng vo vic gii quyt bi ton hay khng ? Cc phng php trong tr tu nhn to gip my tnh thc hin c trong mt chng mc no cc vn t ra trn: cc phng php biu din

Chng 1 Khai niem ve Tr tue nhan tao

v x l tri thc, lp trnh tin ho, mng neuron nhn to, my hc, khai thc tri thc t d liu, I.2.3. Biu din v x l tri thc C 4 phng php c bn biu din v x l tri thc - d liu tch hp: phng php hnh thc s dng cch tip cn logic (lgic c in - tt nh: lgic mnh , lgic v t; lgic bt nh: lgic xc sut, lgic kh xut, lgic m), cc lut sinh (thng dng trong cc h chuyn gia), mng ng ngha, b ba lin hp OAV, cch biu din bng khung (hay dn - Frame),... Cc h chuyn gia l nhng th hin ca vic kt hp ca cc phng php biu din v phng php x l tri thc (v d: DENDRAL, MOLGEN, PROSPECTOR, MYCIN, ...). I.2.4. X l ngn ng t nhin, cc ngn ng lp trnh da trn vic x l danh sch, k hiu v lp trnh logic: cc ngn ng lp trnh LISP, PROLOG c hn ch l chi ph ln v kh pht trin h thng; cn CLIPS nhm biu din tri thc theo hng i tng v x l cc lut suy dn. Ta c th thy s khc nhau c bn gia lp trnh truyn thng v lp trnh x l k hiu trong TTNT qua bng so snh I.1.
Lp trnh truyn thng - X l d liu - D liu trong b nh c nh a ch s Lp trnh x l k hiu v lgic - X l tri thc - d liu tch hp - Tri thc c cu trc trong b nh lm vic theo k hiu - X l theo cc thut ton - X l theo cc thut gii heuristics v c ch lp lun - nh hng x l cc i lng nh lng s - nh hng x l cc i lng nh tnh, logic, k hiu tng trng, danh sch - X l tun t hoc theo l - X l theo ch tng tc cao (hi thoi, theo ngn ng t nhin,...) - Khng gii thch trong qu trnh thc hin - C th t gii thch hnh vi h thng trong qu trnh thc hin

Bng I.1 I.2.5. L thuyt nhn dng theo hng thng k, cu trc, i s v heuristics gm: nhn dng hnh nh v m thanh (HEARSAY-II, ). I.2.6. Lp trnh tin ho, mng nron, my hc, khai thc d liu - Lp trnh tin ha (Revolution Programming) s dng tng qui lut tin ho v hc thuyt di truyn ca ngnh sinh hc: nhng g hp l, thch

Chng 1 Khai niem ve Tr tue nhan tao

nghi tt vi mi trng s c kh nng tn ti lu di hn trong qu trnh o thi, sinh tn; mt s c im ca th h trc s di truyn, nh hng n th h sau thng qua lai cho; thnh thong vn xut hin vi c th c c im khc hn (hoc ni tri li cc c im tim tng) vi th h trc ca chng thng qua t bin, Khi im ca hng nghin cu ny l thut gii di truyn (GA Genetic Algorithm). u im ca cc thut gii GA l c th p dng i vi cc bi ton cha bit thut ton no hay cha c thut gii no kh d, hiu qu gii. C th xem GA thuc vo lp cc thut ton ngu nhin thng qua vic to ngu nhin qun th ban u cng nh cc v tr lai cho hay t l lai cho v t bin ca chng. - Mng nron nhn to (hay vn tt hn l mng nron, ANN Artificial Neural Networks) m phng m hnh v c ch hot ng hng phn v c ch thn kinh iu khin hot ng ca con ngi. M hnh ANN c th gm nhiu lp, trong t nht phi c lp nhp (input layer) v lp xut (output layer), ngoi ra c th c nhiu lp n (hidden layers) trung gian. Mi lp gm nhiu nt. Cc kch thch t mi trng ngoi c truyn vo mng thng qua cc nt ca lp nhp. Tng hp cc kch thch ny (ph thuc cc trng s m mng ny cn hc), nu vt qu mt ngng no , s gy kch thch (hng phn hay c ch) n cc nt ca lp k tip. C th, qu trnh tip tc lan truyn n lp xut. Mt m hnh ANN thng c ng dng nhiu trong thc t l mng nron lan truyn ngc. Lp li qu trnh ny, da trn vic cp nht trng s qua mi th h sao cho gim dn sai s gia gi tr tht v gi tr do mng kt xut. Qua mt s th h luyn, mng s hc c b trng s thch hp. u im ca cc phng php luyn mng ANN l c th p dng i vi cc bi ton cha bit thut ton no hay cha c thut gii no kh d, hiu qu gii. - My hc (LM - Learning Machine) l qu trnh rt ra qui lut t d liu, chng hn hc thng qua lgic, hc bng quan st da trn cc o ph hp, hc da trn cy nh danh thng qua o hn lon thng tin trung bnh, Ta c th dng ANN ng dng vo my hc. - Khai thc d liu (DM - Data Mining) nhm rt ra tri thc t d liu th, chng hn o ph thuc ca mt lp cc thuc tnh xc nh vo lp cc thuc tnh ph bin khc trong tp d liu th cho trc thng qua lut kt hp, ... I.3. Nhng ng dng ca TTNT - iu khin hc, Robotic, giao din ngi my thng minh - Tr chi my tnh - Thit b in t thng minh nh s dng lgic m - H chuyn gia trong: gio dc, y khoa, a cht, qun l, - X l ngn ng t nhin

Chng 1 Khai niem ve Tr tue nhan tao

Nhn dng hnh nh, m thanh, Cc h thng x l tri thc v d liu tch hp: cho php x l ng thi tri thc v d liu (c s d liu suy din, biu din lut i tng, h h tr quyt nh) M hnh ho cc gii php gii bi ton

Chng II - Cac phng phap giai quyet van e

Chng II CC PHNG PHP GII QUYT VN


II.1. Cc phng php xc nh trc tip li gii
c im ca cc phng php ny l xc nh trc tip c li gii thng qua mt th tc tnh ton hoc cc bc cn bn c c li gii. C ba loi phng php chnh xc nh trc tip li gii. Loi th nht c p dng gii cc bi ton bit cch gii bng cc cng thc chnh xc (nh cng thc ton hc). Loi th hai c dng cho cc bi ton bit cch gii bng cc cng thc xp x (nh cc cng thc xp x trong phng php tnh). Loi th ba c p dng vo cc bi ton bit cch gii khng tng minh thng qua cc h thc truy hi hay k thut qui. II.1.1. Phng php gii chnh xc: thng qua cc cng thc gii chnh xc. Chng hn, thut ton gii phng trnh bc hai. II.1.2. Phng php gii xp x: thng qua cc cng thc gii gn ng. Chng hn, phng php lp tnh tch phn xc nh theo cng thc hnh thang trong hc phn Phng php tnh. II.1.3. Phng php gii khng tng minh: thng qua cc h thc truy hi hoc k thut qui. * Thao tc qui F(x) trn 1 i tng x D no . Xt hai trng hp: Nu i tng x thuc mt tp c bit X0 no (X0 D) m bit cch gii n gin th thc hin cc thao tc s cp tng ng; Ngc li, trc ht c th thc hin mt thao tc G(x) no , bin i x thnh x= H(x) D ri thc hin thao tc tng t F(x) trn x, sau c th thc hin thm mt thao tc K(x) no trn x, sao cho sau mt s hu hn bc ny, cc im xn() s ri vo tp X0.

F(x) //x D if (x X0) ThaoTcSCp(x); else G(x); x = H(x); // iu kin dng //H(x) D

Chng II - Cac phng phap giai quyet van e

F(x); K(x);

// li gi qui

Cc thao tc qui thng gp trong tin hc l: nh ngha qui, hm hoc th tc qui, thut ton qui. * Ch : Khi thit k mt thao tc qui, ta cn c hai phn: - Phn c s (phn neo hay iu kin dng): thao tc s cp bit cch thc hin ngay trn tp con X0 D. - Phn gi qui F(x): cn phi bo m sau mt s hu hn bc bin i x th ta s gp iu kin dng: H(H( H(x))) = x0 X0. - Trn y, ta xt qui ui trc tip. Cc trng hp phc tp hn mt cht nh qui nhnh trc tip v qui gin tip (hay qui h tng) c xt tng t.
* V d 1a (dy s Fibonacci): u thng th 1 c 1 cp th con mi ra i (F(0) = 0, F(1) = 1). Gi s: - C sau mi thng mt cp th (t sau hai thng tui) s sinh thm mt cp th con; - Cc con th khng bao gi cht. Hi s cp th F(n) sau n thng l bao nhiu? Ta c cng thc truy hi tnh F(n) nh sau: F(0) = 0; F(1) = 1 (X0 = 0; 1) F(n) = F(n-1) + F(n-2), n 2 tnh F(n), ta c th thc hin theo cc cch sau: - Thut ton qui sau y c phc tp thut ton vi s php cng l O(F(n)) = O(((1+ 5 )/2)n): phc tp m, qu ln, khng kh thi ! Nguyn Fibonaci_De_Qui(n) { if (n 1) return n; else return (Fibonaci_De_Qui(n-1) + Fibonaci_De_Qui(n-2)); } - Thut ton lp sau y c phc tp thut ton vi s php cng l O(n): hiu qu hn nhiu ! Ta c th kh qui bng cch dng vng lp v vi bin ph hoc dng c ch ngn xp. Nguyn Fibonacci_Lp(n) { if (n==0 or n==1) return n; else { j = 1; Truoc = 0; HienTai = 1; while (j < n) do { Sau = Truoc + HienTai; Truoc = HienTai;

Chng II - Cac phng phap giai quyet van e

10

HienTai = Sau; j = j + 1; } return Sau; } } - Tm cng thc tng minh t h thc truy hi F(n) =

1 5

[(

1+ 5 n 1 5 n ) +( ) ] 2 2

* Phng php tng qut tm cng thc tng minh cho Fn t h thc truy hi tuyn tnh (h s hng): Fn = b1 Fn-1 + b2 Fn-2 , n 2 vi cc tr {F0, F1} cho trc. Gi {1, 2} l 2 nghim ca a thc c trng tng ng: 2- b1 - b2=0. n Khi : Fn = c1 1 + c2 2n , (c1, c2 s c xc nh t cc iu kin u ca F0, F1). * Nhn xt: Trong nhiu bi ton kh, ta c th dng chin lc Chia tr tch n thnh nhiu bi ton con c cng cch gii nh bi ton ban u thng qua k thut qui. - V d 1b: Tro i hai phn a[1..k] v a[k+1..n] ca mng a gm n phn t (khng nht thit c di bng nhau) m khng dng mng ph. Nu k n-k th trc tin trao i hai phn bng nhau a[1..k] v a[n-k..n]; sau trong mng con a[1..n-k], ta ch cn tro i k phn t u vi phn cn li. Trng hp k n-k, gii tng t, ... TraoHaiPhanBangNhau(a, Tu1, Tu2, SoPTuTrao) { for (i=1; i SoPTuTrao; i++) DoiCho(a[Tu1+i], a[Tu2+i]); } TraoHaiPhanBatKy(a, n, k) // k >= 0 { i = 1; j = n; while (k >= i) { if (k < (i+j)/2) { TraoHaiPhanBangNhau(a, i, i+j-k, k-i+1); j = i + j - k - 1; } else { TraoHaiPhanBangNhau(a, i, k+1, j-k); i = i + j - k; } } }

Chng II - Cac phng phap giai quyet van e

11

II.1.4. Phng php qui hoch ng: * tng ca nguyn l qui hoch ng: nghim ca mt bi ton con (ca mt bi ton) l s kt hp cc nghim ca cc bi ton con nh hn ca n (trong trng hp ri rc c tnh qui th nghim trong n bc s c c t li gii ca k bc trc v li gii trong n-k bc). Ta thng dng phng php ny gii cc bi ton ti u m tha mn nguyn l trn. C th xem nguyn l ti u l mt s th hin tt ca phng php chia tr trong vic gii quyt vn . Khi thc hin cc tnh ton trong phng php qui hoch ng, thc hin tnh ton ti bc th n, nn tn dng cc kt qu tnh cc buc trc thng qua cc h thc truy hi v mt vi bin ph lu cc kt qu trung gian trc (chng hn, xt bi tp: tnh tt c cc s t hp Ckn, vi mi k: 0 k n).
* M hnh ton hc ca nguyn l ti u - nh ngha II.1 (hm phn tch c): Cho hm f: D R, D Rn, D1 = {x1 R1: yRn-1 & (x1,y)D}, D(x1) = {y Rn-1 : (x1, y) D} x1 D1. Ta ni hm f l phn tch c nu tn ti hai hm g: R2 R v h: Rn-1 R1 sao cho: . f(x1, y) = g(x1, h(y)), x = (x1, y) D, x1 D1, y D(x1) . Hm g n iu khng gim theo bin th hai: x1 D1, z1, z2 R1: z1 z2 g(x1, z1) g(x1, z2) (tht ra ch cn: x1 D1, z1, z2 R1, y1, y2 D(x1): z1 = h(y1), z2 = h(y2), z1 z2 g(x1, z1) g(x1, z2)) - Mnh II.1: Cho f l hm phn tch c (trong nh ngha II.1). Khi , ta c:

opt f ( x) = opt [ g ( x1 , opt [h( y )])]


xD x1D1 yD ( x1 )

- Nhn xt: . Kt qu ca mnh trn cho php ta a vic ti u hm nhiu bin v ti u cc hm theo cc bin thnh phn c s chiu b hn. . Ta thng gp trng hp hm g c dng tuyn tnh theo bin th hai: g(x1, z) = r(x1) + z v f c dng cng tnh theo tng thnh phn: f(x1, x2, , xn) = r(x1) + r(x2) + + r(xn) * V d 2 (bi ton ngi giao hng Salesman): Hng ngy, ngi giao hng phi chuyn hng qua n a im, mi a im ng mt ln, ri quay li a im xut pht. Bi ton t ra l: lm th no anh ta c c mt hnh trnh vi ng i ngn nht. Ta biu din bi ton bng th nh hng G = (V, A), vi V={1, 2, , n} v di cung C(i,j) > 0, nu (i,j) A v C(i,j) = , nu (i,j) A. Khng mt tnh tng qut, ta c th gi s ng i ca anh ta xut pht t nh 1. Bt k ng i no (chp nhn c) ca ngi giao hng cng c th phn thnh: cung (1,k) vi k V\{1} v ng i t k ti 1 qua mi nh thuc V\{1} ng mt ln. Nu ng i ca anh ta ngn nht th ng i t k ti nh 1 qua cc nh thuc V\{1, k} phi ngn nht. Do

Chng II - Cac phng phap giai quyet van e

12

nguyn l ti u c tha mn. Gi d(j, S) l di ng i ngn nht t j n nh 1 qua mi nh k S (S V v S ) ng mt ln. Ta c cng thc truy hi: Nghim ti u cn tm l: R rng, d(j, ) = C(j,1), j [2, n]. T cng thc truy hi trn, ta tnh c d(j, S) vi mi S ch cha 1 nh. T , ta tnh c d(j, S) vi mi S ch cha 2 nh, ... C th tip tc, ta tnh c d(k, S) vi mi S = V\{1,k}, k [2, n]. T , ta tm c

d (1, V \ {1}) = min (C (1, k ) + d (k , V \ {1, k}))


2 k n

d ( j , S ) = min (C ( j , k ) + d (k , S \ {k}))
kS

nghim ti u. - C th, xt th nh hng c 4 nh v di cc cung c cho bi ma trn C nh sau:

0 5 6 8

10 0 13 8

15 9 0 9

20 10 12 0

Ta c: d(2, ) = C(2,1) = 5 d(3, ) = C(3,1) = 6 d(4, ) = C(4,1) = 8 T cng thc truy hi, ta tnh c: d(2, {3}) = C(2,3) + d(3, ) = 15 d(2, {4}) = C(2,4) + d(4, ) = 18 d(3, {2}) = C(3,2) + d(2, ) = 18 d(3, {4}) = C(3,4) + d(4, ) = 20 d(4, {2}) = C(4,2) + d(2, ) = 13 d(4, {3}) = C(4,3) + d(3, ) = 15 Tng t: d(2, {3, 4}) = min{C(2,3) + d(3, {4}), C(2,4) + d(4, {3})} = min {29, 25} = 25 d(3, {2, 4}) = min{C(3,2) + d(2, {4}), C(3,4) + d(4, {2})} = min {31, 25} = 25 d(4, {2, 3}) = min{C(4,2) + d(2, {3}), C(4,3) + d(3, {2})} = min {23, 27} = 23 Cui cng, ta c: d(1, {2, 3, 4}) = min{ C(1,2) + d(2, {3, 4}), C(1,3) + d(3, {2, 4}), C(1,4) + d(4, {2, 3})} = min {35, 40, 43} = 35 tm c hnh trnh ngn nht, gi K(j,S) l nh k, ti n t min ca cng thc truy hi tnh d(j,S). T , ta c: K(1, {2, 3, 4}) = 2 K(2, {3, 4}) = 4 K(4, {3}) = 3 Vy ng i {1, 2, 4, 3, 1} l ngn nht v t gi tr 35.

Chng II - Cac phng phap giai quyet van e

13

Tng t, c th p dng nguyn l qui hoch ng gii bi ton sau. - V d 3 (bi ton sp ba l): mt chic ba l c th cha c mt khi lng w. C n loi vt c nh s 1, 2, , n. Mi vt loi i c khi lng ai v c gi tr ci (cc tr w, ai, ci u nguyn dng, i = 1, 2, , n). Cn sp xp cc vt vo ba l ba l c gi tr ln nht c th c. Gi s rng mi loi vt c nhiu xp (bi tp).

II.2. Cc phng php th - sai


II.2.1. Phng php vt cn, nguyn l mt li, phng php sinh v th, phng php nhnh cn * Bi ton 1: Tm tp LiGii = x D: tnh cht P(x) ng. a. Phng php vt cn * Thut ton vt cn V1.1: gii BT1 { B1: LiGii = ; B2: Trong khi D thc hin: x get(D); //ly khi D mt phn t x if (P(x)) LiGii = LiGii {x}; B3: if (LiGii == ) write(Khng c li gii); else XutLiGii(LiGii); } * Ch : - Nu hn ch min D cng b th thut ton chy cng nhanh.
* V d 4: Cho trc cc s M, K nguyn dng. Tm cc b s nguyn dng x, y, z sao cho: Thay v chn D = {(x,y,z) N3 [1;M-2]3} (N l tp cc s t nhin), ta ly: D =

(BT1)

x+ y+z = M 3 3 3 x + y + z = K
{(x,y,z) N3 [1; min{M-2; 3 K 2 }]3}. Khi lp trnh, ta th hin min D bi 3 vng for theo x, y, z: Tm_xyz(M, K) { Max = min(M-2, pow(K-2,1.0/3)); for (x = 1; x Max; x++) for (y = 1; y Max; y++) for (z = 1; z Max; z++) if (x+y+z==M && pow(x,3)+ pow(y,3)+ pow(z,3) == K) XutLiGii(x,y,z); } Tht ra, vn c th ci tin chng trnh trn thu hp min D hn na (bi tp) !

Chng II - Cac phng phap giai quyet van e

14

Da vo thut ton trn, ta c th sa i cht t gii bi ton tm kim ch mt li gii sau: * Bi ton 2: Tm mt li gii x0 D: mnh P(x0) ng. (BT2)

Thut ton tm mt li gii V1.2: gii BT2 { Trong khi D thc hin: { x get(D); //ly khi D mt phn t x if (P(x)) { XutLiGii(x); Dng; // im chnh khc vi thut ton V1 } } write(Khng c li gii); } * i vi mt lp bi ton no m c th tm c mt iu kin Q(x) cho li gii x, ta c th dng thut gii sau: vi mi x D m Q(x) ng th xut li gii. Ch rng, ngoi cc li gii trn, trong D cn c th cha cc li gii khc m khng tha iu kin ny ! Nguyn l mt li sau y l mt th hin ca tng trn. b. Nguyn l mt li: * tng: Nhng con c ln hn kch thc mt li ln nht s cn li trong li ! gii bi ton (1), nu chng minh c: nu tm c iu kin Q(x) ng vi mt vi x thuc mt min con ca D c kch thc nh hn th P(y) ng vi mi y min con th: Chia li D thnh n min con Di (mi min Di c kch thc nh hn ). Vi mi i = 1 .. n, xt nu tn ti x Di m Q(x) ng th P(x) ng.
* V d 5: Tm nghim gn ng (vi chnh xc eps > 0) ca phng trnh f(x) = 0 trn min [a, b], vi f l hm lin tc. Ta bit nu f(xi).f(xi+1) < 0, vi [xi, xi+1] [a, b] v abs(xi+1-xi) < eps th xk =(xi+1+x i)/2 sai khc vi mt nghim chnh xc ca phng trnh f(x) = 0 khng qu eps/2 (mt iu kin tm nghim ca phng trnh lin tc). - Thut gii tm nghim gn ng: Nghiem_Gan_Dung(a, b, eps) { Sai_so = 1e-3; n = (b-a)/eps; xi = a;

Chng II - Cac phng phap giai quyet van e

15

for i=1 to n do { xi_1 = xi + eps; if (f(xi)*f(xi_1) < - Sai_so) writeln((xi + xi_1)/2); xi = xi_1; } }

c. Phng php sinh v th * tng: Sinh d liu (cu trc ca li gii c th khng xc nh trc khi gii m ch c to ra dn trong qu trnh tm kim li gii), sau kim tra n c tha iu kin dng hay khng ? - Thut ton sinh v th: Sinh_Th { Init; // khi to d liu xut pht Stop = False; While not Stop do { if (Accept(C)) Show(C); // nu phng n C l chp nhn th xut C if (Generate(C)=False) Stop = True; // nu khng sinh c thm phng n C no na th dng } }
* V du 6: bi ton chnh hp lp chp k ca n phn t X = 0,1, ,n-1: x1, x2, , xk, vi xi X, 1 i k. Th tc Init s khi to 0 cho vect li gii x = x1, x2, , xk. Trong v d ny khng cn n iu kin kim tra Accept: ta lun cho n nhn tr ng. Th tc Generate(x, k) s tng dn x[j] mt n v, j bt u t k n 1, cho n khi x[j]=n-1 th khi ng li 0 cho x[j], ri gim j i mt. Khi no j=0 th dng vic sinh d liu. Boolean Generate(x, k) { j = k; // sinh chnh hp k tip while (j>0 and x[j] == n-1) do { x[j] = 0; j = j-1; } if (j==0) return False; else { x[j] = x[j]+1; return True; } } (Ngoi ra, ta c th gii bi ton ny bng cch ny s dng thut ton qui TryRiRc(i) trong II.2.3 vi iu kin kt thc nghim l i = k).

Chng II - Cac phng phap giai quyet van e

16

cc thut ton vt cn khng b bng n t hp v thi gian v khng gian nh, ta cn: gim phc tp tnh ton (khng tnh li cc hng trong vng lp, cn tn dng li cc kt qu tnh ton cc bc trc, dng k thut lnh canh n gin cc biu thc iu kin ca vng lp, ); thu gn khng gian tm kim. * Chin lc thu hp khng gian tm kim: Trong cc thut ton vt cn tm kim li gii trong khng gian D, i vi mt lp cc bi ton no , da trn cc nh gi ton cc (v d: duyt cc b t hp), cc b (v d: bi ton sp ba-l), nu ta tm ra c cc iu kin cn cho li gii, khi ta c th ci tin thut ton bng cch loi b ngay cc phng n trong D khng tha iu kin cn ny ! Khi : . hoc xt tp D (nu c th) ch cha nhng trng thi tho mn iu kin cn cho li gii m thi, do D c thu hp ngay; . hoc xt tp D nh thng thng, nhng trong cc thut ton vt cn, ta hiu get(D) l ly ra khi D phn t x: nu x khng tha iu kin cn cho li gii th loi ngay n (v thc hin vic ny cng sm ti mc c th trnh cc thao tc tha) ri ly ngay phn t x tip theo ca D, ngc li mi kim tra tnh cht P(x). Phng php nhnh cn l mt th hin ca chin lc ny. d. Phng php nhnh cn * tng: nhnh c cha qu phi nng hn trng lng qu. Khi xy dng thm thnh phn cho li gii, dng cc php kim tra n gin xc nh chi ph ti thiu n li gii (iu kin cn cho li gii). Loi b ngay cc hng i tip theo m chi ph ti thiu ny cn ln hn c chi ph thp nht hin thi (hng khng tha iu kin cn).
* V d 7 (Bi ton ngi du lch): C n thnh ph (c nh s t 1 n n). Mt ngi du lch xut pht t mt thnh ph, mun i thm cc thnh ph khc, mi thnh ph ng mt ln ri li quay v ni xut pht. Gi thit gia hai thnh ph j, k khc nhau bt k u c ng i vi chi ph c(j,k). Hy tm mt hnh trnh c tng chi ph nh nht. Mt hnh trnh x[1], x[2], , x[n] l mt hon v ca {1, 2, , n}. Dng mng lgic Chan nh du cc thnh ph i qua: Chan[k] = True ngha l ngi du lch cha n thnh ph k. Nu vic n thnh ph k c tng chi ph d on thp nht hon thnh ton b hnh trnh ln hn chi ph thp nht hin thi th ta khng chn i tip k, ngc li th chn k. Gi s ta i qua j-1 thnh ph x[1], , x[j-1] vi chi ph l S. Nu i tip n thnh ph x[j] = k th chi ph t x[1] n x[j] l T = S + c[x[j-1],k]. on cn li ca hnh trnh gm (n-j+1) on na, vi chi ph trn mi on khng t hn Cmin (l chi ph trc tip thp nht gia hai thnh ph khc nhau trong ma trn chi ph). Tng chi ph thp nht hon thnh hnh trnh l: T + (n-j+1) * Cmin = S + c[x[j-1],k] + (n-j+1)*Cmin

Chng II - Cac phng phap giai quyet van e

17

gii bi ton ny, ta s gi th tc chnh TryRiRc(0, 2). TryRiRc(S, j) { for k =1 to n do if (Chan[k]) { T = S + c[x[j-1],k]; if (T + (n-j+1)*Cmin < Min) // Min = MaxInt trc th tc Try { x[j] = k; Chan[k] = False; if ( j == n) { if (T + c[k, xp] < Min) // xp l thnh ph xut pht { y = x; // mng y lu tr li gii tt nht tm thi Min = T + c[k, xp]; } } else Try(T, j+1); Chan[k] = True; } } }

II.2.2. Phng php ngu nhin Phng php ny c s dng khi cha bit thut ton no hiu qu hay cha c nhiu thng tin gii bi ton. a. Phng php Monte Carlo * tng: Cho hai hnh S = [a, b]m Rm, gi s bit cng thc tnh o S() ca S ph thuc vo tham s no cn tnh. Tung ngu nhin n ln (c lp) vect x = {x1, x2, , xm} (c phn phi u trn ), gi nS l s ln x S. Khi , vi n ln, ta c: S() (b-a)m.nS/n. T rt ra tham s cn tnh theo s liu thc nghim nS, n: S-1((b-a)m.nS/n) * Thut ton ngu nhin: { nS = 0; for (j=1; j n; j++) { for (k=1; k m; k++) x[k] = random(a,b); // to if (x S) nS = nS + 1; } S-1((b-a)m.nS/n); }

cc s ngu nhin [a; b)

* V d 8: Da vo phng php trn, vi m = 2, a = 0, b = 1 v S l hnh trn bn knh R=, ta c th tnh s nh sau: = S/R2 4*nS/n x S < --- > (x1 )2 + (x2 )2

Chng II - Cac phng phap giai quyet van e

18

x2

R=

x1

- Trong mt s trng hp, ta c th dng PP th ngu nhin kim tra mt tnh cht hay gi thuyt no .
. V d 9: Kim tra gi thuyt Fermat bng thc nghim: N 2 (N kh ln) l nguyn t nu: xN-1 mod N = 1, x nguyn dng < N ? ph hp vi iu kin thc nghim trn my tnh, ta xt N v s ln lp n ln va phi. Ta c thut ton sau: { for (j = 1; j n; j++) { x = 1 + random(N-1); // 1 x < N y = xN-1 mod N; // hy ci tin cch tnh ny hiu qu hn trn my tnh ! if (y 1) {cout << N << khng l s nguyn t; Dng; } } cout << N << l s nguyn t;
}

b. Thut gii di truyn GA (Genetic Algorithm) v lp trnh tin ho * Lp trnh tin ho:

Chng trnh Tin ha = CTDL + GA


* Cc c trng c bn ca GA . Ngu nhin; . Duyt ton b gii php (li gii), sau chn gii php tt nht da trn thch nghi ca chng; . Khng quan tm n chi tit vn m ch quan tm n gii php v phng php biu din n. * Cc bc tin hnh chnh ca thut gii di truyn GA - Bc 1: Chn m hnh biu din vn thng qua cc dy k hiu (s, ch hoc hn hp) biu din cho mi gii php ca vn v s c th (s li gii chp nhn c) trong qun th biu din vn . - Bc 2: Tm hm s thch nghi (Fitness function) v tnh s thch nghi cho tng gii php. - Bc 3: Da trn cc s thch nghi, thc hin vic sinh sn v tin ho (gm: lai ghp v t bin) cc gii php. - Bc 4: Tnh s thch nghi cho cc gii php mi sinh sn, loi b gii php km nht, ch gi li mt s nht nh cc gii php (c thch nghi cao). - Bc 5: Nu cha tm c gii php ti u hoc cha n thi hn (hay s th h) n nh th tr li bc 3 tm gii php mi. - Bc 6: Nu tm c gii php ti u hay ht thi hn n nh th dng v xut kt qu.

Chng II - Cac phng phap giai quyet van e

19

* Cc phng php tin ho ca GA: sinh sn (Reproduction), lai ghp (hay lai cho, Crossover), t bin (Mutation). So vi lai ghp, tn sut t bin xy ra t hn nhiu v qu trnh ny to ra thng tin hon ton mi. * Thut gii GA Thut_Gii_Di_ Truyn { t =0; Khi to lp P(t); nh gi lp P(t); while (not(iu kin kt thc)) do { t = t + 1; Chn lc P(t) t P(t-1); Kt hp cc c th ca P(t); nh gi lp P(t); } } * V d 10: Gii phng trnh sau trn tp s t nhin: x2 = 64. . Bc 1: - Xc nh s lng c th (gii php, bin x): 4 - Dng dy k hiu nh phn {0, 1} biu din mi bin . Bc 2: - Ch nh cc c th: 4, 21, 10, 24 - Biu din p s: dng 5 bits STT Thp phn Nh phn 1 4 00100 2 21 10101 3 10 01010 4 24 11000 . Bc 3: - Chn hm s thch nghi: F(x) = 1000 |x2 64|0, x[-32..31] - Tnh thch nghi ph hp cho p s 1000 STT Thp phn Nh phn HS thch nghi Chn 1 4 00100 1048 X 2 21 10101 623 3 10 01010 964 X 4 24 11000 488 . Bc 4: - Chn cc p s (c thch nghi gn ph hp): 4, 10 - Tin ho: lai ghp v tr th 3:

0 0 1 0 0

0 0 1 1 0

10

0 1 0 1 0

0 1 0 0 0
Chn X

. Bc 5: Tnh thch nghi cho gii php mi: STT Thp phn Nh phn 1 6 00110 2 21 10101 3 8 01000 4 24 11000

HS thch nghi 1028 623 1000 488

Chng II - Cac phng phap giai quyet van e

20

. Bc 6: x = 8 c thch nghi 1000: ph hp Dng. . Bc 7: p s: x = 8.

II.2.3. Nguyn l m cung * Vt cn bng cch quay lui: trnh trn b nh v khng gian D qu ln, ta c th xc nh dn cc thnh phn ca li gii bi ton mc d cc li gii c cu trc khng tuyn tnh phc tp. Li gii xLG = (x0, x1, ) c xy dng dn (xut pht t x0 X0) trong qu trnh gii cho n khi gp iu kin kt thc P(xLG). Cc thnh phn ca li gii c lu dn vo tp DONG (c cu trc stack). Khi , ti mi thi im ang xt, phn t nh ca DONG chnh l phn t cui ca ng i c kh nng dn n li gii. V vy, ta c th kim tra iu kin kt thc P(DONG) bi Top(DONG) DICH. Di dng qui, ta c cc thut ton sau gii BT1 v BT2. * Thut ton vt cn V2.1 (di dng qui gii BT1) { for each x X0 do {DONG = {x}; Try_1(DONG); } } Try_1(DONG) (*) { // iu kin nhn bit trng thi kt thc ca mt li gii if (P(DONG)) // hay (Top(DONG) DICH) XutLiGii(DONG); else for each x B(Top(DONG)) if (Q(x)) // nu c yu cu thm v tnh cht ca li gii, chng hn { Push (x, DONG); Try_1(DONG); Pop(y, DONG); // Tr li trng thi trc quay lui }

// (xDONG) khi i hi cc thnh phn ca li gii khng trng lp

} trong : Push(x,DONG), Pop(x,DONG) v x = Top (DONG) ln lt l cc thao tc a vo, ly ra v xem mt phn t x nh ngn xp DONG; B(x) ( D) l tp cc trng thi k tip c th ly t x xt tip. Nu tp xut pht X0 trong bi ton ch gm mt im x0 th thi hnh thut ton, ta ch cn gi Try_1({x0}).

Chng II - Cac phng phap giai quyet van e

21

a ra thut ton V2.2 gii BT2, ta ch cn thay iu kin nhn bit trng thi kt thc mt li gii (*) bi iu kin dng chng trnh sau y: if (P(DONG)) // hay (Top(DONG) DICH) { XutLiGii(DONG); Dng; // iu kin dng } Thut ton vt cn kiu qui trn y vt ht mi kh nng nhng ti mi bc ch lu mt kh nng, nhng kh nng cn li c lu dn trong ngn xp thng qua c ch qui. Nu biu din khng gian tm kim ca bi ton di dng th hay cy th thut ton vt cn trn y thc cht l th tc tm kim theo chiu su.
Trong trng hp li gii l vect hu hn chiu (chng hn, kch thc c bit trc l c nh hu hn), ta c phin bn n gin v hiu qu sau y thng gp trong cc ti liu tin hc trc y. Th tc vt cn Try trong trng hp cu trc ri rc tuyn tnh n gin TryRiRc(j: integer) { for (k thuc tp cc kh nng) do if (chp nhn kh nng th k) { Xc nh xj theo kh nng th k; nh du ( xt) trng thi mi; if (xj l trng thi kt thc) // hay tho iu kin kt thc XutLiGii(x); else TryRiRc(j+1); Tr li trng thi c; // B vic nh du trng thi c } } * V d 11: Tm cc ng i t im xut pht n ca ra ca m cung trn hnh II.1. Ta biu din m cung di dng ma trn k a[j,k] =1 hay 0 nu c hay khng c ng i t j n k tng ng, vi s nh n=20. Gi th tc TryRiRcMCung(1) sau y gii bi ton m cung. TryRiRcMCung (SoDinh) // trc gn x[1] = XutPht = 1 { int k; for (k=1; k <= n; k++) // nu c ng i t nh x[SoDinh] n nh k v cha i qua k if (a[x[SoDinh], k]==1 && DaDiQua[k]==0) { x[SoDinh+1]=k; DaDiQua[k] = 1; // nh du i qua k if (x[SoDinh+1] == Ca_ra) XutLiGii(x, SoDinh+1); else TryRiRcMCung (SoDinh+1); DaDiQua[k] = 0; // B vic nh du trng thi c

Chng II - Cac phng phap giai quyet van e

22

} } 15 14 16 13 12 8 7 Ca ra=20 17 10 11 9 5 2 6 4 (Hnh II.1) 19 18 Xut pht=1 3

II.2.4. Cc phng php biu din v gii quyt vn trong khng gian trng thi bng cy v th a. Biu din vn trong khng gian trng thi Trc tin, ta xt hai v d. - V d 12 (bi ton Toci hay tr chi n2 - 1 s, n l s t nhin, n > 2): Trong bng vung n hng, n ct, mi cha mt s nguyn t 1 n n2 -1 sao cho khng c hai c cng gi tr. Ch c c mt trong bng b trng (ta c th gn tr 0). Xut pht t mt cch sp xp x0 no cc s trong bng, hy dch chuyn trng sang phi, tri, ln, xung (nu c th c) a v bng mc tiu x* nh sau:
x0
2 1 7 8 6 3 4 5

x*
1 8 7 2 6 3 4 5

(Tr chi 8 s, khi n=3) gii bi ton ny, ta biu din n trong khng gian trng thi S. Mi trng thi l mt ma trn cp n x n nhn cc gi tr nguyn t 0 n n2 -1 (tr 0 thay cho v tr trng trn bng) sao cho khng c hai phn t khc nhau c cng tr, mi ton t o l mt php dch chuyn hp l t bng ny sang bng khc. S trng thi chp nhn c kh ln: khong (1/2)*16! 10,5*1012 (khi n=4). Mt cch biu din trc quan i vi khng gian trng thi v cc ton t l th. Trong th nh hng ny cc nh tng ng vi cc trng thi, cn cc cung tng ng vi cc ton t. Ta cn xy dng dn cc ton t, bt u t cc ton t c th p dng cho trng thi u, sau mi bc thm vo mt ton t hp l no cho n khi t c trng thi ch.

Chng II - Cac phng phap giai quyet van e

23

im mu cht khi gii quyt bi ton trong khng gian trng thi l la chn mt dng m t no ca cc trng thi ph hp vi bn cht vt l ca bi ton. Ta cn biu din cc trng thi sao cho vic p dng cc ton t bin i trng thi tr nn n gin hn. * C hai cch biu din: tp O cc ton t bin i trng thi hoc tp P nhng lut sinh chuyn trng thi: - Gi O l tp cc hm o xc nh v nhn tr trn khng gian trng thi S: o:SS Vi v d trn, tp cc ton t chuyn i trng thi O gm 4 ton t O={olen, oxuong, otrai, ophai}. Chng hn, ton t dch chuyn v tr trng ln trn olen c xc nh nh sau: olen(A) = B trong : . B = [bij], A = [aij], gi s trng trong ma trn A v tr (i0, j0 ) aio-1, jo nu (i, j) = (io, jo) , io > 1 nu (i, j) = (io -1, jo) , io > 1 . bi, j = aio, jo nu ngc li ai , j - Gi P l tp cc lut sinh (production rules) pik: Si Sk chuyn t trng thi Si n trng thi Sk Vi v d trn (vi n=3), ta c cc lut sinh sau:
x1 x4 x6 x3 x5 x7 x8 x2 x1 x6 x2 x3 x4 x5 x7 x8

P1

x1 x4 x6

x2

x3 x5 x7 x8

x1 x4 x6

x2 x7

x3 x5 x8

P2

x1 x4 x6

x2

x3 x5 x7 x8

x1 x4 x6

x2 x3 x5 x7 x8

P3

x1 x4 x6

x2

x3 x5 x7 x8

x1 x4 x6

x3 x2 x5 x7 x8

P4

Chng II - Cac phng phap giai quyet van e

24

x1 x6

x2 x3 x4 x5 x7 x8

x1 x6

x2 x3 x4 x5 x7 x8

P5

x1 x6

x2 x3 x4 x5 x7 x8

x1 x6

x2 x3 x4 x5 x7 x8

P6

- Nhn xt: . Vi cch biu din dng cc ton t c biu din tng qut: s cc ton t t (4, vi bi ton n2 1 s) , rt gn v d ci t. . Vi cch lit k di dng cc lut sinh tuy trc quan nhng s lng qu ln (4(n2 n), vi bi ton n2 1 s). Ta thng dng cch lit k ny vi cc bi ton m php chuyn i trng thi rt kh khi qut. - V d 13 (bi ton thp H Ni): Cho 3 cc 1, 2, 3. cc 1 ban u c n a sp xp theo th t a ln di v a nh trn. Hy dch chuyn n a sang cc 3 sao cho: mi ln ch chuyn 1 a, trong mi cc khng chp nhn a ln nm trn a nh. Vi n=3, ta c: 1 A3 A2 A1 2 3 1 2 3 A3 A2 A1

Vi bi ton ny, ta c th biu din mi trng thi l b ba (i, j, k) m t a A1 cc i, a A2 cc j, a A3 cc k. Khi , cc ton t dch chuyn trng thi sau l hp l: (i, j, k) (i, j, j) , k j (i, j, k) (i, j, i) , k i ... * biu din bi ton trong khng gian trng thi, cn xc nh r: - Khng gian S biu din cc trng thi. - Tp O cc ton t bin i trng thi hoc tp P cc lut sinh. - Trng thi u xo S v tp cc trng thi ch DICH S

Chng II - Cac phng phap giai quyet van e

25

* Mt cch hnh thc, ta c th pht biu bi ton tm kim trong khng gian trng thi di 3 dng tng ng nh sau: Cho trng thi u xo S v tp cc trng thi ch DICH S. Dng 1 (ton t): Problem(S, O, xo, DICH) Hy tm: . dy trng thi xo,..., xn sao cho xn DICH v c th p dng dy cc ton t bin i trng thi oi O no chuyn t xi-1 n xi oi : xi-1 xi i = 1, 2, ..., n . hoc dy ton t o1 ,..., on O : on (on-1 (...o1 (xo )...)) DICH Dng 2 (lut sinh): Problem(S, P, xo, DICH) Hy tm: . dy trng thi xo,..., xn sao cho xn DICH v c th p dng dy cc lut sinh pi P no chuyn t xi-1 n xi pi : xi-1 xi i = 1, 2, ..., n . hoc dy lut sinh p1 ,..., pn P sao cho: pn p1 xo x1 ... xn DICH Nu khng gy ra nhm ln ta c th dng k hiu Problem(xo, DICH). Dng 3 ( th): th nh hng G l cp G = (S, A), trong S l tp cc nh, A l tp cc cung: A = {(a, b)/ a, b S} S x S. Vi mi n S, ta k hiu tp cc nh con ca n l: B(n) = {con S: (n,con) A}. Mt cch tng qut, ta nh ngha: B1 (n) B(n)
B k (n ) B(B k 1 (n )) =
mB k 1 ( n )

B(m), k > 1

Khi :
B(n ) U B i (n )
i =1

c gi l tp cc nh hu du ca n v nu m B(n) th n c gi l t tin ca m. Dy cc nh p ={n1,..., nk} sao cho: i=1,..., k-1, ai = (ni , ni+1 )A c gi l ng i t n1 n nk hay cn c th biu din bi: p ={a1 ,..., ak-1}, vi ai = (ni , ni+1 ). Nu tn ti mt ng i t nh n n nh m th m B(n) v ngc li. Khi ta cn ni rng m c th t c t n.

Chng II - Cac phng phap giai quyet van e

26

Khi th G c nh gc noS v n S\{no} tn ti duy nht ng i t no n n ( n S\{no}, nB(no) v ! m S, n B(m)) th G c gi l cy vi gc no. Thng thng, ngi ta thm vo mi cung mt i lng th hin ngha c lng ha ca n thng qua hm gi c: A R+, c(ni, nk) R+, (ni, nk) A. Khi , ta nh ngha gi ca ng i p = {n1, ..., nk}:
c( p ) = c(ni , ni +1 )
i =1 k 1

Trng hp c 1 th c(p) c gi l di ng i ca p. Theo ngn ng th, khng gian trng thi tng ng vi th nh hng trong : cc trng thi tng ng vi cc nh trong th v c mt cung ni t trng thi s n trng thi t nu tn ti ton t o sao cho o(s) = t (hoc tn ti lut sinh p sao cho p: s t). * Bi ton tm kim trong khng gian trng thi c th pht biu di dng th nh sau: (BT3) - Bi ton 3: Problem_3(G = (S, A), x0, DICH) Cho th G = (S, A), vi nh xut pht x0 S, tp ch DICH S. Hy tm mt ng i t x0 n mt nh no thuc tp DICH. - Bi ton 3*: (bi ton tm kim ti u) (BT3*) Problem_3*(G = (S, A), x0, DICH, c) Cho th G = (S, A), vi hm gi c: A R+, nh xut pht x0 S v tp ch DICH S. Hy tm mt ng i t x0 n mt nh no thuc tp DICH v lm ti u hm gi. T tp cc cung A, ta c th xy dng cc thut ton tm kim li gii da trn ton t B(x), x S. Trong nhiu bi ton thc t, B(x) chnh l tp cc trng thi k tip hp l t x. Khi khng gian trng thi S qu ln, li gii xLG = x0, x1, thng c xy dng dn trong qu trnh gii cho n khi gp iu kin kt thc P(xLG) (hay P(x*): khi tm c trng thi mc tiu x* TrngThiCui(xLG) DICH ng vi BT3 hoc thm mt iu kin no , chng hn ti u mt hm mc tiu hay hm gi ng vi BT3*). * Hai phng php xy dng th G = (S, A)

Chng II - Cac phng phap giai quyet van e

27

- PP tng minh: tp cc nt S v tp cc cung A bit v c xy dng trc. Thng thng, i vi cc th hu hn ng vi cc bi ton n gin v c kch thc nh mi c th biu din tng minh chng di dng bng. - PP khng tng minh: xut pht t nh ban u x0, trong qu trnh tm kim li gii, xy dng dn cc nh con da trn ton t B(n) to ra cc nh con ca n. Ngha l ch khi no xt n nh n, tp cc nh con n mi c xy dng. Phng php ny rt c ngha, c bit l i vi cc th biu din nhng bi ton phc tp v c kch thc ln. Nu xt BT3 di dng BT1 th D l mt tp con ca tp Un1Sn.Trong nhng bi ton ln v phc tp, do kh xc nh tp D ngay t u hoc c th xc nh D nhng kch thc ca n qu ln, vic dng cc thut ton vt cn V1.a hay V1.b l khng hiu qu. i vi lp cc bi ton m cc thnh phn ca li gii c th xc nh dn trong qu trnh gii, ta s ci bin cc thut ton n s V1 thu c dn cc thut ton hiu qu hn trong phn tip theo nh: TmKim, AT, AKT, A*, Trong cc thut ton hay thut gii tm kim li gii sau y, ta dng tp DONG lu cc trng thi xt, tp MO dng lu cc trng thi d nh s xt trong cc bc k tip. b. Phng php tm kim li gii cho BT3 (di dng lp) Trong phn ny, khng c g kh khn, ta a ra thut ton tm kim li gii cho bi ton m rng ca BT3 nh sau: Cho X0 ( S) l tp nhng trng thi c th xut pht. Thay v tm ng i t x0 n DICH, ta tm ng i m c th xut pht t mt trong cc trng thi x X0 n DICH. Khi , gii BT3 ta ch cn gi: TmKim({x0}, DICH). * Thut ton tm kim: (Gii BT3: Problem_3(G = (S, A), X0, DICH)) TmKim(X0, DICH) MO = X0; DONG = ; // tp DONG c cu trc stack if (y X0: P(y)) // hay if (y MO DICH) XutLiGii(y, DONG); Dng; while (MO ) x = get(MO); // ly mt phn t x ra khi tp MO DONG = DONG U x; // a x vo tp DONG if (y B(x) : P(y) ng) // hay if (y B(x)DICH) XutLiGii(y, DONG); Dng; else MO = MO U B(x); // a tp nh con B(x) ca x vo tp MO write (Khng c li gii);

Chng II - Cac phng phap giai quyet van e

28

T y v sau, gn hn vi dng ci t thnh chng trnh my tnh, ta qui c: Remove(x, MO) l thao tc rt phn t x khi u hng i MO, Add(x, MO) l thao tc thm phn t x vo ui hng i MO, AddSet(B(x),MO) l thao tc thm tp B(x) vo ui hng i MO; Push(x, MO) l thao tc thm phn t x vo u (hay nh) ngn xp MO, PushSet(B(x), MO) l thao tc thm tp B(x) vo nh ngn xp MO, Pop(x, MO) l thao tc rt x khi nh ngn xp MO, x = Top(MO) l hm tr li (nhng khng ly ra khi) phn t u danh sch MO.
- Thut ton XutLiGii(y, DONG) cho cy G (tng qut hn cho th m mi nt c khng qu mt nt cha), vi tp DONG c cu trc stack, di dng ng i t x0 n y c lu trong ngn xp LiGii nh sau: XutLiGii(y, DONG) { LiGii = {y}; while (not(EmptyStack(DONG))) { Pop(x, DONG); // nu c cung ni t x n phn t nh ngn xp LiGii th a // x vo thnh phn LiGii if ((x, Top(LiGii)) A) // hay Top(LiGii) B(x) Push(x, LiGii); } ShowStack(LiGii); // xut cc phn t ca stack LiGii }

Da trn thut ton TmKim nhm tm li gii u tin cho bi ton BT3, ta c th ci bin thu c thut ton vt cn di dng lp VtCn tm mi li gii ca bi ton sau (bi tp): (BT4) - Bi ton 4: Problem_4(G = (S, A), x0, DICH) Cho th G = (S, A), vi nh xut pht x0 S, tp ch DICH S. Hy tm mi ng i t x0 n mt nh no thuc tp DICH. c. Cc dng c bit thng gp: Cc thut ton tm kim li gii trong khng gian trng thi theo chiu rng, chiu su, chiu su dn, tm kim cc tiu gi thnh AT. gii BT3 trn cy G, trong thut ton TmKim, vi cc cch chn cu trc d liu khc nhau ca tp MO, ta s c cc phng php tm kim khc nhau. Sau y, ta lun xem x = Get(MO) l thao tc ly phn t x ra khi u danh sch MO.

Chng II - Cac phng phap giai quyet van e

29

* Phng php tm kim theo chiu rng (TKR): chnh l thut ton TmKim, vi tp MO c cu trc hng i (queue) hay thay MO = MO U B(x) bi php ton AddSet(B(x),MO). - Nhn xt: Khi G l cy vi gc x0, . nu tn ti t nht mt ng i t xo ti tp DICH th thut ton TKR dng v cho ta ng i p c di ngn nht (thm ch khi G l cy v hn); . nu khng tn ti ng i nh vy th thut ton dng nu v ch nu cy G l hu hn. - V d 14: Xt cy nh hnh di y vi tp DICH = {H}. Th tc TKR cho kt qa l ng i ADH theo hnh trnh duyt cc nh ABCDEFGH.
A B E C F G D H

(TKR) * Phng php tm kim theo chiu su (TKS): chnh l thut ton TmKim, vi tp MO c cu trc ngn xp (stack), hay thay MO = MO U B(x) bi php ton PushSet(B(x),MO). - Nhn xt: Khi G l cy vi gc x0, . nu cy G hu hn th th tc TKS s dng v nu tn ti ng i t x0 n DICH th s cho kt qa l mt ng i t xo ti tp DICH, khi ng i nhn c trong th tc TKS khng nht thit l ng i ngn nht. Hn na, nu cy G v hn, th tc TKS c th lp n v hn, thm ch trong trng hp tn ti ng i t xo n tp DICH. . nu khng tn ti ng i t x0 n DICH th th tc TKS ch dng khi cy G hu hn. - V d 15: Xt cy nh hnh di y vi tp DICH = {D, H}. Th tc TKS cho kt qa l ng i AD theo hnh trnh duyt cc nh ABCEFD.
A B E C F G D H

(TKS)

Chng II - Cac phng phap giai quyet van e

30

khc phc tnh trng khng dng ca thut ton TKS ngay c khi tn ti ng i t gc ca cy n DICH, ta a vo i lng DS c trng cho gii hn su v dng khi nim su d(x) ca nh x trong cy G = (S, A) c nh ngha qui nh sau: d(xo) = 0 d(con) = d(cha) + 1, nu con B(cha) hay (cha, con) A. * Phng php tm kim su dn (TKSD) gii BT3 vi su DS = k 1: iu chnh li thut ton TmKim, vi tp MO c trang b cc php ton c bn ca c hng i ln ngn xp. TKSD(x0, DICH, k) MO = x0; DONG = ;
DS = k;

// chn DONG c cu trc stack

// hay if (x0 DICH) XutLiGii(x0, DONG); Dng; while (MO ) x = get(MO); // ly phn t x t u danh sch MO // a x vo tp DONG Push(x, DONG); if (y B(x)DICH) XutLiGii(y, DONG); Dng; if (P(x0))
if (d(x) > DS) DS = DS + k; // khi d(x) <= DS if (d(x) < DS) PushSet(B(x), MO);// tm theo chiu su else AddSet(B(x), MO); // d(x) = DS: vic tm c lan theo chiu rng

write (Khng c li gii); - Nhn xt: Khi G l cy vi gc x0, . vi k = 1, th tc TKSD tr thnh th tc TKR. Khi k rt ln (chng hn k chiu cao ca cy G hay k i vi cy v hn) th tc TKSD s ging hay gn ging tng ng nh th tc TKS; . vi k 2 th tc TKSD tm kim theo chiu su i vi cc nh c su nm trong khong t tk n (t+1)k vi t = 0, 1, 2, ...; . nu tn ti t nht mt ng i t gc ti DICH th th tc TKSD s dng v cho kt qa l ng i c di khc ng i ngn nht khng qu k-1; . nu trong cy khng tn ti ng i nh vy th th tc TKSD dng khi v ch khi cy G l hu hn.

Chng II - Cac phng phap giai quyet van e

31

- V d 16: Xt th tc TKSD trn cy nh hnh di y, vi su k = 2, th t duyt cc nh l : ABDECFG__HQRKSTLMUVNXYOP


A B H Q C P D E F G K L M N O R S T U V X Y (TKSD)

* Phng php tm kim cc tiu AT: Gii bi ton ti u BT3* trn cy G - Problem_3*(G = (S, A), x0, DICH, c) - vi tiu chun ti u: tm mt ng i t x0 n mt trong cc trng thi thuc tp DICH c hm gi ng i g0 cc tiu. Trong , hm gi ng i g0 c xc nh theo kiu qui nh sau: g0(x0) = 0 g0(con) = g0(cha) + c(cha, con), (cha, con) A. Thut ton sau y tng t nh thut ton TmKim, trong : tp DONG c cu trc stack v tp MO cha cc phn t (x, g0(x)), thao tc ly ra mt phn t c thc hin u danh sch MO, vic a mt phn t x vo danh sch MO ChnTng((x, g0(x)), MO) c thc hin theo kiu chn (x, g0(x)) vo MO tng dn theo g0() t u n cui danh sch MO. AT(x0, DICH) DONG = ; // DONG c cu trc stack 0 0 g (x0)=0; MO = (x0, g (x0)); while (MO ) Pop((x, g0(x)), MO); // trong MO, x nh v c g0(x) nh nht ! if (x DICH) XutLiGii(x, DONG); Dng; // a x vo nh stack DONG Push(x, DONG); ChnTngTp(B(x), MO); write (Khng c li gii); - Nhn xt: . Th tc TKR l trng hp ring ca th tc AT khi hm gi c1. . Th tc TKS cng l trng hp ring ca th tc AT khi: hoc thay thao tc ChnTngTp(B(x), MO) bi ChnGimTp(B(x), MO); hoc xem hm gi c: A R v c -1.

//ChnTng(y,MO) yB(x)={(con,g0(con)):(x,con)A & g0(con)=g0(x)+c(x, con)}

Chng II - Cac phng phap giai quyet van e

32

. Nu trong cy G tn ti ng i p: xo DICH th th tc AT s dng v cho kt qa l ng i po sao cho c(po) min, nu: hoc cy G hu hn, hoc cy G v hn nhng tng gi theo mi nhnh v hn phi phn k hoc hi t v mt gi tr ln hn gi ti u ! - V d 17: Xt cy v gi cc cung c cho nh hnh di y v tp DICH = {D, H}. Th tc tm kim cc tiu AT cho kt qa l ng i AFH.
A 4 B 3 C 5 D (Thut ton AT) 6 2 E F 7 1 G H

- Ch : Trong thut ton AT, ta chn phng n ti u nht trong tt c nhng phng n i qua (c lu li quay lui khi lc hng). Chnh v th, vi cc bi ton ln, c th xy ra tnh trng nhanh trn b nh nu cc bc k tip cn lu qu nhiu; khi ta c th dng heuristic sau: thay v lu ht 100% cc phn t B(x) vo tp MO, ta ch cn lu p%, 1 p 100, m thi ! Gi tr ca p ph thuc vo tng bi ton c th v ti nguyn my tnh hin c. II.2.5. Quy bi ton v bi ton con v cc chin lc tm kim trn th V/HOC a. Qui bi ton v bi ton con * tng: da trn tng ca phng php chia tr, tch bi ton ln v phc tp ban u thnh nhng bi ton con nh, n gin ti mc s cp (li gii ca chng bit). - V d 18: Xt bi ton thp H ni vi n = 3 v dng cch biu din nh trong v d 2 phn 2.2.4.a. Ta qui bi ton v cc bi ton con dng V nh sau:
(111)(333) (111)(122)
(Chuyn 2 a A,B t cc 1 sang cc 2)

(122)(322)

(322)(333)

(111)(113)

(113)(123)

(123)(122)

(322)(321)

(321)(331)

(331)(333)

(Hnh II.2.5.1)

Lin kt nhng li gii s cp trn t tri sang phi, ta c li gii ca bi ton ban u: (111)(113)(123) (122)(322) (321)(331)(333).

Chng II - Cac phng phap giai quyet van e

33

Cy bnh thng l cy HOC, dng c bit ca cy V/HOC. Cy V/HOC thng c dng biu din qu trnh chia bi ton ln thnh nhiu nhm cc bi ton con c ni kt lgic vi nhau bi dy cc php ton lgic: and, or. b. Biu din bi ton di dng th V/HOC th nh hng V/HOC l th nh hng thng thng G = (S, A) v thm vo tnh cht: vi mi nh n S tt c cc nh con ca n B(n) cng thuc vo mt trong 2 kiu: nh V hay nh HOC. Khi cc nh con m ca n l nh V th cc cung ni cc nh con ca n m B(n) c ni vi nhau bi ngoc trn (nh du gc trn trong hnh hc phng). S tng ng gia qu trnh qui bi ton v bi ton con vi th V/HOC c cho trong bng sau:
Qui bi ton v bi ton con Bi ton Ton t qui bi ton v bi ton con Bi ton ban u Bi ton s cp Cc bi ton con ph thuc Cc bi ton con c lp Li gii bi ton Gii bi ton th V/HOC nh Cung nh gc (nh xut pht) nh l nh con dng V nh con dng HOC th con li gii Tm th con li gii

nh ngha nh gii c (nh g): - Cc nh l tng ng vi bi ton con s cp gii c (hay nh kt thc) l nh gii c. - Nu nh n c cc nh con l nh HOC th n gii c khi v ch khi tn ti mt nh con ca n gii c. - Nu nh n c cc nh con l nh V th n gii c khi v ch khi mi nh con ca n gii c. th li gii l th con ca th V/HOC ch bao gm nh xut pht v cc nh gii c lin quan n n. nh ngha nh khng gii c (nh kg): - Cc nh l tng ng vi bi ton con s cp khng gii c l nh khng gii c. - Nu nh c cc nh con l nh V th n l khng gii c khi v ch khi tn ti mt nh con ca n khng gii c. - Nu nh c cc nh con l nh HOC th n l khng gii c khi v ch khi mi nh con ca n khng gii c. - V d 19: Trn hnh II.2.5.2 l cc th V/HOC, trong cc nh gii c tng ng vi cc hnh trn t m v cc cung trong th con li gii cng c t m, cc nh khng gii c c nh du bi vng trn.

Chng II - Cac phng phap giai quyet van e

34

- Nhn xt: Khi th V/HOC khng c nh V th n tr thnh th thng thng. Lc th li gii suy bin thnh mt ng i t nh xut pht n mt nh kt thc no . Mc ch ca qu trnh tm kim trn th V/HOC l chng t nh xut pht c th gii c hay khng gii c theo hng ngc t cc nh l n nh xut pht v trong trng hp khng nh th ch ra th con li gii (c th tha mn thm mt tnh cht no ).
o o o o o o o o o o o o o o o o

(Hnh II.2.5.2)

c. Cc phng php tm kim trn cy V/HOC (theo chiu rng, chiu su, cc tiu gi thnh) n gin, ta ch xt cc phng php tm kim trn cy V/HOC. Ty theo phng php (PP) la chn th t cc nh s xt m ta c cc phng php tm kim khc nhau theo: chiu su, chiu rng, tm kim cy li gii c gi thnh nh nht, ... S khc bit ch yu ca cc PP tm kim trn th hay cy V/HOC vi cc PP tm kim trong khng gian trng thi mc trc l vic kim tra tnh gii c ca nh xut pht (xem n gii c hay khng gii c) v cc PP sp xp, la chn nh m phc tp hn nhiu. Vi mi nh n, ta s cn dng n 2 th tc gn nhn gii c g(n S) hay gn nhn khng gii c Kg(n S).

Chng II - Cac phng phap giai quyet van e

35

Vi mi nh n S, ta dng cc k hiu: - Nu n l nh kt thc th kt(n) = true, ngc li kt(n) = false. g , khi n l nh gii c kg , khi n l nh khng gii c -Nhn(n) = kx , (khng xc nh) nu n cha thng tin quyt nh
hoc n cha c xt ti

Ch rng, mt nh khng phi l gii c khng nht thit l khng gii c m cn c th l khng xc nh ! - KiuV(n)=true nu cc nh con ca n l nh V v nhn tr false nu ngc li. - n gin ho trong cc thut ton s trnh by sau y, ngay t u, ta s gn nhn: . g : i vi cc nh l gii c . kg : i vi cc nh l khng gii c . kx : i vi mi nh cn li * Th tc gn nhn gii c g(n S) // do B(n) {1 if (nhn(n) = kx) then if (n MO U DONG) then // nu n MO U DONG: cha xt n if (KiuV(n)) then {2 bien = true; while (B(n) and bien) do { con get(B(n)); g(con); bien = (nhn(con) == g); } if (bien) then // mi nh con dng V ca n u g nhn(n) = g }2 else {3 bien = false; repeat { con get(B(n)); g(con); bien = (nhn(con) == g) } until (bien or B(n) == ); if (bien) then // c mt nh con dng HOC ca n g nhn(n) = g }3 }1 Tng t, c th vit th tc khng gii c Kg(x S) (bi tp).

Chng II - Cac phng phap giai quyet van e

36

* Dng chung ca cc th tc tm kim trn cy V/HOC Input : Cy V/HOC G = (S,A) vi gc xo. Output: Thng bo Khng thnh cng nu xo khng gii c v thnh cng nu xo gii c v khi xut cy li gii. Tnh g hay kg ca gc c lan truyn ngc t l. Trong cc thut ton ca phn ny, ta s dng tp DONG c cu trc stack. TmKim_V_HOC(xo, DONG) {1 MO = {xo}; DONG = ; while (MO ) do {2 n get(MO); // ly n ra khi u danh sch MO Push(n, DONG); if (B(n) ) // nh n c con then {3 MO MO U B(n); bool = false; while (B(n) and not bool) do { con get(B(n)); bool = (nhn(con) == g); } if (bool) then // nu c t nht 1 con g th xem li gc c g khng ? { g(xo); if (nhn(xo) == g) then { write(Thnh cng); XutCyLiGii(x0, DONG); exit; } else Loi khi MO cc nh c t tin l nh gii c } }3 else // n l nh l // n l nh l g, xem li gc c g khng ? if (kt(n)) then { g(xo); if (nhn(xo) == g) then { write(Thnh cng); XutCyLiGii(x0, DONG); exit; } else Loi khi MO cc nh c t tin l nh gii c } else // n l nh l kg, xem li gc c kg khng ? { Kg(xo); if (nhn(xo) == Kg) then exit(Khng thnh cng)

Chng II - Cac phng phap giai quyet van e

37

else Loi khi MO cc nh c t tin l nh khng gii c }1 }2 }

* Thut ton tm kim theo chiu rng trn cy V/HOC Chnh l thut ton TmKim_V_HOC(xo, DONG), vi cu trc tp MO l hng i. Nu cy li gii tn ti th th tc tm kim theo chiu rng s dng v cho kt qa l cy li gii c cao nh nht. - V d 20: Xt cy V/HOC nh trn hnh II.2.5.3. Th t a cc nt vo danh sch DONG c ch ra bi cc s bn cnh cc nh. Cc nh t m l cc nh gii c. Cy li gii c phn bit bi cc cung t m. Qu trnh a cc nh vo tp MO v DONG nh sau:
MO 1 2,3 3;4,5 4,5;6,7 5;6,7;8,9 6,7;8,9;12,13 7;8,9;12,13;10,11 DONG 1 1,2 1,2,3 1,2,3,4 1,2,3,4,5 1,2,3,4,5,6 (nh 2,3: g) (nh gc 1 : g Kt thc)

1 2 3 4 o 12 o 5 6 18 o o7 o19 o8 9 o13 10 11 o15 20 21 22 o23 (Hnh II.2.5.3)

* Thut ton tm kim theo chiu su trn cy V/HOC Chnh l thut ton TmKim_V_HOC(xo, DONG), vi cu trc tp MO l ngn xp.
* Thut ton tm kim cc tiu gi thnh trn cy V/HOC Cho cy V/HOC G = (S, A) vi gc x0 v hm gi c: A R+. tm cy li gii c gi cc tiu, ta cn n khi nim hm gi ti u h(n) ca cy li gii c gc l nh n bt k v hm gi c lng h0(n) ca n. nh ngha: hm gi ti u h(n) ca cy li gii c gc n c xy dng nh sau: - Nu n l nh l v

Chng II - Cac phng phap giai quyet van e

38

. gii c (nh kt thc) th h(n) = 0. . khng gii c th hm h(n) khng xc nh - Nu n c cc nh con n1, ..., nk l: . nh HOC th: h(n) = min (c(n, ni) + h(ni)). . nh V th: k h(n) = (c(n, ni) + h(ni)), vi kiu gi tng cng
i=1

h(n) = max (c(n, ni) + h(ni)), vi kiu gi cc i


1 i n

(Lu rng h(n) khng xc nh i vi cc nh khng gii c) Mc ch ca vic tm kim l xy dng cy li gii c gi cc tiu h0(no). - Trn thc t, trong thut ton ta cn xc nh v s dng hm c lng heuristics ho i vi cc nh khng phi l nh khng gii c. Cy li gii c xy dng dn trong qu trnh m rng cy la chn, ti mi thi im cc nt l ca n thuc mt trong 3 dng sau: a. Cc nh l gii c (nh kt thc). b. Cc nh l khng gii c (nh khng kt thc v khng c con). c. Cc nh cha c tho (cha c x l). Mi nh ny ca cy la chn gi l nh mt. - Ta xy dng c lng ho ca h nh sau: (1) 1. n l nh mt - Nu n l nh l gii c th ho(n) = 0. - Nu n l nh l khng gii c th ho(n) khng xc nh. - Nu n cha c x l th lm gi tr ho(n) c th ly mt c lng heuristic no ca h(n). c lng ny da trn cc thng tin heuristics v bi ton. 2. n khng l nh mt: nu n c cc nh con n1,..., nk l: - nh HOC th: ho(n) = min (c(n, ni) + ho (ni)). - nh V th: k ho(n) = (c(n, ni) + ho(ni)), vi kiu gi tng cng
i=1

h (n) = max (c(n, ni) + ho (ni)), vi kiu gi cc i


1 i n

- Trong cy tm kim, mi bc c th cha mt tp cc cy con c gc xo sao cho chng tr thnh phn trn ca cy li gii y . Ta gi cc cy ny l cy li gii tim tng gc xo. Da vo ho c th xy dng mt cy li gii tim tng To gc xo c nhiu trin vng tr thnh phn trn ca cy li gii tht s gc xo nh sau: (2) 1. nh xut pht xo To. 2. Nu n To c cc nh con n1,..., nk l nh : a. HOC th chn mt con nio a vo To sao cho: c(n,nio)+ho(nio) min v nhn(nio) kg. b. V th a tt c n1,..., nk vo To nu nhn(ni) kg i = 1, .., k TmKim_V_HOC_CcTiu {1 MO = {xo}; To xo ; while (MO ) do {2 n Get(MO); // ly n ra khi u danh sch MO DONG {n} U DONG; if (kt(n)) // n l nh l g then { g(xo);

Chng II - Cac phng phap giai quyet van e

39

if (nhn(xo) == g) then { Xut cy li gii ti u To; exit; } else Loi khi MO cc nh c t tin l nh gii c } else if (B(n) ) // n khng l nh l // theo (1) then { for each m B(n) do Tnh ho(m); for each m MO U DONG do Tnh ho(m); MOMO U B(n); // ChnTngTp(B(n), MO) theo h0(n) xd(To); // Xy dng cy To da trn n v B(n) theo (2) } else // n l nh l Kg { Kg(xo); if (nhn(xo) == kg) then exit(Khng thnh cng) else Loi khi MO cc nh c t tin l nh khng gii c }

}1

}2

- V d 21: Xt cy V/HOC nh hnh II.2.5.4. a,9,9 b,8,7 d,3,3 h,2 n,o i,6 r,o j,2 s,o e,3,3 k,7 o o t,3 u,2 (Hnh II.2.5.4) o v,3 l,7 c,14,8 f,7,3 m,6 o y,2 g,2,2

o o o,o p,2 q,2

o o w,2 x,2

Cc s bn cnh nh l gi tr h v ho. i vi cc nt mt trong qu trnh tm kim cc gi tr ho l cc nh gi heuristics gi tng cng ca bi ton tng ng. Ly ho = h i vi cc nt su 3, 4 (cc nt t h n y), ho(d) = 3, ho(e) = 3, ho(f) = 3, ho(g) = 2, ho(b) = 7, ho(c) = 8, ho(a) = 9. Qu trnh tm kim c ch ra trn hnh II.2.5.5 v II.2.5.6. Cy li gii tim tng ch ra bi cc cung t m.

a.

b. (Hnh II.2.5.5)

c.

Chng II - Cac phng phap giai quyet van e

40

Vn cn t ra l chn nh no trong cc nh V ca To x l. C th chn cc nh mt trong To c xc sut ln nht sao cho c th dn n bc b gi thuyt rng To s l phn trn ca cy li gii c gi ti u. Vi gi tng cng th nh c xc sut ln nht chng t s khng ph hp ca To l nh c gi tr ho ln nht. Vi gi cc i ta chn nh MO trong To nh sau: Xut pht t xo i trong cy To, nu gp mt nh n no c nh con l nh V th chn cung t n ti nh con ni sao cho c(n,ni ) + ho(ni ) max. Qu trnh a cc nh vo tp MO v DONG nh sau: To MO DONG (a,9) /* (a,ho) */ (a,9) (a,9) (b,7) (b,7),(c,8); min (b,7) (d,3) ,(e,3) (d,3) ,(e,3);(c,8); (d,3) (h,2) (h,2),(i,6);(e,3);(c,8); min (h,2) (n,0),(o,0) (n,0),(o,0;(i,6);(e,3);(c,8) (n,0),(o,0) (e,3) (e,3),(c,8) (e,3) (j,2) (j,2),(k,7);(c,8) min (j,2) (r,0),(s,0) (r,0),(s,0);(k,7);(c,8) (r,0),(s,0) ( Kt thc) (Hnh II.2.5.6)

II.2.6. Phng php GPS (General Problem Solving) Phng php ny cn gi l phng php mc ch - phng tin (EndsMeans). PP GPS l s tng qut ha ca nhng PP gii quyt vn i vi bi ton biu din vn trong khng gian trng thi trnh by. - tng: Gi s bi ton c biu din trong khng gian trng thi S v cn phi a ra cch bin i t trng thi ban u xo S v trng thi cui x* S. Trong cc PP da trn lgic hnh thc qu trnh m rng cy tm kim da trn cc thng tin nh lng: s php bin i s dng v c lng heuristics ho phn nh mi lin h gia xo v x*. Trong khi , GPS quan tm n s khc bit i gia xo v x* (theo ngha nh tnh ln nh lng) v mi lin h gia chng vi cc php bin i trng thi oj. Nh vy, gi s xut pht t xo ta i ti trng thi x. Xem xt mt khc bit quan trng nht i gia x v x*, da vo xc nh php bin i oj no hiu qa nht bin i x sao cho gim s khc bit i nhiu nht. Kt qa nhn c trng thi mi oj (x) v c nh vy tip tc cho n khi x x*. - Ba yu t c bn trong PP GPS: a. Xc nh khng gian trng thi S, trng thi u xo S, trng thi cui x* S v tp cc php bin i O t trng thi ny sang trng thi khc: O = { oj oj: S S, j = 1..n } b. Xc nh tp cc kiu khc bit gia cc trng thi trong khng gian = { i i : S2 R, i = 1..m } c. Xy dng ma trn M vi cc ct ng vi cc ton t, cc hng ng vi cc s khc bit c th c M = (m ij ) m x n , trong :

Chng II - Cac phng phap giai quyet van e

41

0, nu ngc li (C th cho mij nhng tr khc phn nh tt hn tc dng ca ton t oj n s khc bit i). Bi ton Input: - Tp S cc trng thi, trng thi u xo, trng thi cui x* - Tp = { 1, ..., m} cc s khc bit - Tp O = { o1 ,..., on } cc ton t - Ma trn M = (m ij ) m x n Output: Ra thng bo Thnh cng nu a c xo v x* Thut gii GPS { x = xo; OP = ; while (x x*) do { D = match(x, x*) ; // D = { i1, ..., ik} l tp s khc bit gia x v x* get(D); // chn ra s khc bit quan trng nht = i D for j=1 to n do if (m ij = 1) then OP = OP U {oj}; // OP ={oj m ij=1} o get(OP); // chn ton t o = oj OP lm gim s khc bit i nhiu nht x = o(x); } if (x = x*) Xut li gii; } y th tc match(x, x*) cho php xc nh nhng im khc bit gia x v x*. Chng hn, s khc bit gia nh x v x* trong th biu din khng gian trng thi S c th l di ng i t x ti x*. - V d 22: Cn phi chng minh s tng ng logic gia hai biu thc mnh : R ( P Q) (Q V P) R p dng phng php GPS gii bi ton trn. . Trong khng gian biu din cc mnh lgic xt 4 kiu khc bit sau: T: C s khc bit v du (ph nh) trong biu thc. C: Khc nhau v s cc php ton (,,). G: Khc nhau v phng php nhm cc mnh . P: Khc nhau v v tr cc thnh phn trong hai biu thc. . Trong bi ton ny, ta ly cc ton t bin i trng thi l 3 php bin i tng ng sau:

m ij =

1 , nu php bin i oj lm gim s khc bit i

Chng II - Cac phng phap giai quyet van e

42

R1: AB BA ; AB BA R2: A B A B R3: A A . Xt ma trn M sao cho cc ct tng ng vi cc php bin i : R1-R3.
R1 T C G P R2 1 1 R3 1

t : L1 R ( P Q) , Lo (Q V P) R ch 1: Bin i L1 v Lo S khc bit: D = {T, P, C}. Vi P (P = get(D)), OP = {R1}: chn R1 p dng vo L1 ta c: L2 = ( P Q) R. ch 2: Bin i L2 v Lo S khc bit: D = {T, C, P}. Vi C (C = get(D)), OP = {R2}: chn R2 p dng vo L2 ta c: L3 = ( P Q) R. ch 3: Bin i L3 v Lo S khc bit: D = {T, P}. Vi P (P = get(D)), OP = {R1}: chn R1 p dng vo L3 ta c: L4 = (Q P) R. ch 4: Bin i L4 v Lo S khc bit: D = {T}. Vi T (T = get(D)), OP = {R2, R3}: ta chn R3 mi lm gim s khc bit T ca L4, ta c: L5 = (QP)R Lo. Bi ton c chng minh. - Ngoi ra, nu qui bi ton v dng: [R ( P Q)] [(Q V P) R] v [(Q V P) R ] [R ( P Q)] th ta c th gii bi ton bng: th tc tch Wong hay th tc hp gii Robinson s c trnh by trong chng 3.

II.3. K thut Heuristic


Nhng bi ton, c bit l khi chng c kch thc ln v c cu trc phc tp, c thut ton kh thi vi phc tp khng qu a thc, thng rt hp. - Hn ch ca thut ton: Trn thc t, ta thng gp nhiu bi ton: . hoc cho n nay cha c thut ton no gii; . hoc c thut ton gii nhng khng kh thi v khng gian nh v thi gian do phc tp ca n c cp vt qu a thc; . hoc c cc phng php gii mc d c thc t chp nhn nhng li vi phm mt s tnh cht ca thut ton nh tnh xc nh hay tnh ng. Chng

Chng II - Cac phng phap giai quyet van e

43

hn, chuyn t bc s cp ny n bc s cp sau i khi li cn b sung thm thng tin kinh nghim (rt ra trong qu trnh tm kim li gii thc t) c th ca bi ton mi quyt nh c. Nhng bi ton lin quan n s thc c gii trn my tnh, nu chp nhn li gii gn ng hoc gn ti u th c th tn ti nhiu cch gii n gin v hiu qu hn. gii quyt kh khn ny ngi ta m rng tnh xc nh, tnh ng ca thut ton v b sung thm cc tri thc kinh nghim c th hay mo gii c c cc thut gii heuristics. - Cc c trng ca thut gii heuristic: thng tm c li gii tt (khng chc lun lun l tt nht) hay gn tt mt cch n gin, nhanh chng v i khi c o (so vi nhng thut ton tng ng gii cng mt bi ton). C 2 cch a cc thng tin heuristics c t vo cc th tc tm kim: . cc tri thc c np ngay trong biu din ca bi ton; . cc hm nh gi heuristics nhm lng ho cp ca kh nng la chn vic thc hin. - Cc k thut heuristics lin h cht ch vi chin lc iu khin cc hng tm kim li gii v x l cnh tranh; chng c chia thnh 2 lp chnh: . nh tnh: di dng cc lut nu ... th . nh lng: di dng cc hm c lng heuristics ho. Cc hm nh gi c xem l cng c c rt hiu qu khi s dng k thut heuristic. Hai vn quan trng trong lp trnh heuristic c s dng cc hm nh gi l: tch nhng du hiu c ch v t hp cc du hiu ny th hin thnh nhng hm nh gi tt. Mt k thut heuristics c coi l hp l khi n cho php tin hnh nh gi cc kh nng lm r kh nng no tt hn cc kh nng cn li.
- Hm s heuristics Dng tng qut ca cc hm nh gi: f(p) = f(t1, ... , tn), trong ng vi mi kh nng p, dng gii tch ca hm nh gi f ph thuc vo cc tham s t1, ... , tn v tr v mt gi tr f(t1, ... , tn) c trng cho kh nng p. . Trng hp n gin nht (dng afin): f(t1, ... , tn) = ai.ti , vi ai l cc h s c trng cho trng s ca cc tham s ti. . Phc tp hn l dng ton phng: f(t1, ... , tn) = ai.ti + bi.ti2 + cij .ti.tj
i=1 j=1 i j=1 n n n

- Qu trnh xy dng hm heuristic gm 3 vn chnh sau: . Xc nh cc du hiu c t si ca bi ton; . Vi mi kh nng p, cc du hiu c t si c lng ho bi cc gi tr ti. Xc nh dng ca hm nh gi f(p) = f(t1, ... , tn) da trn cc gi tr c trng cho cc thuc tnh ti v cc tham s; . Xc nh gi tr ca cc tham s cho tng bi ton c th.

Chng II - Cac phng phap giai quyet van e

44

II.3.1. Cc thut gii tm kim ti u trn cy v th vi tri thc heuristic (BT3**) Problem_3**(G = (S, A), x0, DICH, c, h0) a. Thut gii AKT (Algorithm for Knowledge Tree search) gii bi ton ti u BT3** vi tri thc b sung heuristic trn cy Tng t thut ton AT tm kim cc tiu trn cy G = (S, A) c gc x0 (phn II.2.4.c), nhng thay hm g0(x) bi f 0(x) = g0(x) + h0(x). - ngha: . g0(x): gi chi ph tht s t x0 n x, cch tnh g0(x) theo cng thc qui: g0(x0) = 0 & g0(con) = g0(cha) + c(cha, con) (cha, con) A. . h0(x): c lng chi ph t x n tp DICH, hay l hm c lng kh nng dn n li gii. . Vic dng hm f 0(x) = g0(x) + h0(x) khi chn la phng n k tip, khng ch quan tm n chi ph tr t im xut pht x0 n trng thi hin ti x, m cn tham kho thm c thng tin heuristic c trng cho kh nng nhanh dn n ch cui cng t trng thi hin ti. C th xem cc phng php ny l cc thut gii vt cn thng minh. y l cch gii thng minh v c o m con ngi thng s dng khi gp cc bi ton kh trong thc t nh chng minh nh l, gii cc bi ton suy lun lgic, chi c, - Nhn xt: C th xem AKT l tng qut ho ca AT khi xt h0 0. tm c ng i ti u, ta cn chn hm c lng h0(x) h*(x) x S, vi h*(x) l hm gi ti u tht s t x n DICH.
b. Thut gii A* gii bi ton ti u BT3** vi tri thc b sung heuristic trn th tng qut Tp MO, DONG cha cc phn t E c dng (x, cha(x), g0(x), f0(x)), vi qui c: Ex =x, Echa = cha(x), Eg0 = g0(x), Ef0 = f0(x). ChnTng(E, MO) l thao tc chn E vo MO theo th t tng ca f0(x) = g0(x) + h0(x) t u n cui danh sch MO. A*(xo, DICH) {1 go(xo) = 0; Tnh fo(xo) = ho(xo); MO {(xo, rng, 0, fo(xo))}; DONG ; while (MO ) do {2 E get(MO); // trong MO, E nh v c f0(Ex) nh nht ! Push(DONG, E); if (Ex DICH) then { XutLiGii(E, DONG); Dng;} for each con B(Ex) do {3 g0(con) = g0(Ex) + c(Ex, con); fo(con) = go(con) + ho(con); if (con (MO U DONG)x) then ChnTng((con, Ex, go(con), fo(con)), MO); else {4 if ( y MO and con == yx and go(con) < go(yx)) { Loi(y, MO); // loi y khi tp MO ChnTng((con, Ex, go(con), fo(con)), MO); }

Chng II - Cac phng phap giai quyet van e

45

if ( y DONG and con == yx and go(con) < go(yx)) { Loi(y, DONG); // loi y khi tp DONG Push((con, Ex, go(con), fo(con)), DONG);
Cp nht li go v fo cho cc hu du ca con lu

}3 }2 write(Khng thnh cng); }1

}4

c. Cc v d - V d 23: Xt bi ton tr chi 8 s nh trong v d 1 (hnh II.3.1). Ta xc nh hm go(x) l di ng i hin ti t xo n x (s php dch chuyn v tr trng a trng thi xo v trng thi x), cn i vi ho(x), ta c th tnh t nht theo hai cch sau y. . Cch 1: ho1(x) l s lng ch s (khc trng) trong trng thi x khng nm ng v tr ca chng trong trng thi ch. Chng hn, vi nh gc xo, go(xo) = 0, ho1(xo) = 4, do fo1(xo) = go(xo) + ho1(xo) = 4. Trn hnh II.3.1, ta c kt qa p dng th tc A* vi tri thc b sung ho1(n) c cho gc trn bn tri mi trng thi, gi tr ca f o1 i vi mi nt c cho gc trn bn phi ca n. Cc s nm nh trn mi trng thi l th t xt chng trong th tc. Vi cch chn hm c lng heuristic khng tt nh ho1, ta c th i nhm mt bc (bc 3). . Cch 2: ho2(x) l tng s cc php di chuyn t nht tng ng vi mi ch s (khc trng) trong trng thi x cn di chuyn n ng v tr ca n trong trng thi ch. Chng hn, vi nh gc xo, go (xo) = 0, ho2(xo) = 5, do fo2(xo) = go(xo) + ho2(xo) = 5. Trn hnh II.3.1, ta c kt qa p dng th tc A* vi tri thc b sung ho2(n) c cho gc di bn tri mi trng thi, gi tr ca f o2 i vi mi nt c cho gc di bn phi ca n. Vi cch chn hm c lng heuristic ho2 tt hn ho1, ta i khng nhm bc no, do ho2 phn nh s khc nhau gia hai trng thi tt hn. Ta ni heuristic ho2 cha nhiu thng tin hn heuristic ho1 nu: h2o(n) h1o(n). Qua , ta thy vic s dng tri thc b sung thng qua hm ho ng vai tr rt quan trng. N cho php gt b nhng thng tin khng c trin vng, nhng nu ho vt qu gii hn h tht s th c th thut ton nhanh dng song khng cho kt qu mong mun. Hm ho v go c nh hng kh ln n sc mnh heuristics ca thut gii A*.
1

Chng II - Cac phng phap giai quyet van e

46

5 28 3 1 64 6 75

6 7 3 3 283 14 5 765 3 83 214 6 765 5 7 6 9

28 3 1 64 5 7 5 2 3 28 3 1 4 4 7 65

4 5 4 5 4 3 23 184 3 765 5 2 23 184 2 765 6 1 123 84 7 1 65 5 6 5 5 5 5 5 5 7 7 283 164 75 6 7 4 28 3 1 4 5 7 65 4 23 18 4 4 76 5 6 7 7 7

4 28 3 71 4 6 6 5

7 9

0 1 2 3 5,2 1 2 3 784 84 0 7 6 5 5,2 6 5 (Hnh II.3.1) h=2 f=2 h=3 f=4 h=1 f=3 h=2 f=3 h=3 f=5 h=2 f=4

g=0: g=1:

g=2:

g=3: h=2 f=5 h=0 f=3 h=1 f=4 (Hnh II.3.2)

- V d 24: Xt bi ton thp H ni vi n = 2 (hnh II.3.2). Hm fo(n) = g (n) + ho(n), vi go(n) l s a di chuyn, ho(n) l thng tin v mi lin h gia n v trng thi ch, chng hn:
o

Chng II - Cac phng phap giai quyet van e

47

- Nu cc C c 2 a, a nh trn a to th ho = 0. - Nu cc C c 1 a to th ho = 1. - Nu cc C cha c a no th ho = 2. - Nu cc C c 1 a nh th ho = 3. Li gii ti u cho bi ton thp H Ni c trnh by qua cy li gii in m trong hnh II.3.2. Mt cch tng qut, ta c th ly f o(n) = go(n) + ho(n), vi ho(n) l tri thc b sung ch ra trin vng ca nh nm trn ng ti u. Do c th xem f o(n) l c lng ca hm f(n) = g(n) + h(n) vi g(n) l gi ng i ti u t no ti n, h(n) l gi ng i ti u t n ti tp DICH. Ni cch khc f o(n) l xp x gi ng i ti u t no ti tp DICH v i qua nh n. Gi tr go(n) i vi n c th tnh c da trn tng thut gii A* (gi ng i gn cc tiut no ti n), cn c lng ho(n) da trn thng tin heuristics gn lin vi bi ton.
Nhng kt qa sau bo m tnh ng n v tnh ti u ca gii thut A*. - (Tnh ng n): Nu i vi mi nh n N ta c 0 ho(n) h(n) v tn ti s > 0 sao cho i vi mi cung a A, c(a) th th tc A* dng v cho kt qa l ng i p t no ti n* DICH sao cho g(n*) min. - Gi s cc th tc Ai* s dng hm nh gi: fio(n) = gio(n) + hio(n), i = 1, 2 Thm vo , h2o tha mn iu kin h2o (m) - h2o (n) h(m, n), trong h(m,n) l di ng i ngn nht t m ti n v vi mi n N : 0 h1o(n) h2o (n) h(n). Khi : s nt a vo tp DONG ca th tc A2* bao gi cng nh hn s nt i vi th tc A1*. - Ba nhn t nh hng n sc mnh heuristics l: gi ca ng i nhn c, s nh phi tho trong qu trnh x l, chi ph tnh ton gi tr hm ho.

- Nhn xt: . Trong s cc th tc tm kim s dng tri thc b sung heuristic ho, th tc s dng trit cc thng tin v cc nh (ho = h v fo = g + h) l tt nht v th tc AT (fo = go, ho = 0) l ti nht. . Nu ch cn tm mt ng i no ti nh ch th c th khng cn tnh n go, tc l fo = ho . Trong mt s trng hp, nu khng s dng go th s nt phi tho c th tng ng k so vi khi s dng go. - Mt s heuristics . La chn theo giai on: Qu trnh tm kim c th tin hnh theo tng giai on, mi giai on ch gi li mt tp con no cc nh trong tp MO, chng hn cc nh vi gi tr fo gn nh nht. . Hn ch s nh con: Mi ln tho mt nh n, ch gi li nhng nh m B(n) sao cho fo(m) thuc ln cn ca fo nh nht.

Chng II - Cac phng phap giai quyet van e

48

. Xy dng dn cc nh con: Mi ln tho nh con ch xt ti mt vi nh c trin vng nht, u tin ch ch n nh con quan trng nht, cn cc nh khc khi no cn mi a ra. II.3.2. Nguyn l tham lam Vi thut gii s dng nguyn l tham lam gii bi ton ti u BT3*: ta s dng cc thut ton TmKim vi mt t iu chnh: ch chn li gii tt nht trong mt bc k tip (ch cha chc tt nht trong c qu trnh), do khng ci t c ch quay lui. u im ca nguyn l ny l trong mt s trng hp, c th nhanh thy li gii. Nhng nhc im ca n l trong cc trng hp khc, c th tn ti li gii ti u nhng thut ton ny khng tm ra. Khi , do khng d phng c ch quay lui nn c th khng tm ra li gii, mc d n vn tn ti ! (Tham ci li trc mt m khng n ci li ton cc v khng d phng lu li ng i qua quay lui khi lc hng!) ThamLam(x0, DICH) DONG = ; // c th chn DONG c cu trc stack MO = x0; if (x0 DICH) XutLiGii(x0, ); Dng; while (MO ) x = get(MO); // ly mt phn t x ra khi tp MO Push(x, DONG); // a x vo tp DONG if ( phn t y tt nht trong B(x)) // lun tn ti nu B(x) ! if (y DICH) XutLiGii(y, DONG); Dng; MO = MO Uy; // a y vo tp MO write (Khng tm thy li gii); Tht ra MO ch gm khng qu 1 phn t ! V vy, c th thay thut ton trn bi: ThamLam2(x0, DICH) DONG = ; // c th chn DONG c cu trc stack // hay if (x0 DICH) if (P(x0)) XutLiGii(x0, ); Dng; x = x0; while ( phn t y tt nht trong B(x)) // lun tn ti nu B(x) ! Push (x, DONG); // a x vo tp DONG if (P(y)) // hay if (y DICH)

Chng II - Cac phng phap giai quyet van e

49

XutLiGii(y, DONG); Dng; x = y; write (Khng tm thy li gii); - V d 25: (Traveling Saleman) Xy dng mt hnh trnh TOUR c chi ph nh nht COST cho bi ton i qua n thnh ph, vi ma trn chi ph C, sao cho bt u t thnh ph u v i qua mi thnh ph ng mt ln.
Bin th ca thut gii ThamLam2 l thut gii GTS gii bi ton ngi bn hng du lch trn y. Thut gii GTS { // Khi to TOUR = ; COST = 0; v = u; // thm tt c cc thnh ph for k = 2 to n do { // Chn cnh k tip <v, w> l cnh c chi ph nh nht t v n // cc nh cha c s dng w: TOUR = TOUR + <v, w>; COST = COST + C(v, w); v = w; // khi w c s dng } // Chuyn i hon thnh TOUR = TOUR + <v, u>; COST = COST + C(v, u); }

Minh ha vic thc hin:

1 2 7 5 1 4 4 3 C = 2 4 1 2 7 4 1 3 5 3 2 3

1 5 3 5 3 2 7 4 2

1 2 4 4

Chng II - Cac phng phap giai quyet van e

50

1. TOUR = ; COST = 0; u = 1; w = 2; 2. TOUR = <1,2>; COST = 1; u = 2;

1 1 2 1

w = 5; 5 3. TOUR = {<1,2>, <2,5>}; COST = 4; u = 5; 1 w = 3; 5 4. TOUR = {<1,2>, <2,5>, <5,3>} COST = 6; u = 3; 1 w = 4; 5 2 1 3 2 1 3

1 2

2 3

2 3 3 1 4 5. TOUR = {<1,2>, <2,5>, <5,3>, <3,4>}; COST = 7; u = 1; TOUR = {<1,2>, <2,5>, <5,3>, <3,4>, <4,1>}; COST = 14;

Tm min trong cc phn t cn li ca hng. Xut pht ct no th b ct


1 2 4 5 3 1 2 7 5 1 4 4 3 2 4 1 2 7 4 1 3 5 3 2 3

Chng II - Cac phng phap giai quyet van e

51

Do khng quay lui nn li gii va tm cha chc l ng i ngn nht. Tht vy, li gii va tm c chiu di ln hn ng i: TOUR2 = {<1, 3>, <3, 4>, <4, 5>, <5, 2>, <2, 1>} vi COST2 = 10. II.3.3. Nguyn l hng ch, phng php leo ni (Hill-Climbing) - Vi thut gii s dng nguyn l hng ch hay leo i (Hill climbing) gii bi ton ti u BT3*, ta s dng cc thut ton TmKim vi mt t iu chnh, trong khng ci t c ch quay lui ! u im ca nguyn l ny l trong mt s trng hp, c th tm thy rt nhanh li gii. Nhng nhc im ca n l trong nhiu trng hp khc, c th tn ti li gii ti u nhng thut gii ny khng tm ra, hoc n ch tm thy li gii ti u a phng! (Ch ch n ti u a phng trc mt, khng d phng lu li ng i qua quay lui khi lc hng, khng bit li mt bc tin nhiu bc hn!) Leoi(x0, DICH) DONG = ; // tp DONG c cu trc stack MO = x0; if (P(x0)) // hay if (x0 DICH) XutLiGii(x0, ); Dng; while (MO ) x = get(MO); // ly mt phn t x ra khi tp MO Push(x, DONG); // a x vo tp DONG if ( phn t tt nht y B(x) m tt hn x) // cha chc tn ti d B(x) ! if (P(y) ng) // hay if (y DICH) XutLiGii(y, DONG); Dng; MO = MO Uy; // a y vo tp MO write (Khng tm thy li gii); Tht ra MO ch gm khng qu 1 phn t ! V vy, c th thay thut ton trn bi: Leoi2(x0, DICH) DONG = ; // tp DONG c cu trc stack x = x0; Push(x, DONG); if (P(x0)) XutLiGii(DONG); Dng; while (B(x) and phn t tt nht y B(x) m tt hn x) //cha chc tn ti d B(x) !

Chng II - Cac phng phap giai quyet van e

52

Push(y, DONG); // a x vo tp DONG if (P(y)) // hay if (y DICH) XutLiGii(DONG); Dng; x = y; write (Khng tm thy li gii);
- Mt bin th ca thut gii Leoi_2 l th tc sau: Hill_Climbing { - Bc 1: n = nh xut pht; - Bc 2: if (n DICH) then Dng; - Bc 3: else Chn h0(ni) b nht trong s mi nh con ni B(n) (gi nh ny l Next(n)); - Bc 4: if (h0(n) < h0(Next(n)) then Dng; else n = Next(n); - Bc 5: Goto 2; }
- Nhn xt: khc phc nhc im ca thut ton: nhanh ri vo ln cn ca ti u a phng m khng thot ra c, ta c th kt hp thm thut gii di truyn GA.

II.3.4. Nguyn l sp th t, nguyn l trng khp nht Ta minh ha cc nguyn l trn qua bi ton phn cng cng vic trn cc my v bi ton xp hng vo container. - V d 26: (Bi ton phn cng cng vic) Gi s c n my: P1, . . ., Pn v m cng vic: J1, . . ., Jm. Cc cng vic c tin hnh ng thi v c th c thc hin trn bt k my no. Mi ln mt cng vic c a vo my, my ch dng khi cng vic hon tt. Thi gian hon tt cng vic Ji l ti. Thi gian np cng vic vo my l 0. Vn t ra l: B tr cng vic vo cc my sao cho tng thi gian x l ht mi cng vic l b nht. M hnh 1: . 3 my: P1, P2, P3. . 6 cng vic
Ji ti 1 2 2 5 3 8 4 1 5 5 6 1

Chn phng n: (J2, J5, J1, J4, J6, J3 ); T = 12.

Chng II - Cac phng phap giai quyet van e

53

P1: P2:

J2 J5

5 5 J3 12

P3: J1 J4 J6 2 3 4

* Nguyn l sp th t: Sp xp cng vic theo th t thi gian gim dn. B tr cng vic theo th t trn: L* = (J3, J2, J5 , J1, J4, J6 ); T = 8. y l li gii ti u. 8 P1: J3 P2: P3: J2 J5 5 J1 7

J4 J6 5 6 7

M hnh 2(Phn v d v nguyn l sp th t khng cho li gii ti u) . 2 my: P1, P2. . 5 cng vic Ji 1 2 3 4 5 ti 3 3 2 2 2 Phng n:(J1, J2, J3, J4, J5 ) khng ti u (sp gim dn theo thi gian): T=7. Phng n ti u l: L* = (J1, J3, J4, J2, J5 ); T = 6. - V d 27.1: Bi ton ng gi (xp hng vo container) Cho dy cc gi hng:1, 2, 3, 4, 6, 7, 7, 9; kch thc container: 13. Vn t ra: cn xc nh s container t nht cha ht hng. - Cc cch (heuristics) xp thng khc nhau vo container: H1: - Th t: ty - Cch xp ty . H2: - Th t: Gim dn theo kch thc - Cch xp: Ln trc, nh sau. Nguyn l trng khp nht H3: - Th t: ty - u tin xp trng kht. H4: - u tin xp trng kht. - Sau xp theo Th t: Gim dn ca kch thc

Chng II - Cac phng phap giai quyet van e

54

p dng nguyn l ny vo v d trn, ta c phng n ti u: (9, 7, 7; 4, 6, 3; , , 2; , , 1;) cha trong 3 container. 4 6 9 7 1 2 3 7

- V d 27.2: (Phng n thu c t nguyn l trng kht nht khng l phng n ti u !) Cho dy cc gi hng:2, 2, 5, 6, 8, 9; kch thc container: 16. . Phng n thu c t nguyn l trng kht nht: cn 3 thng . Phng n ti u ch cn 2 thng ! (Bi tp) - Nhn xt: i vi cc bi ton phc tp v a dng trong thc t, nu ch p dng ring mt phng php, tng hay mt nguyn l heuristic ring r th khng th gii quyt ni. Khi ta cn p dng chin lc lai nhiu phng php, tung v nguyn l gii mt cch ph hp.

Chng II - Cac phng phap giai quyet van e

55

Bi tp
1. Tm biu thc gii tch tng minh t cc h thc truy hi sau: a. +an = an-1 + 2n, n 1 a0 = 1 + b. an = 2an-1 + 1, n 1 a0 = 1 c. *Fn = b1 Fn-1 + b2 Fn-2, n 2 vi {F0, F1}, b1, b2 cho trc (trng hp tng qut) d. +Dy s Fibonacci: F0 = 0, F1= 1 Fn = Fn-1 + Fn-2 , n 2 e. *un 4un-1 + 4un-2 = 2n, n 2 u0 = 0, u1 = 1 f. *T(n) = 2T(n/2) + n 1, n 2 T(1) = 1 g. un = un-1 - un un-1, n 1 u0 = 1 h. **c0 = 0, c1 = 0
cn = n + 1 + 2 n 1 c k , n 2 n k =1

2. Th hin phng php chia trbng cc thut ton qui gii cc bi ton sau: a. +Tm min v max ca mt dy s. b. *Tro i hai phn ca mng (khng nht thit c di bng nhau) m khng dng mng ph. Vit thut ton (bng nhiu phng php khc nhau, nu c th) v ci t chng trnh gii cc bi ton sau (trong c cc v d c gii thiu trong l thuyt): (Nguyn l qui hoch ng) 3. +V d 2: bi ton ngi giao hng. 4. V d 3 (bi ton sp ba l c gi tr ln nht): C n loi vt c khi lng {ai} v gi tr {ci} vo mt ba l c khi lng w (nguyn dng) . Gi s mi loi vt c nhiu xp. Hy tm cch xp sao cho t gi tr cao nht. 5. Tm dy cc h s ca nh thc. 6. Bi ton i tin: C n loi tin A1, A2, , An (nguyn dng). Hy tm cch dng cc loi tin ny c c s tin L cho trc (nguyn dng v khng b hn loi tin nh nht) sao cho tng s t l t nht.

Chng II - Cac phng phap giai quyet van e

56

(Phng php vt cn n gin hoc vt cn c quay lui) 7. +V d 4. 8. Bi ton 8 qun hu. 9. +Bi ton m i tun (ch c th s dng phn t cm canh). 10. *Tm cc tp con ca dy A cc s nguyn dng sao cho c tng bng mt s nguyn dng M cho trc (sp va kht cc vt vo ba l). (Nguyn l mt li) 11. +V d 5: tm nghim gn ng ca phng trnh f(x) = 0 trn [a, b], vi f(x) lin tc trn [a,b]. (Phng php sinh v th) 12. +V d 6: bi ton tm cc b chnh hp lp. 13. Tm cc b t hp, chnh hp (khng lp). (Phng php nhnh cn) 14. +V d 7: bi ton ngi du lch. (Phng php Monte-Carlo) 15. +V d 8: tm s t cng thc tnh din tch hnh trn hoc th tch hnh cu. 16. +V d 9: Kim tra gi thuyt Fermat bng thc nghim. 17. +Tnh gn ng din tch hnh phng gii hn gia trc honh v th hm s lin tc khng m trn on [a, b]. (Thut gii di truyn - GA) 18. *V d 10: gii phng trnh x2 = 25. (Nguyn l m cung ) 19. +V d 11: bi ton m cung. 20. +Da trn thut ton TmKim nhm tm li gii u tin cho bi ton BT3, ta c th ci bin thu c thut ton vt cn di dng lp VtCn tm mi li gii ca bi ton sau (bi tp): (BT4) - Bi ton 4: Problem_4(G = (S, A), x0, DICH) Cho th G = (S, A), vi nh xut pht x0 S, tp ch DICH S. Hy tm mi ng i t x0 n mt nh no thuc tp DICH. (Cc phng php tm kim trong khng gian trng thi theo chiu rng, chiu su, su dn, cc tiu) 21. +V d 12: bi ton Toci hay n2 1 s.

Chng II - Cac phng phap giai quyet van e

57

(Cc phng php tm kim trn th V/HOC theo: chiu rng, chiu su, su dn, cc tiu) 22. +V d 13: bi ton thp H Ni vi n = 2, 3. (Phng php GPS) 23. Bi ton chng minh tnh hng ng ca cc biu thc lgic sau: a. + [a (b c)] [c b a] b. *[a (ac b) (ab cd)] d (Phng php heuristic) 24. Tm thut gii heuristics gii bi ton thp H Ni vi: a. +n = 3 b. *n 2 bt k. 25. +Bi ton Toci hay n2 1 s . 26. +Tm ng i ngn nht t thnh ph A n thnh ph B da trn bn cc thnh ph sau y, trong ngoi cc khong cch tht s gia hai thnh ph c ch ra bi cc s trn cc cung, cn c dy h0 cha chiu di c lng t mt thnh ph bt k n B l khong cch ng chim bay t thnh ph n thnh ph B. A 366 B 0 C D F G L M O P R S T Z 160 242 178 77 244 241 380 98 193 253 329 374 Dy h0 cha khong cch c lng t cc nh n B O
71

Z
75 151 140 118 88

A S
99

F
211

R
97

T
111

L
70

146

P
100

B
66

M
75

G
120

(Bn thnh ph)

Chng II - Cac phng phap giai quyet van e

58

(Nguyn l tham lam) 27. +V d 25: bi ton ngi du lch. 28. *Bi ton t mu (trn th). (Nguyn l leo i) 29. Tm ng i t nh 1 n mt trong cc nh thuc tp DICH = {5} trn th sau vi gi thnh ln nht: 5 1 7 4 5 4 2 3 1 2 3 6 1 (Nguyn l sp th t v nguyn l trng khp nht ) 30. +V d 26: bi ton phn cng cng vic. 31. +V d 27: bi ton sp xp vo container.

Chng III - Bieu dien va x ly tri thc

59

Chng III BIU DIN V X L TRI THC III.1. Khi nim v biu din v x l tri thc
III.1.1. T d liu n tri thc D liu Thng tin Tri thc Siu tri thc v C s tri thc
Siu tri thc Mc tru tng Tri thc Thng tin D liu D liu th, cha c x l

- D liu (Data): c biu din di dng chui s, k t hay hn hp c hai loi m t bn thn n khng c ngha c lp. - Thng tin (Information): l d liu c t chc c y ngha i vi ngi nhn n. - Tri thc (Knowledge): l nhng thng tin lin quan n mt vn no c t chc c th gii quyt c vn . Siu tri thc (Meta Knowledge) l loi tri thc mc cao, n c tnh khi qut v tru tng hn tri thc. - C s tri thc (CSTT, Knowledge Base): l tp hp cc tri thc lin quan n mt vn c s dng trong mt h thng tr tu nhn to. N khng ch bao gm cc s kin m cn cha cc lut suy din v n c th c sp xp li khi c thm mt tri thc mi lm thay i mi lin h gia chng. H chuyn gia (Expert system) l mt h c s tri thc (Knowledgebased system) c xy dng t tri thc ca cc chuyn gia trong mt lnh vc no .
Chng Trnh = Cu Trc D Liu + Thut Ton

H CHUYN GIA = CSTT + SUY LUN

Chng III - Bieu dien va x ly tri thc

60

III.1.2. Mt s c trng ca tri thc: t gii thch ni dung, c cu trc (s phn cp gia cc khi nim v mi quan h gia chng), c tnh lin h gia cc tri thc, tnh ch ng. III.1.3. Phn loi tri thc C th phn loi tri thc theo cc quan nim sau: * Tri thc tt nh v bt nh: - Tri thc tin nh (hay tt nh) : c lp vi cm gic, c tnh ph qut v phi mu thun - Tri thc tt yu (hay bt nh): thu c t kinh nghim m tnh ng sai ca n ch c th kim tra bng cm gic hay kinh nghim vi tin cy no v c th c mt mc mu thun no . * Tri thc tn ti di hai dng c bn: - Tri thc nh lng: thng gn vi cc loi heuristics khc nhau, n ph thuc vo cht lng cc hm nh gi heuristic v c th c dng lm c s chn cc chin lc iu khin. - Tri thc nh tnh gm 3 dng chnh: . Tri thc m t (hay khai bo): cho nhng thng tin v mt s kin, hin tng hay qu trnh m khng a ra thng tin v cu trc bn trong cng nh phng php s dng bn trong tri thc . N cho php m t cc mi lin h, rng buc gia cc i tng. . Tri thc th tc: cung cp cc phng php cu trc tri thc, ghp ni, suy din v tng hp cc tri thc mi t cc tri thc c. N to c s cho cng ngh x l tri thc: suy din, qui din, qui np, hc tri thc. . Tri thc iu khin: dng iu khin, phi hp cc ngun tri thc th tc v tri thc m t khc nhau. III.1.4. Cc phng php biu din tri thc: thng qua lgic (lgic c in hay tt nh: lgic mnh hay v t; lgic bt nh: lgic tnh hung, lgic xc sut, lgic kh xut, lgic m), lut sinh, mng ng ngha, khung (frame), ... III.1.5. Cc phng php x l tri thc: chuyn i, suy lun (chng minh t ng, cc phng php gii quyt vn , ), tng hp tri thc (lin kt, sp xp, khi qut ho, ).

Chng III - Bieu dien va x ly tri thc

61

Trong bt k mt h thng biu din tri thc u c cha 3 yu t: ngn ng biu din, c ch suy dn v cng c to lp c s tri thc cho tng lnh vc c th.

III.2. Mt s phng php biu din tri thc


III.2.1. Biu din tri thc nh lgic a. Lgic c in (hay tt nh) gm : lgic mnh , lgic v t * Lgic mnh : - Xt cc mnh p ch c th nhn mt trong hai gi tr lgic: ng (True, 1) hoc sai (False, 0). - Cc php ton lgic ni kt cc mnh : php hi (and, , v), php tuyn (or, , hoc), ph nh (not, , khng), ko theo (, ), tng ng (, , ), - Vi php bin i tng ng: . (a b) ((a b) (b a)) . (a b) (a b) (b a)
( ai ) = V (ai ); ( V ai ) = (ai ) : ( DeMorgan)
1i n 1i n 1 i n 1i n

. a (b c) (a b) (a c); a (b c) (a b) (a c): phn phi

. Cc php ton , c tnh giao hon , kt hp, ly ng.

- Cc php ton lgic c thc hin theo th t u tin gim dn sau: ph nh, hi, tuyn, ko theo, tng ng. - Mi biu thc logic mnh u c th a v dng biu thc tng ng ch cha cc php , v di dng: . chun hi:
1 i n 1 ki m i

( V a ki )

. chun tuyn:
1 i n 1 ki m i

V ( a ki )

trong : aki = pki hoc aki = pki, vi pki l mnh n. - Gi tr chn l ca mt biu thc c th c tnh da trn bng chn l. Nu biu thc c n bin mnh khc nhau th xc nh gi tr chn l ca n ta phi xt n 2n b gi tr ca cc bin mnh (hn ch l s b bng n t hp).

Chng III - Bieu dien va x ly tri thc

62

- chng minh mt biu thc lgic mnh l ng nht ng, ta c th dng: bng chn l, cc php bin i tng ng, s lgic, phng php GPS, cc thut ton: Robinson, Wong Havard (Vng Ho), suy din tin, suy din li m ta s xt trong phn sau. - Mt lut suy din dng chun Horn c biu din nh sau: q1 .... qm (1) p1 .... pn Ta thng gp cc trng hp c bit sau: . n = 0, m = 1: biu din cc s kin (facts) q = F(t1, ...., tk); . n 1, m = 1: ta c dng chun s cp dng biu din cc lut (rules): q (2) p1 .... pn Mi lut (1) u c th biu din di dng (2): (1) (p1 .... pn q2 .... qm q1}) Qu trnh suy din c th da trn 2 nguyn l:
Modus Ponens : A, A B B B, A B Modus Tollens : A

- C s tri thc biu din bng logic mnh : da trn tp cc s kin Facts v tp cc lut suy din Rules (tng t cch xy dng mt chng trnh trong ngn ng lp trnh PROLOG). * Lgic v t: - V t p(x1, x2, ... , xn) l mt pht biu cha cc bin mnh x1, x2, ... , xn sao cho khi chng nhn cc gi tr lgic c th th n cng nhn mt trong hai gi tr lgic ng hoc sai. - Trong logic v t, ngoi cc php ton trong logic mnh , ngi ta cn s dng lng t tn ti (k hiu l ) v lng t vi mi (k hiu l ). - V d 1: V t p(x, y, z) biu din ng thc: x.y = z, cho ta mt v t ca 3 bin thc x, y, z. Tnh cht giao hon ca php nhn c din t: x, y p(x,y,z) p(y,x,z) - Logic v t cho php din t hu ht cc khi nim v nguyn l khoa hc c bn, nht l ton hc v vt l. C 2 phm vi ng dng c bn ca lgic hnh thc l: gii quyt vn v chng minh nh l t ng.

Chng III - Bieu dien va x ly tri thc

63

- Ngoi vic dng lgic v t thng thng (lgic v t bc 1), ngi ta cn nghin cu thm lgic v t bc cao. Lgic v t bc n l lgic v t m cc bin v t ca n thuc lgic v t bc n-1. * u im ca phng php lgic: - L ngn ng biu din kiu m t; - C kh nng suy din vi cc c ch quen thuc: modus ponens, modus tollens; - Kh trc quan i vi ngi s dng; - Kh gn gi v mt c php vi cc cu lnh ca ngn ng lp trnh logic nh PROLOG; - C th dng m t cu trc m hnh v x l ng m hnh; - C th kim tra tnh mu thun trong c s tri thc; - Tnh mun ho cao, do c th thm, bt, sa cc tri thc kh c lp vi nhau v c c c ch suy din. * Nhc im ca phng php lgic: - Mc hnh thc ho qu cao, dn ti kh hiu ng ngha ca cc v t khi xem xt chng trnh. - Nng sut x l thp (kh khn c bn trong qu trnh suy din l c ch hp v suy din vt cn). - Do tri thc c biu din bng logic v t nn cc u th s dng cu trc d liu khng c khai thc trit . b. Lgic bt nh gm: lgic tnh hung (cc kt xut ca n c th rt ra t cc tnh hung khng gian v thi gian xc nh c lin quan vi nhau), lgic xc sut, lgic kh xut v lgic m. III.2.2. Biu din tri thc nh lut sinh: thng qua cc lut nu th: Nu P1, P2, v Pn th Q , hay: P1 P2 Pn Q Cch biu din ny c p dng trong: - Lgic mnh v v t: vi P1,P2,, Pn l cc biu thc lgic v l php ko theo - Ngn ng lp trnh: lut sinh l cc cu lnh if (P1 and P2 and and Pn) then Q ; - Ngn ng t nhin: lut sinh l php dch. - H chuyn gia: l mt h c s tri thc, gm: . CSDL cc s kin F (Facts) : {f1, ..., fn} . Tp lut R (Rules) gm cc lut c dng:

Chng III - Bieu dien va x ly tri thc

64

f i1 f i2 K f ik q

. Phng php suy din tin v li, chng hn:


f i1 , f i 2 , K , f i k F q F

III.2.3. Biu din tri thc nh mng ng ngha (Semantic Network) - V d 2: Ta c th biu din CSTT: . An l ngi . Ngi thch suy ngh . Ngi bit lao ng thng qua s III.2.3.1. Theo c ch lan truyn thng tin theo cc cung ni c th hin bng cc mi tn, ta thu c: An thch suy ngh v bit lao ng. An
l

Ngi
Thch bit

Suy ngh
(Hnh III.2.3.1)

Lao ng

- Biu din mng ng ngha bng th: Mng ng ngha l th c hng m rng: G = (V, R), trong : V = {x1, x2, , xn} l tp cc nh, R = {r1, r2, , rm} l tp cc quan h nhiu ngi trn V. - c im ca mng ng ngha: trc quan, c tnh k tha v lan truyn thng tin; kh kim tra tnh phi mu thun, - ng dng ca mng ng ngha: trong x l ngn ng t nhin (d dng hn trong vic hiu ng ngha ca cu, do c th tin hnh vic c v dch cc bi text), h chuyn gia, gii cc bi ton thng minh (chng hn, gii bi ton h thc lng trong tam gic), III.2.4. Biu din tri thc bng Frame - Tng t nh bn ghi (record), nhng ngoi cc trng d liu, khung (frame) cn c th c cc trng l cc thao tc, th tc hay lut suy din no , cc trng ny c th k tha cc tnh cht t cc khung khc (tng t nh khi nim lp trong lp trnh hng i tng OOP). Frame c tnh cu trc rt cao.

Chng III - Bieu dien va x ly tri thc

65

- V d: Frame MyTnhCNhn; { L mt dng ring ca MyTnhinT;


KinTrc Sa MnHnh
} {8 bits, 16 bits, 32 bits}; {1, .., 5}; Th tc xc nh tnh nng ca mn hnh;

Ngoi ra, ngi ta cn c th biu din tri thc bng b ba lin hp OAV (Object - Attribute Value), mng nron (ANN - Artificial Neural Network),

III.3. X l tri thc tt nh bng phng php suy din logic


III.3.1. Cc c ch lp lun vi tri thc tt nh - Suy din (Deduction, din dch): modus ponens, modus tollens, cc kiu suy din: tin v li. - Qui din (Abduction, tng t): Cho trc: A B. . A ~ A A B . B ~ B A B . A ~ A & B ~ B A B - Qui np (Induction): hon ton v khng hon ton Sau y ta s xt cc thut ton v thut gii nhm chng minh t ng cc biu thc lgic mnh . Bi ton A (BTA):Xt bi ton lgic mnh sau c hng ng hay khng:
1 i m

GTi V KL j
1 j m

vi {GTi , KLj} l cc biu thc lgic mnh bt k. Ti sao ta ch xt bi ton dng trn y (bi tp) ? III.3.2. Thut ton Vng Ho (Wong Havard) gii BTA * tng: p dng chin lc Chia tr nhm tch bi ton xut pht thnh cc bi ton con dng V n gin hn. Bi ton ban u s c gii khi v ch khi mi bi ton con s cp gii c.

Chng III - Bieu dien va x ly tri thc

66

* Trc tin, ta a v tri VT (hay v phi VP) v dng chun hi (hay chun tuyn tng ng) bng cch: . Thay cc php ton tng ng (nu c) bi cc php ton ko theo . Thay cc php ton bi cc php ton , . Dng cc lut De Morgan b cc du ca nguyn mt nhm mnh . Dng cc lut phn phi (nu cha gp dng chun cn tm) ca php tuyn i vi php hi (hay ca php hi i vi php tuyn tng ng). Trong thut ton Wong, sau khi a VT v dng chun hi v VP v dng chun tuyn, ta s s dng cc qui tc sau (hy chng minh ti sao ta c quyn s dng chng ? Bi tp). - Th tc Chuyn(VT,VP): thay cc du cc nhm chnh bn VT v cc du cc nhm chnh bn VP bi du phy; chuyn v cc mnh chnh dng ph nh p t v ny sang v kia v b i du (ch cn p). Ni cch khc, ta c th xem du phy (,) bn VT l php hi v du phy (,) bn VP l php tuyn. . V d 3: Kim tra tnh hng ng ca biu thc lgic mnh sau: VT (a) (b c) (a b) (b) c VP Cc nhm chnh trong: v tri VT l (a) v (bc), v phi VP l (ab), (b) v (c). VT (a) (b c) a, b c VT b, b c (a b) (b) c VP a b, b, c a b, a, c VP
Chuyn Chuyn

- Hm lgic Tch(VT,VP): tch mi nhm tuyn chnh trong VT (hay mi nhm hi chnh trong VP) thnh nhiu bi ton con dng V. Mi bi ton con gm mt mnh trong nhm chnh v gi nguyn cc nhm chnh khc. Nu tch c th th tc Tch(VT,VP) nhn gi tr true; nu ngc li, n nhn tr false. Vi v d 3 trn y, ta c s bin i nh hnh III.3.2.1 sau y. - Vi mi bi ton con, nu mi v ca n c mt mnh n ng c lp ging nhau th n c chng minh (hng ng). Bi ton xut pht ch c chng minh (hng ng) khi mi bi ton con ca n c chng minh. Ni cch khc, bi ton xut pht khng hng ng nu c tn ti mt bi ton con ca n

Chng III - Bieu dien va x ly tri thc

67

khng hng ng (khng th p dng qui tc tch cng nh chuyn c na v hai v khng c chung mt mnh n ng c lp no c). VT b, b c b, b a b, a, c
Chuyn Tch Tch

a b, a, c VP b, c a b, a, c
Tch

b a b, a, c, b b a, c, b CM b a, c, b CM

b, c a, c CM

b, c b, a, c CM

(Hnh III.3.2.1) Vy bi ton nu ra trong v d 3 l hng ng. * Thut ton Vng Ho { VT = VP = ; for i = 1 to m do { ChunHi(GTi); VT VT U {GTi }; } for i = 1 to n do { ChunTuyn(KLi); VP VP U {KLi }; } P {(VT,VP)}; while (P) do { (VT,VP) get(P); if (VT VP = ) then { Chuyn(VT,VP); if (VT VP = ) then if (not(Tch(VT,VP))) then exit(Khng thnh cng); // BT khng hng ng } } write(Thnh cng); // BT hng ng } * Nhn xt: . Thut ton Wong dng sau mt s hu hn bc v cho ra thng bo Thnh cng nu v ch nu t cc gi thit GT1, ..., GTm c th suy ra mt trong cc kt lun KL1, ..., KLn. . Nu s cc php ton lin kt trong GTi v trong KLj l M th thut ton s sinh ra t M n 2M dng (VT,VP) P (bng n t hp nu M kh ln !).

Chng III - Bieu dien va x ly tri thc

68

* V d 4 (biu thc hng ng): C th chng minh rng: [(a b c) (b c d) a b] d ? a VT v dng chun hi v VP v dng chun tuyn: VT {a b c, b c d, a, b}: dng chun hi VP {d}: dng chun tuyn Ta c th biu din qu trnh gii ca thut ton Wong thng qua th suy din hay th li gii nh sau: a b c, b c d, a, b d
a, b c d, a, b d; b c d, a, b d, a CM b, b c d, a, b d; b c d, a, b d, b CM c, b, a, b c, a, b CM d, b d c, c, a, b c, a, b CM d, c d c, d, a, b d CM c, b c d, a, b d

( th li gii trong thut ton Wong) * V d 5 (biu thc khng hng ng): Kim tra tnh hng ng ca biu thc: [(a b c) a] c ? (1) a VT v dng chun hi v VP v dng chun tuyn: VT {a b c, a}: dng chun hi VP {c}: dng chun tuyn th li gii: a b c, a c a, a c b, a c a c, b
(2)

c, a c

Chng III - Bieu dien va x ly tri thc

69

BT con (2) sai v khng th tch, chuyn v khng c mnh chung. Do bi ton (1) xut pht cng sai. III.3.3. Thut ton Robinson gii BTA * tng: S dng: . phng php chng minh phn chng: [a b ng] [a b sai hay mu thun] . nguyn l hp gii: (a b) (a c) b c. (V sao? Hy chng minh). - Ta thng gp cc trng hp ring ca nguyn l ny: . nguyn l modus ponens: a ( a b) b . nguyn l modus tollens: (b (ab)) a - chng minh t cc gi thit GT1, ..., GTm suy ra mt trong cc kt lun KL1, ..., KLn, ta ch cn ly ph nh ca KL1, ..., KLn a v cng vi cc gi thit:
P ( GTi )( KL j )
1 i m 1 j m

Nu suy ra c mu thun t tp cc mnh P th qu trnh chng minh kt thc v kt lun BTA l hng ng. - suy ra c mu thun, Robinson a ra nguyn l hp gii trn y b sung thm cng ngy cng nhiu cc biu thc mnh trung gian mi cho n khi no trong P c 2 mnh n ng c lp l ph nh ca nhau th mu thun xy ra. * Thut ton Robinson (gii BTA) { P = ; for i = 1 to m do { GTi ChunHi(GTi); P P U GTi; } for i = 1 to n do {NotKLi ChunHi(KLi); P P U NotKLi;} if (MuThun(P)) then exit(Thnh cng); P1 = ; while (P P1 and not(MuThun(P))) do {P1 = P; HpGii(P);} if (MuThun(P)) then exit(Thnh cng); else exit(Khng thnh cng);

Chng III - Bieu dien va x ly tri thc

70

} trong , hm lgic MuThun(P) v th tc HpGii(P) c ni dung nh sau: Function MuThun(P): boolean { for each p P do for each q P and q p do if (p = q or q = p) then return(True); return(False); } Procedure HpGii(P) { for each p P do for each q P and q p do if (p = a b and q = a c) then P P U {b c}; } * V d 6 (biu thc hng ng): Xt bi ton trong v d 4, ta c: P {a b c, b c d, a, b, d} tin theo di, ta biu din qu trnh thc hin thut ton qua th hp gii nh sau:
a b c b c c a b c d c b c d d

Mu thun ! * V d 7 (biu thc khng hng ng): Kim tra tnh hng ng ca biu thc: [(a b c) a] c ? Ly ph nh ca kt lun v a v dng chun hi, ta c: P {a b c, a, c} th hp gii: a b c, a, c b ca b b Khng thy mu thun cng khng cn cch no hp gii m c th sinh ra mnh mi na. Vy bi ton xut pht sai.

Chng III - Bieu dien va x ly tri thc

71

* Nhn xt: - Th tc Robinson s dng sau hu hn bc v cho ra thng bo Thnh cng nu v ch nu GT1 ... GTm KL1 ... KLn. - chng minh BTA khng hng ng, ta phi hp gii ht tt c cc kh nng cho n khi khng th sinh ra thm biu thc mnh no mi trong P. - Cng nh th tc Wong H., th tc Robinson c nhc im l ty theo th t ly cc cp mnh hp gii c th xy ra hin tng trn b nh (do bng n t hp) i vi cc bi ton c kch thc ln. - C th p dng mt s heuristic cho thut ton trn thu c thut gii Robinson, chng hn: khi p dng nguyn l hp gii, sau khi thm vo tp P mnh (b c), c th b hai mnh (a b) v (a c) ra khi P. * V d 8 (biu thc hng ng nhng c th kt lun sai nu p dng heuristic khng ng): Kim tra tnh hng ng ca biu thc: [ a (a b) (a c)] c (3) Ly ph nh ca kt lun v a v dng chun hi, ta c: P {a b, a c, a, c} . Nu hp gii trc hai mnh a b v a c b ri loi chng th trong P cn li: P {b, a c, c} Hp gii tip tc th: P {b, a}: khng c mu thun cng khng th hp gii c na: bi ton sai chng ? Tht ra, bi ton (3) vn ng ! . Nu hp gii trc hai mnh a c v a c c ri loi chng th trong P cn li: P {c, a b, c} Khi mu thun xy ra gia c v c. Vy bi ton xut pht ng ! * Ch : trnh tnh trng kt lun sai nh trn, khi thay thut ton Robinson thnh thut gii Robinson, ta nn ch rng ngoi vic thm heuristic trn vo th tc hp gii, ta phi b i thng bo exit(Khng thnh cng). Nu xut hin mu thun th kt lun Thnh cng v dng. Nu khng xut hin mu thun th khng c thng bo exit(Khng thnh cng), ngha l khng c quyn kt lun g khi tnh trng ny xy ra ! * Bi ton B (BTB) Input: - Tp cc mnh gi thit: GT = {g1, ... , gn} = 1in gi

Chng III - Bieu dien va x ly tri thc

72

- Tp RULE gm m lut c dng chun r : p1 ... pn q - Tp cc mnh kt lun: KL = {q1, ... , qk} = 1ik qi Output: Thng bo Thnh cng nu mi qi KL c th suy din t GT nh s dng tp lut RULE. - chng minh cc bi ton lgic mnh , ngi ta cn dng phng php suy din tin (hay li), bng cch xut pht t gi thit (hay kt lun tng ng), da trn cc nguyn l suy din: . Modus ponens: A, A B B . Modus tollens: B, A B A ta thm vo cc mnh mi c chng minh ng (hay cc mnh cn phi chng minh thm tng ng) cho n khi thu c kt lun (hay gi thit tng ng) th dng. III.3.4. Thut ton suy din tin gii BTB * tng: Qu trnh suy din tin bt u t tp TrungGian cc mnh ng xut pht (tp gi thit) v n s c lm n dn bng cch thm vo cc s kin mi ng nh cc lut suy din trong RULE, cho n khi cc kt lun cn chng minh c pht hin. * Thut ton suy din tin SDT { TrungGian = GT; THA = Lc(RULE, TrungGian);

// THA l tp cc lut r c dng p1 ... pn q m piTrungGian,i=1..n

while (KL TrungGian and THA ) do { r get(THA); // r THA c dng r: p1 ... pn q TrungGian TrungGian U {q}; RULE RULE \ {r}; THA = Lc(RULE, TrungGian) } if (KL TrungGian) then write(Thnh cng) else write(Khng thnh cng);

} * V d 9: Cho trc tp cc s kin gi thit: GT = {a, b}. S dng tp RULE cc lut: r1: a c r2: b d

Chng III - Bieu dien va x ly tri thc

73

r3: a e r4: a d e r5: b c f r6: e f g Cn suy ra kt lun: KL = {g}. . Ta c: TrungGian = {a, b}; RULE = {r1-r6}. Do THA = {r1,r2,r3}. . p dng lut r1: a c, ta c TrungGian = {a,b,c} v RULE={r2-r6}. Do : THA = {r2, r3, r5}. . Lc ny, KL = {g} {a, b, c} = TrungGian v THA . Ta li tip tc qu trnh, bng cch chn r2 thc hin, ... Ta minh ha qu trnh trn bng th suy din tin, trong mi nh ng vi tp TrungGian ti thi im ang xt v s c mt cung i t nh TrungGian n nh TrungGian U {q} tng ng vi lut r c lc v c dng r : p1 ... pn q m pi TrungGian, i=1,.., n. TrungGian ={a,b} r1 TrungGian = {a,b,c} r2 r3 r5 r2 {a,b,d} r3 {a,b,e}

TrungGian ={a,b,c,d} {a,b,c,e} {a,b,c,f} r3 r4 r5

TrungGian ={a,b,c,d,e} r5 r4

TrungGian ={a,b,c,d,e,f} r6 r4

KL TrungGian ={a, b, c, d, e, f, g} ( th suy din tin) * V d 10 (biu thc khng hng ng): Kim tra tnh hng ng ca biu thc:

Chng III - Bieu dien va x ly tri thc

74

[(a b c) a] c ? TrungGian = GT = {a}, KL = {c}, RULE = {r1: a b c }. Khi : THA = v KL TrungGian. Vy bi ton trn khng hng ng. * Nhn xt: .Vi cc th t khc nhau chn r t tp THA, ta s c cc c ch duyt theo chiu su, theo chiu rng, ... trn th. . Nu trong BTB thay tp kt lun KL = 1ik qi bi: KL = V1ik qi th cn hiu chnh thut ton SDT ra sao ? (Bi tp) . trnh cc kt lun sai, vi mi bin mnh p xut hin trong biu thc cn chng minh, bng cc qui tc bin i tng ng lgic, chuyn v cng dng p hoc cng dng p. III.3.5. Thut ton suy din li gii BTB * Vi suy din li, a ra kt lun B ta th tm tt c cc lut c dng: A1 ... An B c B, ta cn chng minh A1 ,... , An (cc kt lun mi c thm vo tp kt lun). Qu trnh xc nh Ai cng din ra tng t nh i vi B. Nu n mt lc no tm thy mt Aio no khng th dn xut c t cc gi thit th ta quay lui sang lut khc sinh ra B v li tip tc qu trnh trn. Nu khng tm c Aio nh vy (ngha l mi Ai u c dn xut t gi thit) th qu trnh dn xut ra B thnh cng. thc hin qu trnh quay lui, ta s dng hai tp c cu trc ngn xp GOAL v VET: GOAL l tp lu cc mnh cn phi chng minh n thi im ang xt v VET l tp lu cc lut s dng chng minh cc ch (k c ch trung gian). * Thut ton suy din li SDL {1 if (KL GT) then exit(Thnh cng); else {2 GOAL = ; VET = ; CMc = True; for each q KL do GOAL = GOAL U {(q,0)}; repeat

Chng III - Bieu dien va x ly tri thc

75

{3 (f,i) get(GOAL); if (f GT) then {4 Tm_Lut(f, i, RULE, j); // Tm lut rj : leftj f if (j m) then { VET = VET U {(f,j)}; for each t leftj\GT do GOAL=GOAL U {(t,0)}; } else {5 back = true; // dng bin ny quay lui while (f KL and back) do {6 repeat {(g,k)get(VET); // Ly lut rk:leftkg ra khi VET // quay lui n lut khc m cng g GOAL = GOAL \ leftk; } until (f leftk); Tm_Lut(g, k, RULE, s); // Tm lut rs:lefts g if (s m) then { for each t lefts \ GT do GOAL = GOAL U {(t,0)}; VET = VET U {(g,s)}; back = false; } else f = g; }5 }6 if (f KL and back) then CMc = False;
// B hu qu ca vic chn sai lut r v dn n vic // khng CM c mnh f c gi nh cn CM

}3 until (GOAL = or not(CMc)); if (not(CMc)) then exit(Khng Thnh cng) else exit(Thnh cng); }1 }2

}4

Trong th tc trn ta s dng th tc: Tm_Lut(f, i, RULE, k) tm xem c lut rk no k t lut th i+1 tr i m cng suy ra c f (rk:leftk f). Nu khng c lut no nh th th qui c ly k = m+1. * V d 11: Cho trc tp cc s kin gi thit GT = {a, b}. S dng tp RULE cc lut:

Chng III - Bieu dien va x ly tri thc

76

r1. abc r2. ahd r3. bce r4. adm r5. abo r6. oem Cn suy ra KL = {m}. Ban u GOAL = VET = ; p dng th tc Tm_Lut(m, 0, RULE, j), ta c j = 4 (r4 l lut u tin sinh ra m). Khi VET = {(m,4)}; GOAL = {(d,0)} (v a GT nn ch cn xt (d,0)). Ta tip tc qu trnh v c bng theo di sau:
GOAL
(back)

(f,i) 1 (d,0) (h,0)

CM

j d 2 7

leftj\GT

VET

(g,k) l leftl\GT

Quaylui

{(m,0)} (m,0) {(d,0)} {(h,0)}

true

{(m,4)} h {(d,2);(m,4)} {(m,4)}

(d,2)

true

d (m,4) 6 o,e {(o,0),(e,0)} {(m,6)} false(thot while 6) {(e,0)} o 5 {(o,5),(m,6)} e 3 c {(e,3),(o,5),(m,6)} {(c,0)} c 1 {(c,1),(e,3),(o,5),(m,6)} (GOAL = : thot vng while{2}2 ; CMc = True: Thnh cng !)

Ta c th biu din qu trnh suy din li trn y thng qua th (V/HOC) suy din li nh sau:
{m}* r4 {a,d}k *{a} Khng cn phn ny ! {d}k r2 {a,h}k *{a} {h } k *{a} r6 {o,e}* {o}* r5 {a,b}* *{b} *{b} {e}* r3 {b,c}* {c}* r1 {a,b}* *{a} ( th suy din li) * {b }

Chng III - Bieu dien va x ly tri thc

77

- V d 12: Cho trc tp cc s kin gi thit GT = {a}. S dng tp RULE cc lut: r1. abc r2. ahd r3. bce r4. adm r5. abo r6. oem Cn suy ra KL = {m}. Ban u GOAL = VET = . p dng th tc Tm_Lut(m, 0, RULE, j), ta c j = 4 (r4 l lut u tin sinh ra m). Khi VET = {(m,4)}; GOAL = {(d,0)} (v a GT nn ch cn xt (d,0)). Ta tip tc qu trnh, s c bng theo di sau:
GOAL
(back)

(f,i)

CM

leftj\GT

VET

(g,k) l leftl\GT

Quaylui

{(m,0)} (m,0) 1 true d {(m,4)} {(d,0)} (d,0) 2 h {(d,2);(m,4)} {(h,0)} (h,0) 7 {(m,4)} (d,2) 7 true d (m,4) 6 {o,e} {(o,0),(e,0)} {(m,6)} (thot while 6) false {(e,0)} o 5 b {(o,5),(m,6)} {(b,0),(e,0)} b 7 {(m,6)} (o,5) 7 true o (m,6) 7 m false (f = m KL : thot while {6}6; do : CMc= false (v GOAL = ): thot vng while{2}2; CMc= false: Khng thnh cng !)

th suy din li:


{m}k r4 {a,d}k *{a} {d}k r2 {a,h}k *{a} {h}k *{a} r6 {o,e}k {o}k r5 {a,b}k {b}k {b}k {e}k r3 {b,c}k

Khng cn phn ny ! {c}k r1 {a,b}k *{a} {b}k

( th suy din li)

Chng III - Bieu dien va x ly tri thc

78

* Nhn xt: - Qu trnh suy din li tng t nh qu trnh tm th con li gii trong th V/HOC biu din tp lut. - tng hiu qu ca th tc suy din li c th a vo 2 tp: tp NG cha cc s kin c khng nh l ng v tp SAI cha cc s kin c khng nh l sai. Mi khi ly mt s kin (f, i) no ta cn kim tra trc f NG hay f SAI ?

III.4. X l tri thc bt nh bng phng php suy din logic III.4.1. Cc c ch lp lun vi tri thc bt nh v khng chnh xc - Khi nim: Trn thc t, c nhiu mnh c pht biu khng chnh xc, mang tnh bt nh, chng khng hn hon ton ng cng khng hon ton sai. Tnh ng - sai ca chng khng c xc nh v th hin r rng nh trong lgic mnh c in. Ta c th m rng tnh ng sai ca mnh p thng qua mt hm o ng ca n: (p) [0; 1]. - M hnh xc sut: Xt P l tp cc mnh ng kn i vi cc php ton , (do c ) v nh x ( o xc sut) Pr: P [0, 1] tha cc tnh cht: . Pr(p) + Pr(p) = 1, p P . Pr(p q) = Pr(p).Pr(q), p, q P . T : Pr(p q) = Pr(p) + Pr(q) Pr(p q) (Chng minh ? Bi tp) - M hnh khi lut: Biu din mnh : . Nu p th q bi lut bnh thng: p q . Nu p th thng thng (ni chung, hu nh, ) q bi khi lut: pq ! III.4.2. Phn b kh xut ca khi lut v cc php ton ni kt * Phn b kh xut (PBKX) ca khi lut: - PBKX ca mt cp s kin i ngu nhau p v p (hay p): (p), ( p ) tha: max ((p), ( p )) = 1 - PBKX ca mt s kin p trong khi lut l b:

(p) ( p)

Nu ta khng th khng nh c p l tuyt i ng th: (p) = 1, nhng ( p ) = ( [0, 1)) - PBKX ca mt khi lut p q ! c biu din bi ma trn:

(p q ) (p q )

(p q ) ( p q )

Chng III - Bieu dien va x ly tri thc

79

Bi tp
1. +Bng cc php bin i tng ng trong lgic mnh , hy chng minh: a. Ta lun c th a mt lut suy din dng chun Horn: q1 .... qm p1 .... pn v dng chun s cp: q p1 .... pn b. Nguyn l chng minh phn chng: (a b ng) (a b sai hay mu thun) c. Nguyn l hp gii. d. Nguyn l modus ponens v tollens. e. Trong vic chng minh t ng tnh hng ng ca cc biu thc lgic mnh , ti sao ngi ta thng xt bi ton dng BTA ? f. Quy tc Chuyn v Tch trong th tc Vng Ho. g. Phng php Qui din (Abduction, tng t): Cho trc: A B. . A ~ A A B . B ~ B A B . A ~ A & B ~ B A B 2. +Hy a v dng chun hi v chun tuyn ln lt cho v tri (VT) v v phi (VP) ca cc biu thc lgic mnh sau: a. [(a b c d) (c e) a] [b e] b. [(a b c d) (c e) a] [b c e] c. [(a b c d) (c e) a] [d c b] d. [(a b c d) (c b e) a] [b c e] e. [b c e] [(a b (c d)) (c e) a] f. [a(bc) ] [(ab)c] g. {[(a b c d) (c e) a] [(a b e) a]} [b e] h. {[(a b c d) (c e) a] [(a b e d) a]} [b c e] 3. *Nu trong bi ton BTB thay tp kt lun KL = 1ik qi bi KL = V1ik qi th cn hiu chnh thut ton suy din tin SDT ra sao ? 4. +Kim tra tnh hng ng ca cc biu thc lgic trong bi tp 2 chng III (c th p dng vi heuristics rt gn hay chuyn i tng ng cho vic gii tr nn n gin hn) bng cc phng php: i) bin i lgic ii) phng php suy din tin iii) phng php suy din li iv) thut ton Vng Ho (Wong Havard) v) thut ton Robinson. Nu thay thut ton Robinson bng thut gii Robinson th cc kt qu c lun trng nhau khng ? Ti sao?

80

Chng IV

LP TRNH LGIC
IV.1. GII THIU NGN NG LP TRNH LGIC PROLOG IV.1.1. M u Mt trong nhng mc tiu ln v quan trng ca tr tu nhn to (TTNT) l m phng trn my tnh nhng t duy v hnh vi ca con ngi. Trc nhng nm 1960, khi cha c nhm cc ngn ng lp trnh (NNLT) chuyn phc v cho lnh vc TTNT nh cc NNLT x l k hiu (LISP- LISt Processing) v lp trnh lgic (PROLOG PROgramming in LOGic), nhng thnh tu l thuyt trong TTNT cha c ng dng rng ri trong thc t. Chng ny nhm gii thiu Prolog, mt trong nhng NNLT thuc h ny. NNLT Prolog do Alain Colmerauer v nhm cng s thit k ra vo nm 1972 ti i hc Marseille Php. Prolog c xy dng trn c s l thuyt ca lgic v t, nhm biu din, m t cc tri thc cng cc mi quan h c bn gia chng. T , khi c trang b sn mt c ch suy lun thng qua mt mt suy din, Prolog s sn sinh ra v kim tra nhiu mi quan h h qu khc. Khc vi nhiu NNLT th tc c in truyn thng, Prolog thuc nhm NNLT m t. gii quyt mt bi ton, c bit l cc bi ton x l k hiu tru tng v suy lun lgic, ta ch cn chn cch biu din ph hp v m t cc i tng cng cc tnh cht v mi quan h c bn bit gia chng. Thng qua mt suy din ca Prolog, ta s nhn c cc cu tr li lin quan n cc mi quan h nhn qu v cc kt lun lin quan n bi ton cn gii quyt. Khi tri thc bit v bi ton khng tng thm, vic tr li cc kt lun khc lin quan n bi ton cn gii l hin nhin thng qua cc cu hi thm m khng cn phi lp trnh li nh cc NNLT kiu th tc. Chnh v vy, NNLT Prolog thuc kiu hi thoi v mt chng trnh ngun trong Prolog thng gn hn rt nhiu so vi mt chng trnh ngun ca cc NNLT th tc truyn thng khc nh Pascal, C, nhm cng gii quyt mt bi ton chuyn bit trong lnh vc TTNT. * V d 1: m t cc s kin (fact): Socrate v To l ngi, qui tc lgic (hoc lut, rule): h bt c ai l ngi th ngi s phi cht, ta dng hai v t chnh: LNgi(Ai), Cht(Ai) nh sau: LNgi(Socrate). LNgi(To). Cht(Ai) :- LNgi(Ai). //hoc: Cht(Ai) if LNgi(Ai). Da trn cc tri thc va m t, ta c th yu cu Prolog tr li cc cu hi lin quan sau: Goal: LNgi(Socrate) yes Goal: LNgi(mo) no

81 Goal: Cht(Socrate) yes Goal: Cht(mo) no hoc: Goal: LNgi(Ai) Ai = Socrate, Ai = To (2 solutions) Goal: Cht(Ai) Ai = Socrate, Ai = To (2 solutions) Cc khi nim chnh trong Prolog l: v t (predicate), i tng, bin, s kin (fact), qui tc (rule), cu hi (ch, mc tiu: Goal), danh sch. Vi k thut thng c dng trong Prolog l: quay lui (mc nh l tm kim theo chiu su trn cy suy din), qui, lt ct. IV.1.2. V t, s kin, qui tc, mc tiu trong Prolog a. V t, i tng, hng, bin * Quan h gia cc i tng trong mt bi ton, mt mnh c biu din bng cc v t v cc i ca v t biu din cc i tng thuc quan h hay c tnh cht no . chuyn mt mnh thng thng sang dng v t (predicate) trong Prolog, ngi ta thng chn ng t chnh trong phn v ng lm tn v t v cc thnh phn khc lm cc i tng ng ca v t. - Phn loi cc i tng trong Prolog: hng, bin hay i tng phc hp (l mt loi i tng ca mt v t m bn thn n li l mt v t khc). - Cc kiu d liu chun (c s) c sn trong Prolog: int, real, char, string, symbol. Ngoi ra, Prolog cn cho php cc kiu d liu ring do ngi dng nh ngha. - Kiu (d liu) ca i tng c th thuc kiu chun hoc do ngi dng nh ngha. - Ta qui c Name l mt dy k t (gm: ch ci la tinh, ch s hoc du gch di _) m k t u tin phi l ch ci. (Do , trong Name khng c c khong trng v khng c bt u l ch s !). Khi dng Name biu din tn ca cc i tng hay v t, ngi ta thng dng mt trong hai cch vit sau d c v trnh hiu nhm ngha: gh_di, gh_u hay ghDi, ghu; suy_lun hay SuyLun, so_1_Han_Thuyen hay so_1_HanThuyen, (cho v d vi dy k t khng phi l mt Name ?) - Tn ca i tng l mt Name. - Hng l i tng m gi tr ca chng c gn ngay khi khai bo trong phn constants v khng i trong sut chng trnh. Tn ca hng l mt Name m k t u tin phi l ch ci thng (c bit l khi s dng gi tr ca chng). - Bin l i tng m gi tr ca chng c th thay i trong chng trnh. Tn ca bin (tr bin v danh, c k hiu l du gch di _) l mt Name m k t u tin l ch ci hoa. Bin c phn thnh 3 loi:

82 . bin rng buc l bin m ti thi im ang xt n c gn vi mt gi tr xc nh; . bin t do l bin m ti thi im ang xt n cha hoc khng c gn vi mt gi tr xc nh no c; do , ti nhng thi im khc nhau mt bin c th chuyn t t do sang rng buc v ngc li trong qu trnh quay lui khi tm kim li gii; . bin v danh (c k hiu l du gch di _) l bin m ta khng quan tm (do , khng cn lu li hay ghi nh) n gi tr ca n. Ch : Cc bin trong Prolog khi c s dng khng cn phi khai bo trc (v thng thng, chng c khai bo ngm trong phn khai bo kiu cho cc v t) b. S kin, qui tc: Cc v t trong Prolog thng c th hin di hai dng: s kin hay qui tc. - S kin (fact) l cc mnh hng ng v n thng c th hin bng cc v t m cc i ca chng u l i tng hng. Chng hn, trong v d 1, LNgi(Socrate) l mt s kin. - Qui tc (rule) l mt mnh ko theo ng v chng thng c th hin bi cc v t m cc i ca chng cha cc bin. Qui tc thng gm hai phn: Phnu v PhnThnQuiTc, chng c ni vi nhau bi t kho if hoc :-, theo c php sau: Phnu if PhnThnQuiTc. hoc: Phnu :- PhnThnQuiTc. (PhnThnQuiTc lun c kt thc bi mt du chm .) Chng hn, trong v d 1, Cht(Ai) l mt qui tc. . to nn cc qui tc phong ph, ta c th dng thm trong PhnThnQuiTc cc php ton lgic ni kt cc mnh : and (hay du phy , ), or (hay du chm phy ;), not(v t). . Cc v t (s kin, qui tc) phi c khai bo kiu trong phn Predicates trc khi c lit k, nh ngha v c s dng trong phn Clauses v Goal. c. Mc tiu, cu hi: Sau khi lp trnh, cc yu cu ca ngi dng c th c bit thng qua cc cu hi, v t a vo trong phn mc tiu Goal. C hai loi Goal: - Goal trong (a ni dung cn hi vo phn Goal trong chng trnh ngun): ch tm ra li gii u tin v khng t ng xut chng ra mn hnh. Nu mun xut chng, c th s dng v t chun xut d liu: write; nu mun tm cc li gii k tip, c th dng thm v t chun lun sai: fail. - Goal ngoi: tm v t ng xut mi li gii (ra ca s hi thoi Dialog, vi t kha Goal: u mi cu hi). Nu ch mun xut ra li gii u tin, c th s dng v t chun lt ct !.

83

IV.1.3. Cu trc chnh ca mt chng trnh trong Prolog Mt chng trnh ca Prolog thng bao gm mt s cc phn chnh v theo th t sau: Constants % on khai bo cc i tng hng Domains % on khai bo kiu cc i tng ring ca ngi dng Database % on khai bo kiu cho cc v t ca c s d liu Predicates % on khai bo kiu cho v t s dng trong cc on sau Clauses % on lit k s kin v nh ngha qui tc khai bo trong phn Predicates Goal % on a vo cc v t cu hi, c th t trc phn Clauses Ch : Mt chng trnh c th thiu mt s (hoc tt c !) phn trn. a. on khai bo cc i tng hng: c bt u bi t kho Constants v theo c php sau: TniTngHng = TriTngHng [Name] TriTngHng c kiu d liu chun (int, real, char, string, symbol). b. on khai bo kiu d liu ring ca ngi dng: c bt u bi t kho Domains v theo mt trong cc c php sau: . Dy TnKiuDLiu = KiuDLiu [Name, ] trong : KiuDLiu l kiu d liu chun (int, real, char, string, symbol) hoc kiu d liu ring ca ngi dng; . Dy TnKiuDanhSch = KiuPhnTChung* [KiuDLiu] [Name , ] . TnKiuiTngPhcHp = Dy TnVT(Kiui, ) [Name] [Name(KiuDLiu, ); ] . file = Dy TnFileHnhThc [Name; ] Cc tn file ca cc thit b chun sau khng cn phi khai bo: screen, keyboard, printer. c. on khai bo kiu cho v t s dng trong cc on Goal v Clauses phn tip theo c bt u bi t kho Predicates v theo c php sau: . TnVT(DyKiui) [Name]([KiuDLiu, ]) on khai bo kiu cho cc v t ca c s d liu (CSDL) c bt u bi t kho Database v cng theo c php nh phn Predicates. im khc bit ca cc v t khai bo trong on Database l: cc v t tng ng vi chng

84 trong phn Clauses c cc i l cc i tng hng hoc cc bin rng buc c th a vo CSDL b nh trong theo cc v t chun ring bit. Ch : C th khai bo nhiu v t cng tn nhng: cng s i vi kiu khc nhau hoc c s i khc nhau hoc thm ch khng c i no ! Khi , chng phi c khai bo lin tip nhau. d. on lit k cc s kin v nh ngha cc qui tc khai bo trong phn Predicates hoc Database, c bt u bi t kho Clauses theo c php sau: . Lit k cc s kin: TnVT(Dy TrHng). . nh ngha cc qui tc: TnVT(Dy iTng) :- PhnThnQuiTc(Dy iTng). hoc: TnVT(Dy iTng) if PhnThnQuiTc(Dy iTng). trong : PhnThnQuiTc c th gm cc v t, mnh c ni kt vi nhau bi cc php ton lgic nh: and (,), or (;), not(VT(i)), nhng i ca VT trong not phi l hng hoc bin rng buc. Tt c cc v t u phi c kt thc bi mt du chm .. * Ch : - Cc v t cng tn phi c lit k hay nh ngha lin tip nhau. - C ch tm kim mc nh trong Prolog theo chiu su. Th t ca cc mnh cng tn (cng cc i ca chng) trong phn Clauses c th c ngha khc nhau v nh hng n tc tm kim. - Cn n th t v u tin cc php ton lgic trong PhnThnQuiTc. - Qui tc: A:- B1; B2. tng ng vi: A:- B1. A:- B2. - biu din mnh : B and (C or D), dng qui tc sau l sai: A:- B, C; D. % hoc: A:- B, (C;D). cng sai ! Khi , c nhiu cch ng biu din chng: C1: A:- B, E. E:- C; D. hoc C2: A:- B, C. A:- B, D. hoc C3: A:- B, C; B, D. e. on mc tiu (i vi Goal trong), a vo cc v t cu hi, kt hp vi cc php ton lgic, c bt u bi t kha Goal.

85 Nu nhn chng trnh theo quan nim Top-Down, on ny c th t trc phn Clauses. * V d 2 (minh ha vic dng Goal trong, Goal ngoi; c ch tm kim nghim bi ca Goal ngoi): Domains Ai = symbol Predicates Thch(Ai, Ai) Clauses Thch(A, b). Thch(b, c). Thch(X, Z):- Thch(X, Y), Thch(Y, Z). Goal %trong: a vo trong chng trnh ngun %Cc i trong v t u rng buc: Thch(A, b). %Kt qu: rng Thch(A, c), write(ng). %Kt qu: ng %C i trong v t l bin t do: Thch(A, Ai). %Kt qu: rng Thch(A, Ai), write(A thch: , Ai, ; ). %Kt qu (xut mt li gii): A thch: b Thch(Ai, c), write(Ai, thch c; ), fail. % Kt qu (xut nhiu li gii): b thch c; A thch c Goal %ngoi: ch a vo ca s hi thoi %Cc i trong v t u rng buc: > Thch(A, b) yes %C i trong v t l bin t do: > Thch(A, Ai) Ai=b, Ai=c (2 solutions). > Thch(A, Ai), !. Ai=b (1 solutions). > Thch(Ai_1, Ai_2) kt qu l g ? (Bi tp) * V d 3(minh ha: cc php ton lgic trong PhnThnQuiTc, cc qui tc cng tn): Domains Ai = symbol Predicates Me(Ai, Ai) Cha(Ai, Ai) Cha(Ai) ChaMe(Ai, Ai, Ai) ChaHoacMe(Ai, Ai) Nam(Ai) Nu(Ai) Nguoi(Ai)

86 Dung() Sai Clauses Cha(ba_1, con_1). Cha(ba_1, con_2). Cha(Ba):- Cha(Ba, _). Me(ma_1, con_1). Me(ma_2, con_2). ChaMe(Ba, Ma, Con) :- Cha(Ba, Con), Me(Ma, Con). ChaHoacMe(BaMa, Con) :- Cha(BaMa, Con) ; Me(BaMa, Con). Nam(con_1). Nam(Ai):- Cha(Ai). Nguoi(Ai):- Cha(Ai) ; Me(Ai) ; ChaHoacMe(_, Ai). % Nu(Ai):- Nguoi(Ai), not(Nam(Ai)). Nu(Ai):- not(Nam(Ai)). % khng tr li c cu hi: Nu(Ai) !? Dung(). %Hoac: Dung():- true. Sai:- not(Dung()). Goal %ngoi: Cho kt qu l g vi tng goal sau ? > Nu(con_2) ? > Nu(Ai) ? * V d 4(minh ha i tng phc hp; c ch tm kim nghim bi ca Goal ngoi): Domains Ai, Ten = symbol Gi = Mo(Ten) ; B(Ten) ; Rng Predicates Thich(Ai, Gi) Clauses Thich(a, Meo(miu)). Thich(tu,rong). Thich(b, Meo(miu)). Thich(b, Bo(miu)). Thich(c, X) :- Thich(a, X) , Thich(b, X). Goal %ngoi > Thich(c, Gi) Cho kt qu l g ? (Bi tp)

87

IV.2. DANH SCH, QUI, LT CT TRONG PROLOG Danh sch l mt trong nhng cu trc d liu rt quan trng v c s dng thng xuyn trong lp trnh x l k hiu bng Prolog. qui l k thut thng dng trong Prolog. Do c ch tm kim t ng mc nh trong Prolog theo chiu su, nn, trong nhiu tnh hung, nu mun ngn chn vic tm kim tip tc khng cn thit, Prolog cho php dng lt ct thc hin vic ny. IV.2.1. Danh sch a. nh ngha: Danh sch l mt dy c th t cc phn t. Mt cch qui, ta c th nh ngha danh sch l: - rng (khng c phn t no), hoc: - gm mt phn t u v danh sch ui b. Khai bo, biu din danh sch: TnKiuDanhSch = KiuChungCcPhnT* trong : KiuChungCcPhnT c th l kiu d liu chun, kiu do ngi dng nh ngha, kiu phc hp, hoc thm ch l danh sch. - Danh sch rng: [] - Biu din danh sch theo kiu qui: BinKiuDS = [PhnTu | DanhSchui] - Biu din danh sch theo kiu lit k: [PhnTThNht , PhnTThHai | DSchCnLi] V mt l thuyt, c th biu din danh sch bng v t hoc cy, biu ngang. * V d 1: Tm phn t u v danh sch ui ca cc danh sch sau: [a, b, c], [a], [[1, 2], [3], [4,5]] , [] ? (Bi tp) IV.2.2. qui - C ch quay lui v tm kim nghim bi trong Prolog a. C ch quay lui v tm kim nghim bi: Minh ha qua v d: * V d 2: %trace QH_1_2 QH_1(a, b). QH_1(a, c). QH_2(d, b). QH_2(e, c). QH_2(d, c).

88 QH_2(e, b). QH_1_2(B, M, C) :- QH_1(B, C), QH_2(M, C). Goal % ngoi > QH_1_2(a, e, Ai) Ai=b, Ai = c b. nh ngha: Mt thao tc qui F(x) trn tp D gm 2 phn : . iu kin dng: Mt thao tc s cp ( bit cch thc hin trc tip) trn tp con Xo D . Mt li gi qui F(H(x)), vi H(x)D, sao cho sau mt s hu hn ln gi qui s phi dn n iu kin dng (H(H(H())) Xo, xD\Xo). * V d 3(thao tc qui thiu iu kin dng): Ba(B, C):- Con(C, B). Con(C, B):- Ba(B, C). Goal: > Ba(a,b) ? c. K thut kh ui qui bng cch dng bin ph: * V d 4: Tnh chiu di ca mt danh sch. Do mt v t c th c nhiu tc dng, nn ch thch thm dng vo-ra (I, o) ch cc cch thc s dng v t cho ng. Domains ptu = real ds = ptu* i = integer Predicates ChieuDai(ds,i) % (i, i) (i, o) (o, i), ! (o, o), readchar(_) ChieuDaiPhu(ds, i, i) % dng vo-ra: (i, i, i) (i, i, o) % ChieuDaiPhu(i,0,_): lun khi to bin th 2 l 0 Clauses ChieuDai([], 0). ChieuDai([_|Duoi], Kq) :- ChieuDai(Duoi,KqPhu), Kq = KqPhu + 1. ChieuDaiPhu([], Kq, Kq). ChieuDaiPhu([_|Duoi], Phu, Kq) :- PhuMoi=Phu+1, ChieuDaiPhu(Duoi, PhuMoi, Kq). Goal %ngoi > ChieuDai([1,2,3], 3) ? > ChieuDai([1,2,3], Kq) ? > ChieuDaiPhu([1,2,3], 0, 3) ? > ChieuDaiPhu([1,2,3], 0, Kq) ? > ChieuDaiPhu(Nao, 0, 1) ?

89

Bi tp: Vit 2 qui tc qui (c v khng c qui ui) tnh giai tha ca mt s t nhin. Ch : Th t cc v t cng tn trong phn Clauses c th c ngha khc nhau, c bit l cc v t qui. Chng hn, xem tc dng ca 2 cch vit qui tc kim tra danh sch c 1 phn t sau (v sa li cho ng: bi tp): Cch 1: DS1PTu([_|D]) :- DS1PTu(D). DS1PTu([]). Cch 2: DS1PTu([]). DS1PTu([_|D]) :- DS1PTu(D). vi cch hi: DS1PTu(No) ? d. Vi thao tc qui c bn trn danh sch: * V d 5: Lp qui tc kim tra quan h thuc gia mt phn t v mt danh sch: Thuoc(Ptu, DSach) % (i, i) (o, i) (i, o) ? Thuoc(PT, [PT|_]). Thuoc(PT, [_|DSDuoi]) :- Thuc(PT, DSDuoi). * V d 6: Lp qui tc ni hai danh sch: Noi(DSach, DSach, DSach) % (i, i, i) (i, i, o) (o, o, i) (i, o, i) (o, i, i) ? Noi([], L, L). Noi([PT|L1], L2, [PT|L3]) :- Noi(L1, L2, L3). ThuocMoi(PT, DS) :- Noi(_, [PT|_], DS). IV.2.3. Lt ct (!) L do dng lt ct: Do c ch tm kim t ng mc nh trong Prolog theo chiu su, nhng trong nhiu bi ton vi cc c trng ring, ta khng cn c ch quay lui hoc tm tip li gii k tip. Khi , ta c th dng lt ct t c mc ch . a. C php, tc dng ca lt ct: Dng du chm than ! biu din lt ct. Lt ct l v t lun ng v c tc dng ngn: c ch quay lui v tip tc tm kim li gii i vi cc v t cng tn vi nhng v t ng trc lt ct trong mt mnh no . iu dn n vic tit kim thi gian ln b nh khi dng lt ct thch hp.

90 Ta minh ha lt ct qua vi trng hp sau: - i vi qui tc khng qui: VT_1 :- a, !, b. % (1) VT_1 :- c. % (2) Khi a sai th v t c c thc hin. Khi a ng, s gp ! v thc hin tip b (k c nghim bi ca b, nu b ng), nhng s khng bao gi tm tip li gii cho a v (k c trng hp b sai) khng quay xung VT_1 th hai trong (2) kim tra c , vi cc tr trong i ca VT_1 tng ng vi ln gi . - i vi qui tc qui: VT_2. VT_2 :- a, !, VT_2. % (3) VT_2 :- b. % (4) Khi a sai, (4) s c kim tra. Khi a ng, VT_2 trong (4) s khng c kim tra ng vi ln gi , mc d VT_2 trong thn qui tc ca (3) l sai v s khng bao gi tm tip li gii cho a . b. Cc tnh hung c th s dng lt ct: - Ch tm li gii u tin Goal ngoi. - Trong cc bi ton ch c duy nht mt li gii, sau khi tm c li gii u tin, ta dng lt ct dng ngay qu trnh tm kim. - Ta mun dng khi mt mnh sai (nhng khng cn tm cch khc tha mn mnh ), hoc thay cho v t not, bng cch s dng t hp lt ct v v t fail ph hp. - Dng lt ct trong cc chng trnh Sinh v Th. * V d 7 (minh ha vi tnh hung dng lt ct): Domains i, ptu = integer Predicates RangBuoc(ptu) % minh ha tnh hung GiaiThua(i, i) % minh ha tnh hung ThuongNguyen(i, i, i) % hai i u N, minh ha tnh hung Sinh_1_So(i) Clauses % RangBuoc(X) :- not(free(X)). % sai khi X l bin khng rng buc RangBuoc(X) :- free(X), !, fail. RangBuoc(_). GiaiThua(0, 1) :- !. GiaiThua(N, Kq) :- N1 = N-1, GiaiThua(N1, Kq1), Kq = Kq1*N. ThuongNguyen(B, C, T) :- Sinh_1_So(T), T*C<=B, (T+1)*C>B, !.

91

Sinh_1_So(0). Sinh_1_So(Sau) :- Sinh_1_So(Truoc), Sau = Truoc + 1. . * V d 8 (Bi tp: tm cc li sai, hn ch v m rng cc trng hp c dng vo-ra tt hn): Tnh s cha v m ca mi ngi. Domains Ai = symbol i = integer Predicates SoChaMe(Ai, i) Clauses SoChaMe(Adam, 0). SoChaMe(Eva, 0). SoChaMe(_,2). % Gi : SoChaMe(Adam, 0): !. hoc: SoChaMe(Adam, BN): !, BN=0., * Ch : - Php ton X = Y c th hiu theo hai ngha: . Php so snh nu c X v Y l bin (hay biu thc) rng buc; . Php gn nu ch mt trong hai v l bin t do, cn v kia l biu thc hay bin rng buc (v s v ngha, b li khi c hai v u khng rng buc!) - C th thay php ton = bi v t Bng(X,X). * Gi to cc lnh cu trc nh cc NNLT c in: - if (K) then A; else B; Neu(DK) :- !, A. Neu( _ ) :- B. - switch (BT) { case a1: A1; break; case a2: A2; break; case an: An; break; default: B; break; }; %Gi s dng: Switch(BT) Switch(a1) :- !, A1. Switch(a2) :- !, A2. Switch(an) :- !, An. Switch( _ ) :- B.

92

- repeat A until (DK); Repeat :- Lap, A, DK, !. Lap. Lap :- Lap. - while (K) do A; While :- K, !, A, While. While. - for (i=Bdau; i<=Kthuc; i = i+Step) do A(i); % Gi s dng: For(Bdau, Kthuc, Step) For(I, N, Step) :- Du(Step, D), D*(I-N) > 0, !. For(I, N, Step) :- A(i), I_Sau = I+Step, For(I_Sau, N, Step). IV.3. CC V D IV.3.1. Bi ton Thp H Ni (Minh ha v t qui) V d 1: C 3 cc A, B, C. Trn cc A c n a trn chng ln nhau, vi ng knh khc nhau, sao cho a b lun nm trn a ln; hai cc B, C trng. Tm cch chuyn n a t A n C vi s ln di chuyn a t nht (2n-1), sao cho: mi ln ch di chuyn 1 a b nht trn cng ca mt cc ty sang mt cc khc a b lun nm trn a ln. %Program Thap_HaNoi Domains i = integer s = symbol Predicates HaNoi(i, i) ChuyenDia(i, i, s, s, s, i) Clauses HaNoi(N, SoLanDiChuyen) :- ChuyenDia(N, N, a, c, b, SoLanDiChuyen). ChuyenDia(1, Nhan, Tu, Den, _, 1) :- !, nl, write(Chuyen dia: , Nhan, tu , Tu, den , Den). ChuyenDia(N, Nhan, Tu, Den, Tgian, Tong):N1=N-1, NhanPhu=Nhan-1, ChuyenDia(N1, NhanPhu, Tu, TGian, Den, Tong1), ChuyenDia(1, Nhan, Tu, Den, Tgian, 1), ChuyenDia(N1, NhanPhu, TGian, Den, Tu, Tong2),

93 Tong = Tong1 + Tong2 + 1. Goal %trong makewindow(1, 3, 7, Thap Ha Noi, 0, 0, 25, 80), write(Nhap so dia n (1<=n<=12): ), readint(N), HaNoi(N, Tong), write(Tong so lan di chuyen dia: , Tong).. Kt qu ca chng trnh vi n=2 l: Chuyen dia: 1 tu a den b Chuyen dia: 2 tu a den c Chuyen dia: 1 tu b den c Tong so lan di chuyen dia: 3 IV.3.2. Bi ton x l vi phn k hiu (Minh ha bi ton x l k hiu): Tnh o hm ca mt hm s theo mt bin bt k. %Program X l vi phn k hiu Domains KyHieu = symbol So = real BieuThuc = bien(KyHieu); hang(So); cong(BieuThuc,BieuThuc); tru(BieuThuc,BieuThuc); nhan(BieuThuc,BieuThuc); chia(BieuThuc,BieuThuc); cos(BieuThuc); sin(BieuThuc); tg(BieuThuc); cotg(BieuThuc); ln(BieuThuc); log(BieuThuc,BieuThuc); exp(BieuThuc); mu(BieuThuc,BieuThuc); luyThua(BieuThuc,BieuThuc) Predicates d(BieuThuc,KyHieu,BieuThuc) Clauses d(hang(_),_,hang(0)). d(bien(X),X,hang(1)):-!. d(bien(_),_,hang(0)). d(cong(U,V),X,cong(U1,V1)):- d(U,X,U1), d(V,X,V1). d(tru(U,V),X,tru(U1,V1)):- d(U,X,U1), d(V,X,V1). d(nhan(U,V),X,cong(nhan(U1,V),nhan(U,V1))):- d(U,X,U1), d(V,X,V1). d(chia(U,V),X,chia(tru(nhan(U1,V),nhan(U,V1)),nhan(V,V))):d(U,X,U1), d(V,X,V1). d(sin(U),X,nhan(cos(U),U1)) :- d(U,X,U1). d(cos(U),X,tru(hang(0),nhan(sin(U),U1))) :- d(U,X,U1). d(tg(U),X,chia(U1, mu(cos(U),hang(2)))) :- d(U,X,U1).

94 d(cotg(U),X,nhan(hang(-1),chia(U1, mu(sin(U),hang(2))))) :- d(U,X,U1). d(ln(U),X,chia(U1,U)):-d(U,X,U1). d(log(U,V),X, Kq) :- d(chia(ln(V),ln(U)),X,Kq). d(exp(U),X,nhan(exp(U),U1)) :- d(U,X,U1). d(mu(U,V),X,nhan(mu(U,V),W)):- d(nhan(V,ln(U)),X,W). d(luyThua(U,hang(A)),X,nhan(hang(A),nhan(U1,luyThua(U,hang(A_1))))):A_1 = A-1, d(U,X,U1). Goal %ngoi: tnh vi phan ca x.sin(x) d(nhan(bien(x),sin(bien(x))),x, Kq). Kt qu (cha rt gn) ca chng trnh l: Kq=cong(nhan(hang(1),sin(bien(x))),nhan(bien(x), nhan(cos(bien(x)),hang(1)))) IV.3.3. Bi ton suy lun lgic (Minh ha lp trnh cho bi ton lp lun lgic) V d 2: Trn mt o n, ch c hai nhm ngi: mt nhm ch gm nhng ngi lun ni tht v nhm cn li ch gm nhng ngi lun ni lo. Mt nh thng thi n o ny v gp ba ngi A, B, C. A ni: Trong ba ngi chng ti ch c ng mt ngi ni tht, C ni: C ba ngi chng ti u ni lo. Hi trong ba ngi A, B, C, ai ni tht, ai ni lo ? Ta biu din mi phng n ca bi ton bng danh sch [A, B, C], sao cho mi phn t ch gm mt trong hai trng thi 0, 1, tng ng vi trng thi ni lo hoc ni tht. Ta m t cu ni ca A v C nh sau: nu A ni tht th Tng = A+B+C = 1, nu A ni lo th Tng 1; nu C ni tht th Tng = A+B+C = 0, nu C ni lo th Tng > 0. %Program Noi lao, noi that Domains i, ptu = integer ds = ptu* Predicates TaoDS(i,ds) Quet(ptu) Giai(i,ds) SuKien(symbol,ds) Tong(ds,integer) Viet(ds,i) Clauses Quet(0).

95 Quet(1). TaoDS(N,[]) :- N <= 0, !. TaoDS(N,[Dau|Duoi]) :- Quet(Dau),N1 = N - 1, TaoDS(N1,Duoi). Giai(N,DS) :- TaoDS(N,DS), SuKien("A",DS), SuKien("C",DS). SuKien("A",DS) :- DS = [1,_,_], Tong(DS,1). SuKien("A",DS) :- DS = [0,_,_], Tong(DS,So), So <> 1. SuKien("C",DS) :- DS = [_,_,1], Tong(DS,0). % phi li ! SuKien("C",DS) :- DS = [_,_,0], Tong(DS,So), So > 0. Tong([],0) :- !. Tong([Dau|Duoi],Kq) :- Tong(Duoi,KqDuoi), Kq = KqDuoi + Dau. Viet([],_) :- nl,!. Viet([1|D],I):-!,I1=I+1,I2 =I1+64,char_int(C,I2), write(C," noi that\n"), Viet(D,I1). Viet([0|D],I):-!,I1=I+1,I2 =I1+64,char_int(C,I2), write(C," noi lao\n"), Viet(D,I1). Goal % trong Giai(3,DS),Viet(DS,0),nl. Kt qu ca chng trnh l: A noi that B noi lao C noi lao

96

IV.4. PH LC: VI V T CHUN CA PROLOG


IV.4.1. NHP V XUT D LIU
Cc v t xut v nhp d liu xt y s c thao tc t cc thit b vo ra hin thi, ngm nh l mn hnh v bn phm.

1. Cc v t nhp d liu
Cc k hiu s s dng trong biu din c php cc v t c ngha nh sau: Sau tn v t cc bin c cc kiu c lit k tip theo. Sau , dng vo ra i vi cc bin ca v t s c ch ra, trong cc bin c v tr tng ng vi k t: . o phi l bin t do (sau khi v t c thc hin cc kt qa ca n s c gn vo cc bin ny); . i phi l bin rng buc hoc i tng hng (chng cung cp d liu ban u cc v t ny thc hin). a) readln(StringVariable), (string) (o): trong StringVariable l bin t do c kiu string. V t ny c tc dng c mt chui t thit b vo hin thi (v tt nhin c gn cho bin StringVariable) cho n khi gp k t xung dng (phm Enter, c m ASCII tng ng l \13) c n. b) readint(IntgVariable), (integer) (o): c mt s nguyn t thit b vo hin thi cho n khi gp k t xung dng c n. c) readreal(RealVariable), (real) (o): c mt s thc t thit b vo hin thi cho n khi gp k t xung dng c n. d) readchar(CharVariable), (char) (o): c mt k t (nhng khng xut hin k t trn mn hnh) t thit b vo hin thi v khng cn kt thc bng k t xung dng. e) file_str(DosFileName, StringVariable), (string, string) (i, o) (i, i): chuyn i ni dung vn bn gia file c tn thc l DosFileName v bin chui c tn StringVariable (cho n khi gp k t kt thc file eof, tng ng vi t hp phm Ctl-z hay m ASCII l \26). f) inkey(CharVariable), (char) (o): c mt k t t bn phm (gn cho bin CharVariable). V t ny ch ng khi c mt k t c n t bn phm. g) keypressed: kim tra vic mt phm c bm hay cha nhng khng c k t ny vo. V t ny ch ng khi c mt k t c n t bn phm.

97 h) keypressed: kim tra vic mt phm c bm hay cha nhng khng c k t ny vo. V t ny ch ng khi c mt k t c n t bn phm.

2. Cc v t xut d liu
a) write(Variable|Constant * ): trong du * ch ra rng cc bin Variable (rng buc) hay hng Constant c th c lp li v chng c vit cch nhau bng cc du phy ,. V t ny c tc dng xut n thit b ra mt s i tng. b) nl: xung dng. c) writef(FormatString, Variable|Constant *): xut ra mt s i c nh khun dng theo c php sau: %-m_p$, trong : . -: canh l bn tri, nu khng c du - s l canh l bn phi; . m: xc nh rng vng nh nht cho i; . p: xc nh chnh xc cc s sau du chm thp phn hay s ln nht cc k t c in ra ca chui; . $ l mt trong cc k hiu quy c chun: d: s thp phn dng chun. x: s thp lc phn. s: chui (symbols hay strings). c: k t (chars hay integers). g: s thc dng ngn nht ngm nh. e: s thc dng m. f: s thc dng du phy ng. d) \n: k t xung dng. \t: k t li vo mt s khong trng. \nnn: k t a vo bng m ASCII tng ng.

IV.4.2. CC THAO TC FILE


a) openread(SymbolicFileName, DosFileName), (file, string) (i, i): m mt file trn a DosFileName c v gn cho tn file hnh thc (trong phn khai bo kiu file) SymbolicFileName. b) openwrite(SymbolicFileName, DosFileName), (file, string) (i, i): m mt file trn a ghi v gn cho tn file hnh thc; nu file tn ti th n s c xa trc khi gi. c) openappend(SymbolicFileName, DosFileName), (file, string) (i, i):m mt file trn a ni thm d liu v gn cho tn file hnh thc.

98 d) openmodify(SymbolicFileName, DosFileName), (file, string) (i, i):m mt file trn a sa i (c v ghi) v gn cho tn file hnh thc. Khi dng v t ny, nn kt hp vi v t filepos cp nht file ti v tr ty chn. e) readdevice(SymbolicFileName), (file) (i) (o): t li hay hin th thit b c vo file ang m ( c hay sa i), ngm nh l bn phm. f) writedevice(SymbolicFileName), (file) (i) (o): t li hay hin th thit b ghi vo file ang m ( c ghi hoc ni thm hay sa i), ngm nh l mn hnh. g) closefile(SymbolicFileName), (file) (i): ng file (d n m hay cha). h) filepos(SymbolicFileName, FilePosition, Mode), (file, real, integer) (i, i, i) (i, o, i): a con tr n hay tr li gi tr ca v tr FilePosition trong file tnh t ch Mode: 0: u file, 1: v tr hin ti trong file, 2: cui file. i) eof(SymbolicFileName), (file) (i): kim tra con tr c cui file hay khng. V t ny ng nu con tr v tr cui file. j) existfile(DosFileName), (string) (i): v t ny thnh cng nu file c tn ch ra tn ti trong th mc hin thi. k) deletefile(DosFileName), (string) (i): xa file c tn ch ra. l) renamefile(OldDosFileName, NewDosFileName), (string, string) (i, i): i tn file c thnh tn file mi.

m) disk(DosPath), (string) (i) (o): thit lp hay tr li a v ng tm


kim th mc mc nh.

IV.4.3. CC THAO TC I VI MN HNH V CA S


1. Mn hnh Mu nn Black Blue Green Cyan Red Magenta Brown Gi tr 0 16 32 48 64 80 96 Mu ch Black Blue Green Cyan Red Magenta Brown Gi tr 0 1 2 3 4 5 6

99 White 112 White Grey Light Blue Light Green Light Cyan Light Red Light Magenta Yellow White (High Intensity) 7 8 9 10 11 12 13 14 15

a) attribute(Attr), (integer) (i) (o): cho (t hay tr li) gi tr thuc tnh ca mn hnh. Gi tr c trng cho thuc tnh ca mn hnh, da vo bng trn y, c tnh nh sau: 1. Chn mt mu ch v mt mu nn; 2. Cng nhng gi tr nguyn tng ng vi mu trong bng 1; 3. Cng thm gi tr vi 128 nu mun cc ch hin th nhp nhy. b) scr_char(Row, Column, Char), (integer, integer, char) (i, i, i) (i, i, o): cho k t Char trn mn hnh ti v tr c ta (Row, Column). c) scr_attr(Row, Column, Char), (integer, integer, char) (i, i, i) (i, i, o): cho thuc tnh ca mn hnh ti v tr c ta (Row, Column). d) filed_str(Row, Column, Length, String), (integer, integer, integer, string) (i, i, i, i) (i, i, i, o): cho chui String trn mn hnh ti mt vng bt u v tr c ta (Row, Column) v c di l Length k t. e) filed_attr(Row, Column, Length, Attr), (integer, integer, integer, integer) (i, i, i, i) (i, i, i, o): cho thuc tnh ca mn hnh ti mt vng bt u v tr c ta (Row, Column) v c di l Length k t. f) cursor(Row, Column), (integer, integer) (i, i) (i, o): dch con tr n v tr c ta (Row, Column) hay tr li ta ca con tr hin thi.

2. H thng ca s
a) makewindow(WindowNo, ScrAtt, FrameAtt, FrameStr, Row, Column, Height, Width), (integer, integer, integer, string, integer, integer, integer, integer) (i, i, i, i, i, i, i, i) (o, o, o, o, o, o, o, o): xc nh mt vng mn hnh lm ca s.

100 b) makewindow(WindowNo, ScrAtt, FrameAtt, FrameStr, Row, Column, Height, Width, ClearWindow, FrameStrPos, BorderChars), (integer, integer, integer, string, integer, integer, integer, integer, integer, integer, string) (i, i, i, i, i, i, i, i, i, i) (o, o, o, o, o, o, o, o, o, o): xc nh mt vng mn hnh lm ca s vi cc thuc tnh sau: ClearWindow = 0 khng xa ca s sau khi to, = 1 xa ca s sau khi to; FrameStrPos BorderChars = 255 canh tt gia, <> 255 t tt ti v tr FrameStrPos; mt chui gm 6 k t v khung: k t th 1: gc trn bn tri, k t th 2: gc trn bn phi, k t th 3: gc di bn tri, k t th 4: gc di bn phi, k t th 5: ng k ngang, k t th 6: ng k dc.

c) shiftwindow(WindowNo), (integer) (i) (o): i ca s lm vic n ca s th WindowNo (vn gi nguyn trng thi ca ca s trc ) hay tr li s ca ca s ang lm vic. d) gotowindow(WindowNo), (integer) (i): di chuyn nhanh n ca s th WindowNo m khng lu ni dung ca ca s c vo b m ca s. e) resizewindow: iu chnh li kch thc ca s nh kiu thc n. f) resizewindow(StartRow, NoOfRows, StartCol, NoOfCols), (integer, integer, integer, integer) (i, i, i, i): iu chnh li kch thc ca s mt cch trc tip. g) colorsetup(Main_Frame), (integer) (i): thay i mu ca s hay khung ty theo gi tr ca: Main_Frame = 0 i mu ca s = 1 i mu khung h) existwindow(WindowNo), (integer) (i): v t ny thnh cng nu tn ti ca s s WindowNo. i) removewindow: loi b ca s hin thi. j) removewindow(WindowNo, Refresh), (integer, integer) (i, i): loi b ca s s WindowNo vi ch xa nn hay khng xa nn (nu Refresh bng 1 hoc 0). k) clearwindow: xa ca s hin thi v mu nn ca n.

101 l) window_str(ScreenString), (string) (i) (o): chuyn i ni dung gia ca s hin thi v chui ScreenString. m) window_at(Attribute), (integer) (i): xc nh thuc tnh cho ca s hin thi. n) scroll(NoOfRows, NoOfCols), (integer, integer) (i, i): cun ni dung ca ca s ln (hay xung) X=NoOfRows dng ty theo n > 0 (hay < 0) v sang tri (hay phi) X=NoOfCols ct ty theo n > 0 (hay < 0). o) framewindow(FrameAttr), (integer) (i): thay i thuc tnh ca khung ca s. p) framewindow(FrameAttr, FrameStr, FrameStrPos, FrameTypeStr), (integer, string, integer, integer) (i, i, i, i): thay i thuc tnh ca khung ca s theo cc ch sau: FrameAttr = thuc tnh khung FrameStr = tt ca khung FrameStrPos = nhn gi tr t 0 n rng ca s. N t v tr cho tt trn khung. Tt s t gia nu n bng 255 FrameTypeStr = mt chui gm 6 k t ch dng ca khung.

IV.4.4. CC V T CHUN KHC 1. Thao tc chui


a) frontchar(String, FrontChar, RestString), (string, char, string) (i, o, o) (i, i, o) (i, o, i) (i, i, i) (o, i, i): tch mt chui thnh k t u v chui cn li. b) fronttoken(String, Token, RestString), (string, string, string) (i, o, o) (i, i, o) (i, o, i) (i, i, i) (o, i, i): tch mt chui thnh mt t v chui cn li. c) frontstr(Length, InpString, StartString, RestString), (integer, string, string, string) (i, i, o, o): tch t mt chui cho trc InpString ra mt chui con StartString bt u t k t th nht c di l Length v chui cn li RestString. d) concat(String1, String2, String3), (string, string, string) (i, i, o) (i, o, i) (o, i, i) (i, i, i): ni String1 v String2 thnh String3: String3 = String1 + String2. e) strlen(String, Length), (string, integer) (i, i) (i, o) (o, i): chiu di ca String l Length. Vi dng vo ra (o, i) ta c mt chui gm Length k t trng.

102 f) isname(StringParam), (string) (i): kim tra chui c l mt name (mt dy cc k t ch hoc s hoc du _ nhng bt u bng ch hay k t _ trong Turbo Prolog khng.

2. Chuyn i kiu
a) char_int(CharParam, IntgParam), (char, integer) (i, o) (o, i) (i, i): chuyn i gia mt k t v m ASCII tng ng vi n. b) str_int(StringParam, IntgParam), (string, integer) (i, o) (o, i) (i, i): chuyn i gia mt chui v mt s nguyn tng ng vi n. c) str_char(StringParam, CharParam), (string, char) (i, o) (o, i) (i, i): chuyn i gia mt chui v mt k t tng ng vi n. d) str_real(StringParam, RealParam), (string, real) (i, o) (o, i) (i, i): chuyn i gia mt chui v mt s thc tng ng vi n. e) upper_lower(StringInUpperCase, StringInLowerCase), (string, string) (i, o) (o, i) (i, i): chuyn i gia mt chui k t hoa v mt chui k t thng. f) upper_lower(CharInUpperCase, CharInLowerCase), (char, char) (i, o) (o, i) (i, i): chuyn i gia mt k t hoa v mt k t thng.

3. Thao tc di vi c s d liu trong


a) consult(DosFileName), (string) (i): gi ra v b sung mt file c s d liu trong (file c khi to v lu mt c s d liu trong khng tn bng v t save(?)). b) consult(DosFileName, InternalDatabaseName), (string, InternalDatabaseName) (i, i): gi ra v b sung mt file c s d liu trong (file c khi to v lu mt c s d liu trong khng tn bng v t save(?, ?)). c) save(DosFileName), (string) (i): lu mi mnh ca c s d liu trong khng tn. d) save(DosFileName, InternalDatabaseName), (string, InternalDatabaseName) (i, i): lu mi mnh ca c s d liu trong c tn. e) assert(Term), (InternalDatabaseDomain) (i) hay asserta(Term), (InternalDatabaseDomain) (i): chn mt s kin vo ui mt c s d liu trong khng tn. f) assertz(Term), (InternalDatabaseDomain) (i): chn mt s kin vo ui mt c s d liu trong khng tn.

103 g) retract(Term), (InternalDatabaseDomain) (_): v t khng tt nh (nondeterm) ny loi b s kin ch ra ca c s d liu trong khng tn. h) retract(Term, InternalDatabaseDomain), (InternalDatabaseDomain) (_, i): v t khng tt nh (nondeterm) ny loi b s kin ch ra ca c s d liu trong c tn. i) retractall(Term), (InternalDatabaseDomain) (_): v t ny loi b mi s kin ca c s d liu trong khng tn. Nn s dng bin v danh trong v t ny. V t ny khng bao gi sai. j) retractall(_, InternalDatabaseDomain), (_, InternalDatabaseDomain) (_, i): v t ny loi b mi s kin ca c s d liu trong c tn. Nn s dng bin v danh trong v t ny.

4. Cc lnh lin quan n h iu hnh DOS


a) system(DosCommandString), (string) (i): thc hin mt lnh ca h iu hnh DOS trong mi trng Turbo Prolog. b) dir(Path, Filespec, Filename), (string, string, string) (i, i, o): xem cc files trong th mc v chn mt file bng menu xem ni dung. c) exit: thot ra mt chng trnh v tr v mi trng lm vic ca Prolog.

5. Cc lnh linh tinh khc


a) random(RealVariable), (real) (o): to mt s ngu nhin thc trong khong [0, 1). b) random(MaxValue, RandomInt), (integer, integer) (i, o): to mt s nguyn ngu nhin trong khong [0, RandomInt). c) sound(Duration, Frequency), (integer, integer) (i, i): to ra m thanh c trng Duration v tn s Frequency. d) beep: to ra mt ting ci ngn. e) date(Year, Month, Day), (integer, integer, integer) (o, o, o) (i, i, i): cho ngy, thng, nm ca ng h h thng. f) time(Hours, Minutes, Seconds, Hundredths), (integer, integer, integer, integer) (o, o, o, o) (i, i, i, i): cho gi ca ng h h thng. g) trace(on/off), (string) (o) (i): t ch ln vt hay khng cho chng trnh. h) findall(Variable, Atom, ListVariable): ghi cc gi tr ca bin trong Atom trng tn vi Variable vo danh sch ListVariable. i) not(Atom): v t ny c gi tr logic ph nh ca v t Atom. Lu : khng c dng bin t do trong v t Atom.

104 j) free(Variable): v t ny ch ng khi Variable l bin t do. k) bound(Variable): v t ny ch ng khi Variable l bin rng buc. l) fail: v t ny lun lun sai. m) true: v t ny lun lun ng. n) Cc php ton s hc trong Turbo Prolog: +, -, *, /, mod, div. o) Cc php ton quan h trong Turbo Prolog (c gi tr khng ch i vi cc s m cn i vi cc k t, chui, symbol): >, <, =, >=, <=, <>, ><. p) Cc hm trong Turbo Prolog: sin, cos, tan, arctan, ln, log, exp, sqrt, round (s nguyn lm trn), trunc (s nguyn cht ct), abs.

105

BI TP CHNG IV
(Phn bi tp lm quen vi v t trong Prolog) Bi 1: Xt cy gia ph sau: B2 ng2 B1

B1

M2

Ch

B2

M1

Contrai1

Congi1

Contrai3

Contrai2

Congi2

Congi3

Cy c m t bi cc v t quan h sau: cha(Cha, Con), m(M, Con), nam(DO), n (DB). Hy lit k cc quan h cn li nh: anhEm(Ng1, Ng2), con(Con, Cha, M), ch(Ch, Chu), b(B, Chu), anhEmH(Ng1, Ng2)... t nhng v t trn. Suy ra mi quan h gia hai ngi bt k. Bi 2: Mt dch v du lch phc v nhng chuyn i trong 1 tun hoc 2 tun Rome, London, Tunis. Trong mt quyn sch gii thiu v dch v du lch, vi mi a im c gi c i li (ty vo thi gian ca chuyn i) v chi ph cho 1 tun, ty vo a im v mc tin nghi: khch sn, nh tr, cm tri ngoi tri. a) Nhp vo cc s kin m t quyn sch trn (gi c do bn nhp vo). b) Hy m t quan h Chuyni(TP, STun, TinNghi, ChiPh). c) M t quan h Chuyni_tTnKm(TP, STun, TinNghi, ChiPh, ChiPhMax) sao cho chi ph ca chuyn i thp hn ChiPhMax. Bi 3: Trong mt dch v t vn hn nhn, lit k mt danh sch cc cp xng i c th lm quen theo cc nhn nh sau: - nam(n, t, c, a), n(n, t, c, a). n: tn; t: chiu cao. c: mu tc (vng, hung, nu, ht d). a: tui (tr, trung nin, gi).

106 SThch(n, m, l, s) (s thch) c ngha l: Ngi n thch loi nhc m (classique, pop, jazz), thch vn hc loi l (phiu lu, vn hc vin tng, trinh thm), v chi mn th thao s(qun_vt, bi, chy b). - tm(n, t, c, a): Ngi n tm bn c cc tnh cht t, c, a. Hai ngi x v y gi l hp nhau nu c cng ngoi hnh (t, c, a) v s thch v: l, m, s. a) Nhp d liu v cc khch hng. b) M t qui tc hp_ngoihnh(x, y) v cng_s thch(x, y). c) Vit chng trnh xc nh nhng cp xng i. (Phn bi tp v danh sch, qui, lt ct) Bi 4: Xy dng cc v t quy (c hoc khng s dng nht ct v sa i phn ui ca quy, nu c th) : a) Tm (hoc xa) phn t th 1, th 2, phn t cui cng trong mt danh sch. b) Tm (hoc ly ra) phn t u tin trong danh sch trng vi mt gi tr cho trc. c) Tm v ly ra tt c cc phn t trong danh sch trng vi mt gi tr cho trc. d) Tnh gi tr trung bnh cng ca mt danh sch kiu s thc. e) Xut ra tt c cc cp phn t k tip nhau ca danh sch. f) To danh sch tt c cc phn t v tr chn ca danh sch d liu L: Gi nguyn trt t xut hin trong L. o ngc trt t. g) Vit chng trnh trn(u, v, w) nhn xen k tng phn ca u v v to thnh danh sch w. h) To danh sch cha cc s chn ca mt danh sch s nguyn cho trc. i) o ngc trt t mi phn t ca mt danh sch. j) Xut ra mi hon v ca nhng phn t ca danh sch cho trc. k) Xy dng v t Thuc trong c thm mt i tr v tr TRUE nu phn t x thuc danh sch l cho trc v FALSE trong trng hp ngc li. l) Xy dng qui tc NmNgoi(x, L) kim tra xem x khng thuc danh sch L. m) Xy dng qui tc KhcNhau(L) kim tra danh sch L khng c phn t trng nhau. n) Xy dng qui tc Phnu(m, L) kim tra danh sch m l phn u ca danh sch L. o) Xy dng qui tc NmTrongLinTip(m, L) kim tra mi phn t ca m u nm lin tip trong danh sch L. -

107 p) Xy dng qui tc PhnHoch(L, u, v, w) phn hoch danh sch L thnh 3 danh sch u, v, w. q) Thm mt phn t vo cui danh sch. r) Tm v xa phn t th k ca danh sch l cho trc. s) Chn mt phn t x sau phn t th k ca danh sch L (0 <= k <= length(L)). t) Xy dng danh sch m cc phn t l cn bc hai ca cc phn t tng ng trong danh sch L cc s thc cho trc. Bi 5: Tm n b 3 s t nhin (x, y, z) u tin tha tnh cht Pythagore sau: 0<x<y<z x2 + y2 = z2 UCLN(x, y, 1): c chung ln nht ca x v y bng 1. Bi 6 (+): Tm nk s t nhin u tin a1 , a 2 ,..., a n tha:
a1 .a 2 .a n = a ik
i =1 n

(k = 3, 4, 5)

VD: k = 3, 153 = 13 + 53 + 33. Bi 7: Kim tra s t nhin N c phi l s nguyn t khng? Tm n s nguyn t u tin. Bi 8: Tm cc s nguyn t <= n ( sng Eratosthene). Bi 9: a) Nhp 2 danh sch s nguyn dng khng c phn t trng lp t bn phm. b) Xy dng cc php ton v cc quan h trn tp hp: Hi, Giao, Hiu, Thuc, Bao hm. Bi 10: Ci t cc thut ton sp xp: chn, chn, tro i n gin v sp xp nhanh. Bi 11 (+): Cc nh ca mt th c nh s t 0 -> n. Mi cung ca th tng ng vi qui tc Cung(i, j) ni gc i vi ngn j. Xy dng qui tc ngi(x, y, L) vi L l danh sch biu din ng i khng lp t x n y. Bi 12 (+): Ci t cy nh phn tm kim v cc thao tc c bn. Bi 13: Gii quyt bi ton Thp H Ni bng quy. Bi 14 (*): (8 hu) t 8 con hu ln bn c sao cho khng con no n con no.

108 Bi 15 (*): (Dominos) C mt danh sch cc qun c min. Mi qun c min c biu din bi Cp(i, j) ng vi 2 con s ca n. Ngi ta tm cch sp xp chng theo tnh cht sau: Mi con min c th xp vo mt trong hai u ca hng xp. Xut pht t mt con min trong s cc con c cho, hy xy dng mt dy hp l cha tt c cc min. Bi 16 (*): Gii quyt bi ton ma phng cp n l. (Phn bi tp v tr chi, suy lun lgic) Bi 17: (Nga vn) C 5 ngi quc tch khc nhau sng trong 5 cn nh mu khc nhau. Mi ngi c mt con th ring, mt thc ung ring, v ht thuc ca nhng hng khc nhau. - Ngi Anh sng trong cn nh mu . - Con ch thuc v ngi Ty Ban Nha. - Ngi ung c ph trong cn nh mu xanh l cy. - Ngi Ukrain ung tr. - Ngi nh xanh l cy cnh ngi nh trng, bn phi. - Ngi ht thuc OldGold nui nhng con sn. - Ngi ung sa ngi nh chnh gia. - Ngi ht thuc Kool sng trong cn nh mu vng. - Ngi Nauy sng trong cn nh u tin bn tri. - Ngi ht thuc Chesterfield sng cnh ngi c nui co. - Ngi ht thuc Kool sng cnh ngi c nui nga. - Ngi ht thuc Gitanes ung ru. - Ngi Nht ht thuc Craven - Ngi Nauy sng cnh ngi nh mu xanh da tri. Hi: Ai ung nc? Ai l ch con nga vn? Bi 18 (*): (Tr chi tt en v tt trng) Bt u t 3 tt en v 3 tt trng c sp xp v cch nhau bi mt khong trng. VD: BBB_NNN. Mi ln nh ch c 1 trong 4 php dch chuyn sau c thi hnh: Tt en trt sang tri: BNB_NNB -> BNBN_NB Tt en nhy sang tri: BN_BNNB -> BNNB_NB Tt trng trt sang phi: BNB_NNB -> BN_BNNB Tt trng nhy sang phi: BBN_NNB -> B_NBNNB

109 Vit 1 chng trnh chuyn t trng thi u sang trng thi kt (mi tt trng u nm bn phi). Bi 19 (*): Cho 1 biu thc vi php * (Nhan) v + (Cong). Hy sa i c 1 tng cc tch bng cch thm vo du ngoc. VD: a * (b + c) + (d + e) * (f + g) = (((((a * b + a * c) + d * f) + e * f) + d * g) + e * g) C ngha l: Cong(Nhan(a, Cong(b, c), Nhan(Cong(d, e), Cong(f, g)))) cho ra Cong(Cong(Cong(Cong(Cong(Nhan(a, b), Nhan(a, c)), Nhan(d, f)), Nhan(e, f)), Nhan(d, g)), Nhan(e, g)) Hy xy dng chng trnh trn theo 2 giai on: - Phn phi Nhan sao cho khng c Nhan no c Cong lm i. - Chuyn thnh cy sao cho nhnh phi ca Cong khng cha Cong khc, nhnh phi ca Nhan khng cha Nhan khc. Bi 20 (*): Cho biu thc dng And(p, q), Or(p, q), Not(q), trong p, q l bin hoc l biu thc cng dng. Ta c: And(Or(p, q), r) <=> Or(And(p, r), And(q, r)) And(p, Or(q, r)) <=> Or(And(p, q), And(p, r)) Not(Or(p, q)) <=> And(Not(p), Not(q)) Not(And(p, q)) <=> Or(not(p), not(q)) Not(Not(p)) <=> p Hy chuyn biu thc theo yu cu sau: Mi nt Or ch c t tin l Or. Mi nt And ch c t tin l And. a) Vit chng trnh thc hin cng vic trn. b) Thay i chng trnh mi nhnh tri Or khng cha nt Or khc, v mi nhnh tri And khng cha And khc. Bi 21 (*): (Nhng ng chng hay ghen) C ba cp v chng phi qua sng nhng ch c mt chic thuyn ch ch c ti a hai ngi. Hy lp trnh cho cc chuyn i sao cho khng c b v no trn b hay trn thuyn vi nhng ngi n ng X khc m khng c chng mnh hoc khng c ng thi vi v ca X. Bi 22 (*): (Si, d v bp ci) C mt con si, mt con d v mt bp ci phi qua sng. Ch c mt ngi cho thuyn, ch ch c mi ln mt trong s chng. Nu khng c mt ngi cho thuyn th d s n bp ci v si s n tht d. Hy lp trnh cho cc chuyn i.

110

TI LIU THAM KHO


[1] Bch Hng Khang, Hong Kim. Tr tu nhn to - Cc phng php v ng dng. NXB Khoa hc K thut, 1989. [2] Hong Kim. Gii mt bi ton trn my tnh nh th no (tp 1 v 2). NXB Gio dc, 2001. [3] Nguyn Thanh Thy. Tr tu nhn to - Cc phng php gii quyt vn v k thut x l tri thc. NXB Gio dc, 1995. [4] A. Thayse. Approche logique de lintelligence artificielle (T1, T2, T3). Dunod, Paris, 1990. [5]. Ivan Bratko, Prolog - Programming for artificial intelligence, AddisonWesley, 1990.

You might also like