SlideShare uma empresa Scribd logo
1 de 22
Baixar para ler offline
Jess
          (Java Expert System Shell)



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

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

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

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

전제와의 논리적 관계만으로 필연적으로 결론이 도출되는 추론을 연역추론이라한다.
귀납법(Induction)
Instance로부터 Rule을 만들어 낸다.

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

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

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

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

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

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

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

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

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

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


1. Working Memory에 의하여 만족되는 최초의 규칙
2. 가장 높은 우선순위(priority)를 가진 규칙 선택
3. 현재의 작업 메모리에 만족되는 가장 특수한(specific) 규칙
  즉, 가장 세분화된 조건을 갖는 규칙.
  조건부를 구성하는 논리곱요소 (conjunct)가 가장 많은 규칙
4. 작업 메모리에 삽입된 가장 최근의 정보에 만족되는 규칙
5. 가장 새로운 규칙.
 이전에 수행되지 않았던, 혹은 수행되었더라도 다른 변수값으로 수행되었던 규칙
6. 임의의 규칙
7. 순서에 상관없이 만족되는 모든 규칙을 병행하여 수행
JESS Syntax
변수(Variable)

- 일반변수 -

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

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


- 전역변수 -

      (defglobal ?*temp* = 100)

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

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


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

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

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

Jess에서는 lisp에서와 마찬가지로 선행표기법을 쓴다.
리스트 (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 리스트를 할당 할 수있다.
     => 결과값 : 모니터 본체 스피커 키보드 마우스
Control

- 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)
            )
Control

- 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() 함수와 동일한 역할
함수(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
)
Multifeld변수 를 사용한 함수 예제
(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인수는 여러개의 데이터를 받을수 있다.
자바 연동
  (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’ 메소드를 불러들일때 사용
사실(Fact)과 규칙(Rule)
사실(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을 기반으로 작성해야 한다.
규칙(Rule)

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

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

THEN           과학자의 소질이 있다.


                       새로운 Fact생성
규칙(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)
            )
       )
추론 과정
                          원숭이를 찾기위한 추론 과정


Depth : 1        포유류              파충류              조류

Depth : 2 육식동물          초식동물


Depth : 3   4발로 걷는다 2발로 걷는다 2, 4발로 걷는다

Depth : 4     Fact 생성      손가락 5개 손가락 3개   손가락 2개


Depth : 5               지문이 있다   지문이 없다                 3개의 Rule 활성화
                                                        규칙 충돌.
Depth : 6       도구사용 O     도구사용 X


   바나나를 좋아한다.           바나나를 싫어한다.         Depth : 7


        원숭이                                Depth : 8

Mais conteúdo relacionado

Mais procurados

대전개발자컨퍼런스 하이버네이트 발표자료 최범균
대전개발자컨퍼런스 하이버네이트 발표자료 최범균대전개발자컨퍼런스 하이버네이트 발표자료 최범균
대전개발자컨퍼런스 하이버네이트 발표자료 최범균beom kyun choi
 
Lataif e ashrafi malfoozat e syed makhdoom ashraf 54
Lataif e ashrafi malfoozat e syed makhdoom ashraf 54Lataif e ashrafi malfoozat e syed makhdoom ashraf 54
Lataif e ashrafi malfoozat e syed makhdoom ashraf 54Aale Rasool Ahmad
 
241 Ch
241 Ch241 Ch
241 Chanjaan
 
Burmese bible 90)_new_testament
Burmese bible 90)_new_testamentBurmese bible 90)_new_testament
Burmese bible 90)_new_testamentWorldBibles
 
Quiz Component For Joomla
Quiz Component For JoomlaQuiz Component For Joomla
Quiz Component For Joomlaguestebb21a
 
010 younus iphone
010 younus iphone010 younus iphone
010 younus iphonemhmas
 
Domótica. Test de conocimientos
Domótica. Test de conocimientosDomótica. Test de conocimientos
Domótica. Test de conocimientosJesús Amieiro
 
Information Management Strategy from Business and IT Viewpoints
Information Management Strategy from Business and IT ViewpointsInformation Management Strategy from Business and IT Viewpoints
Information Management Strategy from Business and IT ViewpointsMarina Kerbel
 
1 التجويد
1 التجويد1 التجويد
1 التجويدwayislam
 
Penggunaan Internet dalam Pembelajaran Matematika di SD
Penggunaan Internet dalam Pembelajaran Matematika di SDPenggunaan Internet dalam Pembelajaran Matematika di SD
Penggunaan Internet dalam Pembelajaran Matematika di SDNASuprawoto Sunardjo
 
»ç¿ë¼³¸í¼­ Dwd t115_rwg
»ç¿ë¼³¸í¼­ Dwd t115_rwg»ç¿ë¼³¸í¼­ Dwd t115_rwg
»ç¿ë¼³¸í¼­ Dwd t115_rwgJPGUNS72
 
القرءان الكريم برواية قنبل عن ابن كثيرمن موقع الشبكة الإسلامية
  القرءان الكريم برواية قنبل عن ابن كثيرمن موقع الشبكة الإسلامية  القرءان الكريم برواية قنبل عن ابن كثيرمن موقع الشبكة الإسلامية
القرءان الكريم برواية قنبل عن ابن كثيرمن موقع الشبكة الإسلاميةسمير بسيوني
 

Mais procurados (17)

대전개발자컨퍼런스 하이버네이트 발표자료 최범균
대전개발자컨퍼런스 하이버네이트 발표자료 최범균대전개발자컨퍼런스 하이버네이트 발표자료 최범균
대전개발자컨퍼런스 하이버네이트 발표자료 최범균
 
Lataif e ashrafi malfoozat e syed makhdoom ashraf 54
Lataif e ashrafi malfoozat e syed makhdoom ashraf 54Lataif e ashrafi malfoozat e syed makhdoom ashraf 54
Lataif e ashrafi malfoozat e syed makhdoom ashraf 54
 
241 Ch
241 Ch241 Ch
241 Ch
 
Burmese bible 90)_new_testament
Burmese bible 90)_new_testamentBurmese bible 90)_new_testament
Burmese bible 90)_new_testament
 
Shared Preference in Android App
Shared Preference in Android AppShared Preference in Android App
Shared Preference in Android App
 
Quiz Component For Joomla
Quiz Component For JoomlaQuiz Component For Joomla
Quiz Component For Joomla
 
Wp1011 Citrix Apple V004
Wp1011 Citrix Apple V004Wp1011 Citrix Apple V004
Wp1011 Citrix Apple V004
 
010 younus iphone
010 younus iphone010 younus iphone
010 younus iphone
 
Domótica. Test de conocimientos
Domótica. Test de conocimientosDomótica. Test de conocimientos
Domótica. Test de conocimientos
 
Money works kfi
Money works kfiMoney works kfi
Money works kfi
 
Information Management Strategy from Business and IT Viewpoints
Information Management Strategy from Business and IT ViewpointsInformation Management Strategy from Business and IT Viewpoints
Information Management Strategy from Business and IT Viewpoints
 
جنات کا بادشاہ
جنات کا بادشاہجنات کا بادشاہ
جنات کا بادشاہ
 
1 التجويد
1 التجويد1 التجويد
1 التجويد
 
Bible urdu-nt
Bible urdu-ntBible urdu-nt
Bible urdu-nt
 
Penggunaan Internet dalam Pembelajaran Matematika di SD
Penggunaan Internet dalam Pembelajaran Matematika di SDPenggunaan Internet dalam Pembelajaran Matematika di SD
Penggunaan Internet dalam Pembelajaran Matematika di SD
 
»ç¿ë¼³¸í¼­ Dwd t115_rwg
»ç¿ë¼³¸í¼­ Dwd t115_rwg»ç¿ë¼³¸í¼­ Dwd t115_rwg
»ç¿ë¼³¸í¼­ Dwd t115_rwg
 
القرءان الكريم برواية قنبل عن ابن كثيرمن موقع الشبكة الإسلامية
  القرءان الكريم برواية قنبل عن ابن كثيرمن موقع الشبكة الإسلامية  القرءان الكريم برواية قنبل عن ابن كثيرمن موقع الشبكة الإسلامية
القرءان الكريم برواية قنبل عن ابن كثيرمن موقع الشبكة الإسلامية
 

Destaque

인공지능ㅋ
인공지능ㅋ인공지능ㅋ
인공지능ㅋdmsrud6178
 
온톨로지 & 규칙 추론 시스템
온톨로지 & 규칙 추론 시스템온톨로지 & 규칙 추론 시스템
온톨로지 & 규칙 추론 시스템Sang-Kyun Kim
 
Neural network의 변천사 이태영
Neural network의 변천사 이태영Neural network의 변천사 이태영
Neural network의 변천사 이태영Tae Young Lee
 
AlphaYak :: Artificially Intelligent Pharmacist Chatbot
AlphaYak :: Artificially Intelligent Pharmacist ChatbotAlphaYak :: Artificially Intelligent Pharmacist Chatbot
AlphaYak :: Artificially Intelligent Pharmacist Chatbotnadohyun
 
2016 software engineering workshop 알려주지 않았지만 알아야 하는 사실들
2016 software engineering workshop 알려주지 않았지만 알아야 하는 사실들2016 software engineering workshop 알려주지 않았지만 알아야 하는 사실들
2016 software engineering workshop 알려주지 않았지만 알아야 하는 사실들Junsu Kim
 
코노랩스(최재훈 CTO)_AI Startup D.PARTY_20161020
코노랩스(최재훈 CTO)_AI Startup D.PARTY_20161020코노랩스(최재훈 CTO)_AI Startup D.PARTY_20161020
코노랩스(최재훈 CTO)_AI Startup D.PARTY_20161020D.CAMP
 
[222]대화 시스템 서비스 동향 및 개발 방법
[222]대화 시스템 서비스 동향 및 개발 방법[222]대화 시스템 서비스 동향 및 개발 방법
[222]대화 시스템 서비스 동향 및 개발 방법NAVER D2
 
2016 kcd 세미나 발표자료. 구글포토로 바라본 인공지능과 머신러닝
2016 kcd 세미나 발표자료. 구글포토로 바라본 인공지능과 머신러닝2016 kcd 세미나 발표자료. 구글포토로 바라본 인공지능과 머신러닝
2016 kcd 세미나 발표자료. 구글포토로 바라본 인공지능과 머신러닝JungGeun Lee
 
Python 으로 Slackbot 개발하기
Python 으로 Slackbot 개발하기Python 으로 Slackbot 개발하기
Python 으로 Slackbot 개발하기성일 한
 
챗봇 개발을 위한 네이버 랩스 api
챗봇 개발을 위한 네이버 랩스 api챗봇 개발을 위한 네이버 랩스 api
챗봇 개발을 위한 네이버 랩스 apiNAVER D2
 
챗봇 시작해보기
챗봇 시작해보기챗봇 시작해보기
챗봇 시작해보기성일 한
 
마인즈랩 회사소개서 V2.3_한국어버전
마인즈랩 회사소개서 V2.3_한국어버전마인즈랩 회사소개서 V2.3_한국어버전
마인즈랩 회사소개서 V2.3_한국어버전Taejoon Yoo
 
Visualization of evolutionary cascades of messages using force-directed graphs
Visualization of evolutionary cascades of messages using force-directed graphsVisualization of evolutionary cascades of messages using force-directed graphs
Visualization of evolutionary cascades of messages using force-directed graphsАртём Курапов
 
Obergine web design and digital marketing credentials
Obergine web design and digital marketing credentialsObergine web design and digital marketing credentials
Obergine web design and digital marketing credentialsObergine
 
EcmaScript 5.1
EcmaScript 5.1EcmaScript 5.1
EcmaScript 5.1iliakan
 

Destaque (20)

Aiml
Aiml Aiml
Aiml
 
인공지능ㅋ
인공지능ㅋ인공지능ㅋ
인공지능ㅋ
 
온톨로지 & 규칙 추론 시스템
온톨로지 & 규칙 추론 시스템온톨로지 & 규칙 추론 시스템
온톨로지 & 규칙 추론 시스템
 
Neural network의 변천사 이태영
Neural network의 변천사 이태영Neural network의 변천사 이태영
Neural network의 변천사 이태영
 
AlphaYak :: Artificially Intelligent Pharmacist Chatbot
AlphaYak :: Artificially Intelligent Pharmacist ChatbotAlphaYak :: Artificially Intelligent Pharmacist Chatbot
AlphaYak :: Artificially Intelligent Pharmacist Chatbot
 
2016 software engineering workshop 알려주지 않았지만 알아야 하는 사실들
2016 software engineering workshop 알려주지 않았지만 알아야 하는 사실들2016 software engineering workshop 알려주지 않았지만 알아야 하는 사실들
2016 software engineering workshop 알려주지 않았지만 알아야 하는 사실들
 
코노랩스(최재훈 CTO)_AI Startup D.PARTY_20161020
코노랩스(최재훈 CTO)_AI Startup D.PARTY_20161020코노랩스(최재훈 CTO)_AI Startup D.PARTY_20161020
코노랩스(최재훈 CTO)_AI Startup D.PARTY_20161020
 
[222]대화 시스템 서비스 동향 및 개발 방법
[222]대화 시스템 서비스 동향 및 개발 방법[222]대화 시스템 서비스 동향 및 개발 방법
[222]대화 시스템 서비스 동향 및 개발 방법
 
2016 kcd 세미나 발표자료. 구글포토로 바라본 인공지능과 머신러닝
2016 kcd 세미나 발표자료. 구글포토로 바라본 인공지능과 머신러닝2016 kcd 세미나 발표자료. 구글포토로 바라본 인공지능과 머신러닝
2016 kcd 세미나 발표자료. 구글포토로 바라본 인공지능과 머신러닝
 
Python 으로 Slackbot 개발하기
Python 으로 Slackbot 개발하기Python 으로 Slackbot 개발하기
Python 으로 Slackbot 개발하기
 
챗봇 개발을 위한 네이버 랩스 api
챗봇 개발을 위한 네이버 랩스 api챗봇 개발을 위한 네이버 랩스 api
챗봇 개발을 위한 네이버 랩스 api
 
챗봇 시작해보기
챗봇 시작해보기챗봇 시작해보기
챗봇 시작해보기
 
마인즈랩 회사소개서 V2.3_한국어버전
마인즈랩 회사소개서 V2.3_한국어버전마인즈랩 회사소개서 V2.3_한국어버전
마인즈랩 회사소개서 V2.3_한국어버전
 
Visualization of evolutionary cascades of messages using force-directed graphs
Visualization of evolutionary cascades of messages using force-directed graphsVisualization of evolutionary cascades of messages using force-directed graphs
Visualization of evolutionary cascades of messages using force-directed graphs
 
Es51
Es51Es51
Es51
 
Reportes de-evaluacion-2014-2015
Reportes de-evaluacion-2014-2015Reportes de-evaluacion-2014-2015
Reportes de-evaluacion-2014-2015
 
Obergine web design and digital marketing credentials
Obergine web design and digital marketing credentialsObergine web design and digital marketing credentials
Obergine web design and digital marketing credentials
 
Speed Balls
Speed BallsSpeed Balls
Speed Balls
 
Ensamble coral como momento de arendizaje
Ensamble coral como momento de arendizajeEnsamble coral como momento de arendizaje
Ensamble coral como momento de arendizaje
 
EcmaScript 5.1
EcmaScript 5.1EcmaScript 5.1
EcmaScript 5.1
 

Jess

  • 1. Jess (Java Expert System Shell) 전문가 시스템(Expert System)을 구축하기 위한 Shell이다.
  • 2. 전문가 시스템 전문가시스템 (expert system) 은 전문가가 가지고 있는 지식을 인위적으로 컴퓨터에게 부여하여 그 방면에 비전문가라 할지라도 그러한 전문가의 지식을 이용하여 상호 대화를 통하여 원하는 결과를 얻는 일종의 자문형 컴퓨터 시스템이다
  • 3. 연역법 (Deduction) Deduction (연역법) : A → B 즉 A를 알면 B를 안다. 1) 모든 포유동물은 심장을 가지고 있다. 2) 모든 말은 포유동물이다. ∴ 모든 말은 심장을 가지고 있다. 전제와의 논리적 관계만으로 필연적으로 결론이 도출되는 추론을 연역추론이라한다.
  • 4. 귀납법(Induction) Instance로부터 Rule을 만들어 낸다. * 이 백조는 흰색이다 ........ 모든 백조는 흰색이다. * 당구볼은 큐로 쳤을때 움직인다 ........... 모든 행동에 대해, 동등한 반작용이 있다. 증명으로부터 가설을 유도해낸다. 즉 결론은 얻어진 사실로부터 추론된다. 은행나무는 낙엽이 진다. 단풍나무는 낙엽이 진다. ⇒ 모든 나무는 낙엽이 진다 : False 결과는 False일 수 있다. : Instance가 모든 Case를 전부 보여줄 수는 없기 때문이다. 유도된 결론은 정확하지 않을수 있고 또한 새로운 사실이 알려질 경우 변할수 있다.
  • 5. Rule-base Expert System 사실(Facts) 관계를 간단한 이름으로 표현 사실은 여러개일수 있고 규칙에 따라 만들어지고 삭제되어 진다. 규칙(Rules) 다른사실로부터 하나의 또다른 사실을 추론할수 있게함
  • 6. 추론엔진 수행과정 1. 패턴매칭 (Pattern Matching) : 새로운 사실 (fact) 가 입력된 작업기억 (working memory) 에서 규칙 (rule) 이 있는 production memory 간의 패턴 매칭하여 매칭되는 rule 들을 찾아낸다. 2. 충돌해결 (Conflict Resolution) : 복수개의 rule 이 해당될 때 최적의 rule 을 선택한다. 3. 실행 (Execution) : 선택된 rule 을 실행하고 새로이 얻은 fact 를 모두 작업기억에 저장하여 다시 패턴매칭을 시작한다.
  • 7. 충돌 해결 (conflict resolution) 각 주기에서 수행 가능한 규칙이 하나 이상인 경우 해결 정책 1. Working Memory에 의하여 만족되는 최초의 규칙 2. 가장 높은 우선순위(priority)를 가진 규칙 선택 3. 현재의 작업 메모리에 만족되는 가장 특수한(specific) 규칙 즉, 가장 세분화된 조건을 갖는 규칙. 조건부를 구성하는 논리곱요소 (conjunct)가 가장 많은 규칙 4. 작업 메모리에 삽입된 가장 최근의 정보에 만족되는 규칙 5. 가장 새로운 규칙. 이전에 수행되지 않았던, 혹은 수행되었더라도 다른 변수값으로 수행되었던 규칙 6. 임의의 규칙 7. 순서에 상관없이 만족되는 모든 규칙을 병행하여 수행
  • 9. 변수(Variable) - 일반변수 - (bind ?age 25) (O) (bind ?age = 25) (X) (bind ?name "kyoe") (O) => 모든 변수는 ‘?’로 선언 => Bind 키워드를 사용해 데이터를 할당한다. - 전역변수 - (defglobal ?*temp* = 100) => 변수 선언시 '?* *' 이런형식으로 선언하며 데이터할당시 '='을 사용한다. => 전역변수는 reset 명령어를 사용해도 초기화 되지 않는다. => 프로그램이 종료될때 소멸
  • 10. 데이터 출력 (printout t"결과값2 : " ?age crlf) (printout t"결과값5 : " ?*imsi* crlf) printout 을 사용해서 변수에 할당된 데이터를 콘솔창에 출력 한다. 't' → 콘솔창에 출력 ‘crlf’ → 한줄 개행
  • 11. 연산 JESS : (bind ?x(+(+ 2 2)(* 3 3))) C언어 : x = (2+2) + (3*3) Jess에서는 lisp에서와 마찬가지로 선행표기법을 쓴다.
  • 12. 리스트 (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 리스트를 할당 할 수있다. => 결과값 : 모니터 본체 스피커 키보드 마우스
  • 13. Control - 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) )
  • 14. Control - 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() 함수와 동일한 역할
  • 15. 함수(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 )
  • 16. Multifeld변수 를 사용한 함수 예제 (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인수는 여러개의 데이터를 받을수 있다.
  • 17. 자바 연동 (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’ 메소드를 불러들일때 사용
  • 19. 사실(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을 기반으로 작성해야 한다.
  • 20. 규칙(Rule) - 규칙(Rule) - 논리적으로 참인 정보를 if-then 형식으로 표현 IF 실험을 좋아한다. AND 과학책을 많이 읽는다. AND 새로운 것을 발견한다. AND Facts 상상을 많이 한다. THEN 과학자의 소질이 있다. 새로운 Fact생성
  • 21. 규칙(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) ) )
  • 22. 추론 과정 원숭이를 찾기위한 추론 과정 Depth : 1 포유류 파충류 조류 Depth : 2 육식동물 초식동물 Depth : 3 4발로 걷는다 2발로 걷는다 2, 4발로 걷는다 Depth : 4 Fact 생성 손가락 5개 손가락 3개 손가락 2개 Depth : 5 지문이 있다 지문이 없다 3개의 Rule 활성화 규칙 충돌. Depth : 6 도구사용 O 도구사용 X 바나나를 좋아한다. 바나나를 싫어한다. Depth : 7 원숭이 Depth : 8