Top Banner
Jess Jess (Java Expert System Shell) 전문가 시스템(Expert System)을 구축하기 위한 Shell이다.
22

Jess

Jun 26, 2015

Download

Documents

Jeong YeongGwon

Blogcocktail Dev team Aug.2009 Workshop
by kyoe
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Jess

JessJess(Java Expert System Shell)

전문가 시스템(Expert System)을 구축하기 위한 Shell이다.

Page 2: Jess

전문가시스템 (expert system) 은 전문가가 가지고 있는 지식을 인위적으로 컴퓨터에게 부여하여 그 방면에 비전문가라 할지라도 그러한 전문가의 지식을 이용하여 상호 대화를 통하여 원하는 결과를 얻는 일종의 자문형 컴퓨터 시스템이다

전문가 시스템전문가 시스템

Page 3: Jess

연역법 연역법 (Deduction)(Deduction)

Deduction (연역법) : A → B 즉 A를 알면 B를 안다.

1) 모든 포유동물은 심장을 가지고 있다.2) 모든 말은 포유동물이다. ∴ 모든 말은 심장을 가지고 있다.

전제와의 논리적 관계만으로 필연적으로 결론이 도출되는 추론을 연역추론이라한다.

Page 4: Jess

귀납법귀납법(Induction)(Induction)Instance로부터 Rule을 만들어 낸다.

* 이 백조는 흰색이다 ........ 모든 백조는 흰색이다.* 당구볼은 큐로 쳤을때 움직인다 ........... 모든 행동에 대해, 동등한 반작용이 있다.

증명으로부터 가설을 유도해낸다. 즉 결론은 얻어진 사실로부터 추론된다.

은행나무는 낙엽이 진다. 단풍나무는 낙엽이 진다.⇒ 모든 나무는 낙엽이 진다 : False

결과는 False일 수 있다. : Instance가 모든 Case를 전부 보여줄 수는 없기 때문이다.유도된 결론은 정확하지 않을수 있고 또한 새로운 사실이 알려질 경우 변할수 있다.

Page 5: Jess

Rule-base Expert System

사실(Facts)관계를 간단한 이름으로 표현사실은 여러개일수 있고 규칙에 따라 만들어지고 삭제되어 진다.

규칙(Rules)다른사실로부터 하나의 또다른 사실을 추론할수 있게함

Page 6: Jess

추론엔진 수행과정추론엔진 수행과정

1. 패턴매칭 (Pattern Matching) : 새로운 사실 (fact) 가 입력된 작업기억 (working memory) 에서 규칙 (rule) 이 있는 production memory 간의 패턴 매칭하여 매칭되는 rule 들을 찾아낸다.

2. 충돌해결 (Conflict Resolution) : 복수개의 rule 이 해당될 때 최적의 rule 을 선택한다.

3. 실행 (Execution) : 선택된 rule 을 실행하고 새로이 얻은 fact 를 모두 작업기억에 저장하여 다시 패턴매칭을 시작한다.

Page 7: Jess

충돌 해결충돌 해결(conflict resolution)

각 주기에서 수행 가능한 규칙이 하나 이상인 경우 해결 정책

1. Working Memory에 의하여 만족되는 최초의 규칙

2. 가장 높은 우선순위(priority)를 가진 규칙 선택

3. 현재의 작업 메모리에 만족되는 가장 특수한(specific) 규칙

즉, 가장 세분화된 조건을 갖는 규칙.

조건부를 구성하는 논리곱요소 (conjunct)가 가장 많은 규칙

4. 작업 메모리에 삽입된 가장 최근의 정보에 만족되는 규칙

5. 가장 새로운 규칙.

이전에 수행되지 않았던, 혹은 수행되었더라도 다른 변수값으로 수행되었던 규칙

6. 임의의 규칙

7. 순서에 상관없이 만족되는 모든 규칙을 병행하여 수행

Page 8: Jess

JESS Syntax

Page 9: Jess

- 일반변수 -

(bind ?age 25) (O)(bind ?age = 25) (X)(bind ?name "kyoe") (O)

=> 모든 변수는 ‘?’로 선언=> Bind 키워드를 사용해 데이터를 할당한다.

- 전역변수 -

(defglobal ?*temp* = 100)

=> 변수 선언시 '?* *' 이런형식으로 선언하며 데이터할당시 '='을 사용한다.=> 전역변수는 reset 명령어를 사용해도 초기화 되지 않는다.=> 프로그램이 종료될때 소멸

변수변수(Variable)(Variable)

Page 10: Jess

데이터 출력데이터 출력

(printout t"결과값2 : " ?age crlf)(printout t"결과값5 : " ?*imsi* crlf)

printout 을 사용해서 변수에 할당된 데이터를 콘솔창에 출력 한다.'t' → 콘솔창에 출력‘crlf’ → 한줄 개행

Page 11: Jess

연산연산

JESS : (bind ?x(+(+ 2 2)(* 3 3)))

C언어 : x = (2+2) + (3*3)

Jess에서는 lisp에서와 마찬가지로 선행표기법을 쓴다.

Page 12: Jess

리스트 (List)

- 리스트 선언 -(bind ?com-list (create$ 모니터 본체 스피커))=>리스트 선언시 특수 함수인 create$ 함수 사용

- 헤드와 꼬리 -(printout t"첫번째 원소 : " (first$ ?com-list) crlf)(printout t"나머지 원소 : " (rest$ ?com-list) crlf) => 헤드(head) : 모니터=> 꼬리(tail) : 본체 스피커=> first$ 와 rest$라는 특수 함수를이용해 헤드와 꼬리부분을 받아올수 있다.

- 특정 원소 선택 -(printout t"특정위치의 원소 : " (nth$ 2 ?com-list) crlf) => nth$ 함수는 리스트의 특정원소를 얻어올수있다.

- 리스트에 데이터 추가 -(bind ?addcom-list (create$ ?com-list 키보드 마우스))=> 생성된 com-list 리스트를 할당 할 수있다.=> 결과값 : 모니터 본체 스피커 키보드 마우스

Page 13: Jess

ControlControl

- foreach -(bind ?com-list (create$ 모니터 본체 스피커))

(bind ?num 0)(foreach ?data-list ?com-list

(printout t (++ ?num)" : " ?data-list crlf) )

- for -(for (bind ?i 0) (<= ?i 9) (++ ?i)

(printout t"3 *" ?i " = " (* 3 ?i) crlf) )

- while -(bind ?num 1)

(while (<= ?num 9) do (printout t "2 * " ?num " = "(* 2 ?num) crlf) (++ ?num) )

Page 14: Jess

ControlControl

- IF -(bind ?num 100)(if (> ?num 95)then

(printout t"A+" crlf)else(printout t"A+이 아닙니다." crlf)

)

- member$ -(bind ?com-list (create$ 모니터 본체 스피커))

(if (member$ 본체 ?com-list)then (printout t"본체가 있습니다." crlf) else (printout t"본체가 없습니다." crlf) )

=> PHP의 in_array() 함수와 동일한 역할

Page 15: Jess

함수함수(Function)(Function)

- 큰수를 구하는 함수 -(deffunction test_fct(?x ?y) (if(> ?x ?y)then (return ?x) else (return ?y) ))(printout t"MAX : " (test_fct 100 200) crlf)

=> deffunction : 함수 선언

return이 생략되도 ?x 값이나 ?y값을 리턴할수 있다.(if(> ?x ?y)then ?x else ?y)

Page 16: Jess

MultifeldMultifeld변수 를 사용한 함수 예제변수 를 사용한 함수 예제

(deffunction show-list(?data1 ?data2 $?datas) (bind ?list-num 0) (bind ?com-list(create$ ?data1 ?data2 ?datas)) (foreach ?com-data ?com-list (printout t " "(++ ?list-num) ":" ?com-data) ) (printout t crlf) )

(show-list 모니터) ; 에러발생(show-list 모니터 본체)(show-list 모니터 본체 스피커)(show-list 모니터 본체 스피커 키보드 마우스)

=> 인수 앞에 ‘$’ 가 붙으면 multifield인수Multifeld인수는 여러개의 데이터를 받을수 있다.

Page 17: Jess

자바 연동자바 연동(bind ?file (new java.io.File file.txt))(bind ?fr (new java.io.FileReader ?file))(bind ?br (new java.io.BufferedReader ?fr))

(bind ?a (call ?br readLine))(bind ?b (call ?br readLine))(bind ?c (call ?br readLine))(bind ?d (call ?br readLine))

(printout t"A : " ?a crlf)(printout t"B : " ?b crlf)(printout t"C : " ?c crlf)(printout t"D : " ?d crlf)

=> Java의 모든클래스를 객체화하여 사용할수 있다=> ‘call’ 메소드를 불러들일때 사용

Page 18: Jess

사실사실(Fact)(Fact)과 규칙과 규칙(Rule)(Rule)

Page 19: Jess

사실사실(Fact)(Fact)- 단순 facts 추가 -

(assert (원숭이위치 A))(assert (원숭이손 empty))(assert (원숭이발 onFloor))(assert (상자위치 B))(assert (바나나위치 C))

=> assert 키워드를 사용해 단순 fact를 작업메모리에 추가

- facts 정의 -template 정의

(deftemplate MAIN::status (slot search-depth)

(slot parent)(multislot jugs)

(slot last-move) )

=> 이름과 슬롯들의 집합으로 이루어짐=> 하나의 사실에 하나의 템플릿이 존재

Facts 정의(deffacts MAIN::initial-positions

(status (search-depth 1) (parent root) (jugs 0 0) (last-move no-move) )

)=>fact 는 template을 기반으로 작성해야 한다.

Page 20: Jess

규칙(Rule)

- 규칙(Rule) -논리적으로 참인 정보를 if-then 형식으로 표현

IF 실험을 좋아한다. AND과학책을 많이 읽는다. AND새로운 것을 발견한다. AND상상을 많이 한다.

THEN 과학자의 소질이 있다.

Facts

새로운 Fact생성

Page 21: Jess

규칙(Rule)- 규칙 정의 -

4리터 컵에 물을 채운다(defrule MAIN::FULL-4L-JUG

?node <- (status (search-depth ?num) (jugs ?x&:(< ?x 4) ?y)) => (duplicate ?node (search-depth (+ 1 ?num)) (parent ?node) (jugs 4 ?y) (last-move FULL-4L-JUG) ) )

3리터컵에 있던 물을 4리터컵에모두 붓는다.(defrule MAIN::POUR-34-FULL

?node <- (status (search-depth ?num) (jugs ?x&:(< ?x 4) ?y&:(and(> ?y 0) (>= (+ ?y ?x) 4)))) =>

(bind ?y (- ?y (- 4 ?x))) (duplicate ?node (search-depth (+ 1 ?num)) (parent ?node) (jugs 4 ?y) (last-move POUR-34-FULL) ) )

Page 22: Jess

추론 과정추론 과정원숭이를 찾기위한 추론 과정

포유류 파충류 조류

육식동물 초식동물

4발로 걷는다 2발로 걷는다 2, 4발로 걷는다

도구사용 O 도구사용 X

손가락 5개 손가락 3개 손가락 2개

지문이 있다 지문이 없다

바나나를 좋아한다. 바나나를 싫어한다.

원숭이

Depth : 1

Depth : 2

Depth : 3

Depth : 4

Depth : 5

Depth : 6

Depth : 7

Depth : 8

3개의 Rule 활성화규칙 충돌.

Fact 생성