【问题标题】:Is Drools suitable for preprocessing a Resource Allocation Problem_Drools 是否适合预处理资源分配问题_
【发布时间】: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


    【解决方案1】:

    您的计算中有一个错误: 对于1000 活动和200 资源,您没有200*1000 可能的分配但200^1000 可能的分配(所以比10^2000 可能的分配更多)。您确定您的优化引擎可以扩展这么多吗?

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

    【讨论】:

    • 优化器本身不是问题。我们有一个团队评估了几个 egnine,并提出了一个自定义解决方案,引入了一些启发式方法,这比 Drools Planner 更重要。在体积上,我说的不是解决方案的数量,而是可能的禁止“夫妇”的数量,它不那么复杂,但仍然是一个很大的组合。
    • @RaphaelJolivet 很有趣,那是哪种启发式方法?你怎么确定他们更快?
    猜你喜欢
    • 2011-10-25
    • 2014-12-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多