optaplanner事实可以是数组吗?

时间:2014-08-05 13:00:59

标签: drools optaplanner

我希望加载大量事实,点之间有300万个距离,我想知道是否可以使用可搜索的数据结构(如数组)提供optaplanner事实。我的感觉是使用List来保存那么多值会产生很长的搜索时间。我正在使用Drools得分。

1 个答案:

答案 0 :(得分:0)

是的,问题事实可以是数组。问题事实也可以包含数组字段。要在Drools分数计算中使用它们,您需要将getProblemFacts()方法作为Collection返回,但只需将它们包裹在ArrayList中,您就不会遭受任何明显的性能减缓那里:它在初始化时有一次点击,一旦它们在Drools workingMemory中,就会忘记getProblemFacts()Collection。

请注意ArrayList(实现接口List,后者实现Collection)具有与数组相同的内存和性能可伸缩性特征。我的意思是它确实有一些开销,但不会影响开销。 另请注意,如果您对所需的大小有任何估计,强烈建议在无参数构造函数上使用new ArrayList(int initialCapacity)

规划实体当前需要是一个集合,因为@PlanningEntityCollectionProperty目前仅支持返回类型Collection。随意制作一个我们也应该支持数组的jira - 或者甚至贡献一个实现它的github PR:)

规划值范围当前需要为List或数字范围。你可以随意制作一个jira或PR,我们也应该在那里支持一个数组,这只是将ListValueRange复制粘贴到ArrayValueRange的问题。