こんにちは。Red HatにてMiddlewareを中心にソリューションアーキテクトをやっている梅野です。
赤帽エンジニア Advent Calendar 2019 - Qiitaの14日目の投稿です。
昨日のルール駆動開発
に引き続き、ルールエンジンの話題を。
量子コンピュータって?
皆さんは量子コンピュータという言葉は一度はお聞きになっているかと思います。今までのコンピュータと何が違うのかというと、今までのは「チューリングマシン」と呼ばれる原理に基づき「フォイ・ノイマン型アーキテクチャ」で作られており、データを0か1かで表現していました。 それが量子コンピュータでは「非ノイマン型」として、量子力学的な考え方で「重ね合わせ」の原理で動作します。データも0か1だけではなく、複数の状態を表すことができ、それは並列性を実現できるコンピュータになります。「ノイマン型」とは、実行すべき命令が記憶媒体の中で順番に並んでおりBusを通じて一つ一つ取り出されて実行される、いわゆるシーケンシャルな動きを指しますが、「非ノイマン型」とは、必要なデータが揃っていれば実行できる命令を決定するという動作のことを指します。
という難しいことはさておき、量子コンピュータは一般的には、今までの計算量と桁違いのスピードが出るから早いんだ と思われている節がありますが、それは結果的な話であり、解へのアプローチが異なることは理解しておく必要があります。
この量子コンピュータも、2つのタイプがあります。一つは量子回路型(ゲート型)、もう一つは量子アニーリング型というものです。 量子回路型では、データの探索、パターンマッチング、シミュレーション等に利用が見込まれます。量子アニーリング型は組合せ最適化処理に利用が見込まれます。
そう。実はレッドハットのルールエンジン、Red Hat Decision Managerは、この2つができるのです!(むしろ、この2つのみできる...)
ルールエンジンって?
ルールエンジンの本質はパターンマッチング技術を使っていることです。ルールエンジンと聞くと、エクセルのようなスプレットシートのテーブル形式でルールが書けるという事ばかりが先行していますが、それは仮の姿で、パターンマッチングが本来の使い方になります。RETEアルゴリズムをベースとしているので、「データがルールを検索して実行し、しかも再帰的に評価と実行を行う」という、「非ノイマン型」な動作を行います。(そう聞くとちょっと難しそうですが、慣れたら簡単!もう元に戻れません!)
また、Red Hat Decision Managerが持つ一つの機能、Business Optimizer は、パターンマッチング技術のルールエンジンと、シミュレーテッド・アニーリング(Simulated Annealing) 等のOperations Reserchから生まれた探索アルゴリズムが複数搭載されており、組合せ最適化問題に使われています。国内でも、ルートの最適化(Vihecle Routing Problem)やシフト計画等の事例がどんどん出始めています。 今のコンピュータは量子力学に基づいていないので、「シミュレーション」したアニーリングというわけですが、これが「リアル」なアニーリングが実現できる量子コンピュータになると、爆速で最適解が見つかると思われます。
パターンマッチング技術は、データキャッシュや判断ツリーの最適化が行われているので、従来のIf-Then のロジックに比べるとより大量のデータに対して高速に動作することが可能です。国内の事例では、2100万件のデータとのマッチングで2ms以下で答えを返すなんてこともやっています。(すげぇな...) 組合せ最適化では、「その組み合わせが制約に合致しているのかどうか」を判断し、組み合わせをちょっと変えて試して... の繰り返しを超高速で行います。つまり、判断のところが遅いと使い物にならないのです。その意味でもルールエンジンによる高速判断は重要になります。
触ってみよう!
なんと、レッドハットでは、従来有償サービスにてのみ提供していたRed Hat Decision Manager の日本語ハンズオン教材を、無料で公開いたしました! http://redhat.lookbookhq.com/rhdm_handson2019
概要説明編 だけではなく、応用編・実践編 も合わせて公開しています!(なんという太っ腹...) 量子コンピュータは凄いですが、もうその技術に触れることが出来るならば素敵じゃないですか?!技術者魂をくすぐられませんか?!
残念ながらこの資料の中身についてのお問合せは有償になってしまいますが、まずはルールエンジンでパターンマッチング技術を試してみてはいかがでしょうか。
さらに、組合せ最適化については、コミュニティー版ですが https://www.optaplanner.org/
よりダウンロードしてサンプルを動作させることが可能です。 JDKがすでにインストールされていれば、ダウンロードしてzipを解凍してrun.sh(run.bat) を動かすだけです。
ぜひお試しください。 うめの