tokobayashiの日記 このページをアンテナに追加 RSSフィード

2014-04-14 firefox このエントリーを含むブックマーク

  • safe mode

- firefox -safe-mode

トラックバック - http://d.hatena.ne.jp/tokobayashi/20140414

2014-04-03 svn備忘録 このエントリーを含むブックマーク

トラックバック - http://d.hatena.ne.jp/tokobayashi/20140403

2014-04-02 Drools 6 Documentation ナナメ読みその4

[]Drools 6 Documentation ナナメ読みその4 Drools 6 Documentation ナナメ読みその4を含むブックマーク

http://docs.jboss.org/drools/release/6.0.1.Final/drools-docs/html_single/index.html#d0e3387

6. User Guide

ランタイムでの基本的な動作の説明をするよ。

6.1. The Basics
6.1.1. Stateless Knowledge Session

データ渡して一発実行には Stateless Knowledge Session を使います

シンプルユースケースから、説明していきます

複数insertの一発実行も、もちろんできます

KieCommands kieCommands = kieServices.getCommands();
List<Command> cmds = new ArrayList<Command>();
cmds.add( kieCommands.newInsert( new Person( "Mr John Smith" ), "mrSmith", true, null ) );
cmds.add( kieCommands.newInsert( new Person( "Mr John Doe" ), "mrDoe", true, null ) );
BatchExecutionResults results = ksession.execute( kieCommands.newBatchExecution( cmds ) );
assertEquals( new Person( "Mr John Smith" ), results.getValue( "mrSmith" ) );
6.1.2. Stateful Knowledge Session

継続的に使う場合は Stateful Knowledge Session。使い終わったら、 KieSession.dispose() を呼ばないとメモリリークするよ!

もうちょっと複雑な、RHSで insert/update が起こるユースケースの説明。

6.1.3. Methods versus Rules

メソッドルールはどう違うの?」っていう疑問のあるひとはここ読む。

6.1.4. Cross Products

SQLでJOINするときと同じですね。ちゃんとフィールド制約を入れないと、大量の組み合わせがマッチし、パフォーマンスにも影響するので注意。

6.2. Execution Control
6.2.1. Agenda

Agenda は実行可能と評価されたルール管理ます

6.2.2. Rule Matches and Conflict Sets.

fireAllRules()が実行されたとき、Agenda上のルールはどういう順番で実行されるのかな?キャッシュフローのサンプルで説明。

salience で普通に番付け。 agenda-group でグループ化して順番付け(スタック)。ruleflow-group で、フローに沿って順番付け。

6.3. Inference

Inference (推論)。RHSで insert/update/delete を行い、ルールの再評価を行うこと。複雑になるうえ、実際のビジネスユースケースでは使うことが少ないって言っちゃってますね。はい、まあこれが使いこなせれば上級者ってことで。

6.3.1. Bus Pass Example
6.4. Truth Maintenance with Logical Objects

insertLogical です。あるルール A の LHS が true となり、その結果、RHSで fact が logically insert されるとします。その後、もうそルール A の LHS の条件が true にならなくなったとき自動的にその fact は retract されます意味からないって? 6.4.1.1. Bus Pass Example With Inference and TMS の例がおすすめです。insert と insertLogical を適切に使い分けられれば達人です。たぶん。

6.4.1. Overview
6.5. Decision Tables in Spreadsheets

よく使われていますExcel万歳

6.5.1. When to Use Decision Tables
6.5.2. Overview
6.5.3. How Decision Tables Work

要するに DRL を生成するテンプレートということ。1行が1ルールになります

6.5.4. Spreadsheet Syntax

キーワードが元のDRLのキーワードと違ったりするんだよなー(salience が PRIORITYとか)。誰だよ決めたの。

6.5.5. Creating and integrating Spreadsheet based Decision Tables
6.5.6. Managing Business Rules in Decision Tables
6.5.7. Rule Templates

Decision Table とは別にルールテンプレートという機能もある。テンプレートから DRL を生成する。むしろ Decision Table が ルールテンプレート の1バリエーション。でも、まあただのテキスト処理だし、何使ってもいいんじゃね?

6.6. Logging

これは普通の、Drools自体ログのはなし。SLF4Jです。

トラックバック - http://d.hatena.ne.jp/tokobayashi/20140402

2014-03-31 サッカー批評 67号 お金がなくても強いチーム、お金があっても弱いチ

[] サッカー批評 67号 お金がなくても強いチーム、お金があっても弱いチーム。  サッカー批評 67号 お金がなくても強いチーム、お金があっても弱いチーム。を含むブックマーク

http://www.futabasha.co.jp/booksdb/book/listview/51000.html

私は代表戦テレビで熱心に観るが、スタジアムJリーグを観に行くほどではない程度のサッカーファンでした。が、子供ができてから既に6回くらいは観に行ってますマリノス横浜FC。なんだかんだで割引や無料券が手に入ったりするのですが、正規の値段が見合うほどのエンターテイメントか、というと微妙かもしれない(親子で楽しむイベントとしては十分だけど)。J1の試合が間近で、つまり陸上トラック抜きで観れたらいいなあ。

息子はワールドサッカーダイジェストとかの選手データベースみたいなのが大好きですが、メジャー雑誌の中では「サッカー批評」が一番読み応えがある感じでしょうかね。興味深かった話としては

さあー、そろそろ代表戦チケットが取れるか頑張ってみようかー。あ、でもW杯直前は取れる気がしないな…

トラックバック - http://d.hatena.ne.jp/tokobayashi/20140331

2014-03-24 Drools 6 Documentation ナナメ読みその3

[]Drools 6 Documentation ナナメ読みその3 Drools 6 Documentation ナナメ読みその3を含むブックマーク

http://docs.jboss.org/drools/release/6.0.1.Final/drools-docs/html_single/index.html#d0e2752

III. Drools Runtime and Language

5. Hybrid Reasoning

5.1. Artificial Intelligence

AIの栄枯盛衰を語るでー

5.1.1. A Little History

1990年頃にAIは失墜したけど、2005年に "Spring comes to AI winter" が提唱される。実践的、商業的な領域でイケるレベル、状況に達した。

5.1.2. Knowledge Representation and Reasoning

これ "must read for anyone wanting to build strong foundations" だそうです。"Knowledge Representation and Reasoning" http://www.amazon.co.jp/gp/product/1558609326/

5.1.3. Rule Engines and Production Rule Systems (PRS)

Ontology = the representation model we use for our "things" (情報科学でのオントロジーは「概念体系」という訳が一般的なんですかね)

Rete の発音は REH-te or RAY-tay

when/then の2部構造ルールを Production Rule と呼ぶ

Drools5 -> ReteOO, Drools6 -> PHREAK

5.1.4. Hybrid Reasoning Systems (HRS)

forward chaining と backward chaining の比較。図が分かりやすい。

5.1.5. Expert Systems
5.1.6. Recommended Reading

これ "a must have, for anyone's bookshelf" だそうです。"Artificial Intelligence: A Modern Approach " http://www.amazon.co.jp/dp/0130803022/

5.2. Rete Algorithm

rete はラテン語で "net" or "network".

discrimination network ... データネットワークを通ってフィルタされていく

Droolsでは複数のルールノードシェアすることができる。結果的に、ひとつの複雑なネットワークが出来上がる。

5.3. ReteOO Algorithm

ReteOOはReteの拡張。以下のfeature

  • Node sharing
  • Alpha indexing
  • Beta indexing
    • ここまで、上記で説明済み
  • Tree based graphs
    • tree graph により、asymmetrical propagationを実現。 faster and less impact on the GC, and more robust
  • Modify-in-place
    • delete + insert を避ける
  • Property reactive
    • factのpropertyが変更された際の再評価のreactをfine grained にする。
  • Sub-networks
  • Backward Chaining
  • Lazy Truth Maintenance
  • Heap based agenda
    • Agenda は binary heap queue を使う
  • Dynamic Rules
5.4. PHREAK Algorithm

Drools 6 で導入。ReteOOの拡張だけど、すごく変わったのでもはや別の名前なんだ。

  • Three layers of contextual memory; Node, Segment and Rule memories.
  • Rule, segment and node based linking.
  • Lazy (delayed) rule evaluation.
  • Isolated rule evaluation.
  • Set oriented propagations.
  • Stack based evaluations, with pause and resume.

[理解が間違っていたらスマヌ。後日もっとちゃんと勉強します]

以下、複数ルールからどのようにセグメントが構成され、ビットマスクが使われるかを図とともに解説。

  • PHREAK はひとつルールの処理速度では RETE と変わらないだろう
  • しかし、非効率ルールに対して、PHREAK は RETE より、寛大だろう(ひどく性能が劣化したりしないだろう)
  • 大量、複雑なルールに対して、PHREAK は RETE より、性能の低下が緩やかになる
  • つまり、速くなるというよりは遅くなりにくい、ということ
  • PHREAK では AgendaGroup と salience が性能向上に有効になる。これらにより、不要ルール評価が減らせる。
トラックバック - http://d.hatena.ne.jp/tokobayashi/20140324