我有一个很大的资源分配问题要计算。
我刚刚发现了Drools,我想知道它是否适合用作预处理器并根据一些用户规则生成禁止分配列表。
问题
我有一个优化引擎,可以将一些活动分配给一些资源,同时优化一些KPI(关键绩效指标)。
优化器将应根据某些用户提供的规则生成的禁止分配列表作为输入(除其他外)。
每个禁止规则是两个规则的“与”组合:
- 一个用于活动
- 一为资源
每个子规则本身就是对某些属性的“AND”测试列表。
这是一个规则的结构,在伪代码中
规则1: *活动规则 * activity.prop1 == "foo" AND * activity.prop2 == "bar" AND * ... *资源规则 * resource.prop3 == "foobar" AND * resource.prop4 == "NULL" AND * ... 规则2: ...
一旦一对 [Activity,Resource] 匹配一个规则,它就应该作为输出发送,而不是针对其他规则再次测试。
此外,重要的是要注意某些规则会非常频繁地匹配,而 overs 将很少匹配(非常具体的情况)。
性能限制
以下是有关问题体积的一些粗略提示:
- 1000 项活动
- 200 个资源
- 50条规则
我需要在一分钟内生成禁止分配。
挑战
据我了解,Drools 肯定可以生成那些被禁止的分配。问题是:“他有多聪明”?
如果我必须自己为这个特定问题编写一个引擎,我会做一些改进:
例如,我不会生成所有可能的分配(200.000),然后尝试对其应用每个规则(50 个规则 x 200.000)。
相反,我会尝试在每条规则(规则的每一侧)上分别匹配资源和活动,然后将匹配至少一个通用规则的对组合起来。
此外,我会在每条规则上添加一些计数器,这些计数器会在每次匹配时自动递增,以便首先应用经常匹配的规则。
问题
Drools 的引擎是否足够聪明?还是他更聪明?
您是否有在类似问题中成功使用 Drools 的示例?
提前感谢您的建议。