我有一个非常大的资源分配问题要计算。
我刚刚发现了 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]匹配一条规则,就应该将其作为输出发送,而不是再次针对其他规则进行测试。
此外,重要的是要注意一些规则会经常匹配,而过度匹配很少(非常具体的情况)。
以下是关于问题体积的一些粗略提示:
我需要在一分钟内生成禁止的分配。
据我所知,Drools肯定会产生那些被禁止的分配。 问题是:“他有多聪明”?
如果我必须自己为这个特殊问题编写一个引擎,我会做一些改进:
例如,我不会生成所有可能的分配(200.000),然后尝试在其上应用每个规则(50条规则x 200.000)。
相反,我会尝试在每条规则(规则的每一面)上单独匹配资源和活动,然后组合匹配至少一条通用规则的夫妻。
另外,我会在每个匹配时自动递增的规则上添加一些计数器,以便首先应用经常匹配的规则。
Drools的引擎是否适合这个?或者他更聪明?
你是否有一个Drools成功用于类似问题的例子?
提前感谢您的建议。
答案 0 :(得分:0)
您的计算中存在错误:
对于1000
活动和200
资源,您没有200*1000
可能的分配,但200^1000
可能的分配(因此可能超过10^2000
分配)。你确定你的优化引擎可以扩展那么多吗?
您是否考虑过使用Drools Planner进行资源分配? Drools Planner可以处理这样的分配大小,也可以更大。它搜索最佳解决方案(并且很好地扩展)并使用Drools计算它评估的每个解决方案的得分(=禁用分配数的负数)。