Knowledge Base Archive
この記事は Chinoba Knowledge Base の技術アーカイブです。
Chinoba.orgを見る →
前回に引き続き、Clojureでのexpert systemであるClara Ruleを用いた実装について述べる。2017年にiku00088さんが書いた「clara-rulesの世界」のコードを参考に一部動かない所を修正したコードを掲載する。まず一番シンプルな動作コードは以下となる。
(defrecord Num [number])
(defrule is-two
[Num (= number 2)] => (println "Two!"))
(-> (mk-session)
(insert (->Num 2))
(fire-rules))
;;-> "Two!"
もう少し具体的なユースシーン(ある商品(Item)を所持金(MyMoney)で変えるかどうかを判定。商品の最終的な値段は割引率と税金で決まる(rule))でのサンプルコードを以下に示す。
(def discounted-items #{:fish :pants})
(def tax-rates {:food 0.1 :cloth 0.2 :alcohol 0.3})
(defrecord MyMoney [amt])
(defrecord Tax [category rate])
(defrecord Item [id price category])
(defrecord DiscountedItem [discounted-price category])
(defrecord TaxedItem [final-price])
(defrule DiscountItem
[Item (= ?id id) (= ?category category) (= ?price price)]
=>
(println "Item is" ?id)
(println "Original Price is" ?price)
(println "Discounted item?" (some? (discounted-items ?id)))
(insert! (->DiscountedItem (* ?price 0.9) ?category)))
(defrule TaxItem
[DiscountedItem (= ?category category) (= ?discounted-price discounted-price)]
=>
(println "Tax rate is " (?category tax-rates))
(insert! (->TaxedItem (+ ?discounted-price (* ?discounted-price (?category tax-rates))))))
(defrule EnoughMoney
[MyMoney (= ?amt amt)]
[TaxedItem (= ?final-price final-price) (> ?amt final-price)]
=>
(println "Final price:" ?final-price)
(println "You have enough money!"))
(defrule NotEnoughMoney
[MyMoney (= ?amt amt)]
[TaxedItem (= ?final-price final-price) (not (> ?amt final-price))]
=>
(println "Final price:" ?final-price)
(println "You do not have enough money!"))
(-> (mk-session)
(insert (->MyMoney 199) (->Item :fish 200 :food))
(fire-rules))
;;Item is :fish
;;Original Price is 200
;;Discounted item? true
;;Discounted Price 180.0
;;Tax rate is 0.1
;;Final price: 198.0
;;You have enough money!
次回は更にフレキシブルなアプローチである。自然文からのルールの自動生成のケースについて述べる。
Chinoba
Intelligence as Relationship
Research Platform
founded by
Masao Watanabe
AI Systems Architecture
Decision Trace
Human–AI Coordination
Algorithmic Governance
Related Research
この記事は Chinoba Knowledge Base の一部です。

コメント
[…] 前回に続いて、Clojureでのexpert systemであるclara-ruluesについて。Claraでは、defqueryとquery関数を用いて外部への推論結果の外部への出力を行う。以下にサンプルを示す […]
[…] Clara Rulesの詳細のシンプルな実装にと応用的な実装に関しては後日述べる。 […]
[…] Clara Ruleによるエキスパートシステム(1) 基本的な使い方 […]
[…] Clara Rulesによるエキスパートシステム(1) 基本的な活用 […]
[…] Clara Ruleによるエキスパートシステム(1) 基本的な使い方 […]