Drools是否适合预处理资源分配问题_

时间:2012-12-06 22:44:06

标签: java optimization drools

我有一个非常大的资源分配问题要计算。

我刚刚发现了 Drools ,我想知道它是不是一个好人选 作为预处理器工作,并根据一些用户规则生成禁止分配列表。

问题

我有一个优化引擎,可以分配某些活动到某些资源,同时优化一些 KPI (关键绩效指标)。

优化器将输入(以及其他)的禁用分配列表作为输入,这些分配应根据用户提供的一些规则生成。

每个禁止规则是两个规则的“AND”组合:

  • 一项活动
  • 一个资源

每个子规则本身都是一些属性的“AND”测试列表。

这是Pseudo-Code

中一条规则的结构
Rule1:
    * ActivityRule
      * activity.prop1 == "foo" AND
      * activity.prop2 == "bar" AND
      * ... 
    * ResourceRule
      * resource.prop3 == "foobar" AND
      * resource.prop4 == "NULL" AND
      * ...

Rule2:
   ...

只要一对[Activity,Resource]匹配一条规则,就应该将其作为输出发送,而不是再次针对其他规则进行测试。

此外,重要的是要注意一些规则会经常匹配,而过度匹配很少(非常具体的情况)。

性能约束

以下是关于问题体积的一些粗略提示:

  • 1000活动
  • 200资源
  • 50条规则

我需要在一分钟内生成禁止的分配。

挑战

据我所知,Drools肯定会产生那些被禁止的分配。 问题是:“他有多聪明”?

如果我必须自己为这个特殊问题编写一个引擎,我会做一些改进:

例如,我不会生成所有可能的分配(200.000),然后尝试在其上应用每个规则(50条规则x 200.000)。

相反,我会尝试在每条规则(规则的每一面)上单独匹配资源和活动,然后组合匹配至少一条通用规则的夫妻。

另外,我会在每个匹配时自动递增的规则上添加一些计数器,以便首先应用经常匹配的规则。

问题

Drools的引擎是否适合这个?或者他更聪明?

你是否有一个Drools成功用于类似问题的例子?

提前感谢您的建议。

1 个答案:

答案 0 :(得分:0)

您的计算中存在错误: 对于1000活动和200资源,您没有200*1000可能的分配,但200^1000可能的分配(因此可能超过10^2000分配)。你确定你的优化引擎可以扩展那么多吗?

您是否考虑过使用Drools Planner进行资源分配? Drools Planner可以处理这样的分配大小,也可以更大。它搜索最佳解决方案(并且很好地扩展)并使用Drools计算它评估的每个解决方案的得分(=禁用分配数的负数)。

相关问题