【发布时间】:2012-12-06 22:44:05
【问题描述】:
我有一个相当大的资源分配问题要计算。
我刚刚发现了 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 解决类似问题的例子?
提前感谢您的建议。
【问题讨论】:
标签: java optimization drools