計算するリソース割り当ての問題が非常に大きくなっています。
Droolsを発見したばかりですが、プリプロセッサとして機能し、いくつかのユーザールールに基づいて、禁止されている割り当てのリストを生成するのに適しているかどうかを知りたいと思います。
問題
いくつかのKPI(主要業績評価指標)を最適化しながら、いくつかのアクティビティをいくつかのリソースに割り当てることができる最適化エンジンがあります。
オプティマイザーは、(とりわけ)ユーザー提供のルールに基づいて生成する必要のある禁止された割り当てのリストを入力として受け取ります。
各禁止ルールは、2つのルールの「AND」構成です。
- 活動のための1つ
- リソース用に1つ
各サブルールは、それ自体がいくつかの属性に対する「AND」テストのリストです。
これが擬似コードの1つのルールの構造です
Rule1: * ActivityRule * activity.prop1 == "foo" AND * activity.prop2 == "bar" AND *..。 * ResourceRule * resource.prop3 == "foobar" AND * resource.prop4 == "NULL" AND *..。 ルール2: ..。
[Activity、Resource]のペアが1つのルールに一致するとすぐに、出力として送信され、他のルールに対して再度テストされないようにする必要があります。
また、これは、一部のルールが非常に頻繁に一致する一方で、オーバーが非常にまれに一致することに注意することが重要です(非常に特殊なケース)。
パフォーマンスの制約
問題のボリュームについてのいくつかの大まかなヒントがあります:
- 1000の活動
- 200のリソース
- 50のルール
禁止されている割り当てを1分以内に生成する必要があります。
チャレンジ
私が理解している限り、Droolsはこれらの禁止された割り当てを確実に生成できます。質問は:「彼はどれほど頭がいいか」?
この特定の問題のために自分でエンジンを作成する必要がある場合は、いくつかの改善を行います。
たとえば、可能なすべての割り当て(200.000)を生成してから、各ルール(50ルールx 200.000)を適用しようとはしません。
代わりに、各ルール(ルールの両側)でリソースとアクティビティを個別に一致させてから、少なくとも1つの共通ルールに一致するカップルを組み立てます。
また、頻繁に一致するルールを最初に適用するために、各ルールにカウンターを追加して、一致するたびに自動的にインクリメントします。
質問
Droolsのエンジンはそのために十分スマートですか?それとも彼はさらに賢いですか?
Droolsが同様の問題で成功して使用されている例はありますか?
よろしくお願いします。