ルールエンジン、またはシステムを簡単にする方法

すべての人に良い一日を!



この記事では、技術的な問題には対処せず、コード例を提供しません。 この記事の目的は、ルールエンジンとは何か、このエンジンが何のためにあるのか、何ができるのかを理解することです。 システムを構築するこのようなアプローチに興味がある場合は、好みや色に合わせてルールエンジンを簡単に見つけることができます。



なぜこれが必要なのでしょうか。 非常に速いペースで生活するある種の企業を取り上げてください。 たとえば、数分ごとに着陸または離陸がある最大の空港の1つ。



質疑応答





自問してください:







2番目の質問は簡単なので、最初に答えます。 最低価格は数万ユーロですが、最高価格は数百人の命です。 そして今、最初の質問に。



だから誰? 回答:ほとんどの場合、人々。 もちろん、コンピューターの助けがなくても、人はいません。 質問は次のとおりです。 可能なオプションのリストがあり、人がそれらから選択します。 選択肢はほとんどないので、原則として特別な苦痛はありません。 そして最後の質問:何に基づいて? ルールがあり、それらを遵守し、可能であれば実装する必要があります。 たとえば、30分以上の出発遅延は非常に望ましくありません。 さて、主な質問:ルールエンジンはどこにありますか?



この質問に答えるには、別の質問に答える必要があります。つまり、次の場合、なぜ少数の選択肢しか提供されないのですか。



  1. 少なくとも3〜4時間、できれば8時間先を計画する必要があります。
  2. キューが約200機で構成されている場合(離陸/着陸)
  3. 考慮すべきルールが数十個の場合
  4. これらのルールがほぼ毎日、場合によっては1時間ごとに変更される場合
  5. 常に緊急事態がある場合
  6. その他多数...




答え:しかし、あなたが読んだのは、誰もが見たい理想的な状況の見た目だけですが、非常に単純化されているためです。 したがって、実際に注意を払うルールの数は、せいぜい数十個、場合によってはさらに少なくなります。 そして、彼らは1、2時間先を計画しています。 そのため、あらゆる種類の不快な状況があり、そのうちのいくつかは、30分ほどの出発の遅れなど、単に慢性化します。 その結果、非常に大きなお金が失われます。 飛行機は本来あるべき飛行をせず、車線に立ち、未知のものを待ちます。 乗客は神経質になり、会社の評判が悪くなり、空港で誓います。 サービスに非常に少ない金額ではなく、その適切な品質に依存する権利があります。 もちろん、誰もが空港の運営は簡単ではないことを長い間慣れており、よく知っていますが、いつものように最高のものを求めています。 その瞬間、ルールエンジンが助けになります。



これはどんな獣ですか?





オブジェクトAがあり、数値とブール値の優先度があるとします。 ルールがあります:値が5より大きい場合、オブジェクトに優先順位を与えます。 値trueで優先度に書き込みます。 したがって、オブジェクトの束があり、このルールを介してそれらを実行する場合、このルールに従ってどのオブジェクトが重要であるかを判断します。 これが最初のソート手順になります。 この段階で、オブジェクトAがオブジェクトBより重要であることを明確に判断できなかった場合は、もう1つのルールが必要です。または、オブジェクトが同等であると判断します。 ルールエンジンが行うのは、ルールの実行です。 あなたは彼女にルール、オブジェクトを与え、どのオブジェクトがルールに適合しているかを尋ねます。 多くの場合、ルールは次のようになります。



when A.value>5 then A.priority=true
      
      







そのように。 あなた自身が理解しているように、ルールはあなたが望むように/必要に応じて複雑にすることができます。



ポイントは何ですか?





そして、ポイントは、これらのルールが別のファイルに保存されるか、データベースに保存されることです。 ルールを変更する必要がある場合は、プログラムに触れる必要はありません。このルール自体を変更し、ルールが変更されたことをルールエンジンに伝えてください。 特定のルールエンジンが突然あなたを嫌う(たとえば、速度が低下する)場合、簡単に別のルールエンジンに置き換えることができます。



キャッチは何ですか?





時には些細なことではないこともある多くのポイントがあります。 たとえば、次の2つのルールがあります。



  when A.value>5 then A.value=A.value+5
      
      







そして



  when A.value<7 then A.value=A.value-3
      
      







そして、値が6のオブジェクトがあります。このオブジェクトとこれらのルールをルールエンジンに渡します。 間違った! なんで? ルールが適用される順序で言う必要があるため、 結果は実行順序に依存します。 ルールを適用する順序でルールエンジンに通知するには、ルールに優先順位を付ける必要があります。 2つのルールの優先順位が同じ場合、順序は結果に影響しません。



または、別の質問です。 ルールを処理する方法は? 少なくとも1つは実装されていますか? その後、システムを簡単に一時停止できます。 1つのルールは何かを減らし、もう1つのルールは同じものを増やします。 そして、ルールを一度だけ適用できますか? または、ルールを1回だけ確認しますか? 違いを感じますか?



ブラックジャックとde落した女性が欲しい!





そんなことがあります。 たくさんの作品でさえ、あなたはそれを好きになるでしょう。



ルールをテストできます。 はい、はい、ルールに間違った番号を書いたため、システムをダウンさせたくありませんか?



ルールはデバッグ可能です。 いいですね ここで、ルールエンジンは興味深い結果を生成します。 とても興味深い。 しかし、あなたが期待するものではありません。 どうする デバッグ、他に何! ルールにブレークポイントを設定して、実行します。



ルールにはバージョンがあります。 しかし、バージョンシステムなしではどうでしょうか。 そして、突然、テストに成功した新しい素晴らしいルールは、損失のみをもたらすことが判明しました。 以前、子供のいない女性に贈り物を送りましたが、今では興味深い性的指向の顔にヘルメットを送りますか? 修正方法 バージョンシステムに移動し、そこから古いルールを取り出し、誰がそれを変更したかを確認し、それを破棄し、ボーナスを奪い、注意深く見てください(そして、それは男のように見えますか?)



ルールの整合性/不整合を確認してください。 例:



 when A.value>5 and A.value<3 then A.priority=true
      
      







このルールが何をしていると思いますか? そうです、何もありません! 不要なため、このルールを削除します。

ルールをクリックできます。 つまり、クリックするのではなく、マウスでクリックするのが面倒です。 視覚的なルールエディターがあります。 これで、秘書のマーシャはあなたのシステムで面白いことをすることができます。 驚きの度合いは、マーシャの創造性にのみ依存します。



しかし、マネージャーFedyaはルールをクリックするのが好きではありません。彼はマネージャーであるため、ルールを記述してルールを作成したいからです。 それは可能です。 これにはDSL(ドメイン固有言語)などがあります。 現在、Fedyaは次のように記述できます。



「クライアントが学生である場合、クレジットを与えないでください。」



はい、フェディアは悪です。



さて、少なくとも1つの姓を呼び出します!





何、あなたはそのような奇跡がどのように呼ばれているのか、どこを見ているのか知りたいですか? まあ、ルールエンジンの数は非常に多いです。 私が説明したものはすべて、たとえばJBoss Droolsにあります。 Javaで書かれ、無料で、有名です。 お勧めです。



自分で使いましたか?





それから。 私は独身の仕事を書く一環として、非常に有名な空港のプロトタイプシステム(記事の冒頭で説明)を書きました。 面白かった、私は多くを学びました。 独身者の仕事を保護するために、私がそこでやったことを抽象的に言わないように(仕方がない!)、私は毎秒数回整数を生成し、それをリストに書き、このリストをソートした簡単なプログラムを書きました。 ソート結果を愚かにコンソールに出力しました。 家で、私はいくつかのルールを書いた。例えば:







等 防衛のために、これらのルールを教師に示した後、エディターで別のルールをすばやくクリックしてから、システムを起動し、数分間リストを任意の方法で並べ替えて、ルールの優先順位を変更しました(もちろん、システムを停止せずにオンザフライでルールが変更されました)。 楽しかった。



そして今、伝統により、私はあなたにこの記事の本当の目的を与えます。 この記事の後、小さな動きがありました。この記事が気に入ったら、その結果を別の記事で紹介します。



(今日)再び会えることを願っています。



All Articles