Drools optaplanner事实是否可以是数组?

Drools optaplanner事实是否可以是数组?,drools,optaplanner,Drools,Optaplanner,我希望加载大量事实,点之间有300万个距离,我想知道是否可以使用可搜索的数据结构(如数组)提供optaplanner事实。我的感觉是,使用一个列表来保存这么多的值会产生很长的搜索时间。我正在使用Drools评分。是的,问题事实可以是数组。问题事实也可以包含数组字段。要在Drools分数计算中使用它们,需要从getProblemFacts()方法将它们作为集合返回,但只需将它们包装在ArrayList中,在这里,您不会遇到任何明显的性能下降:初始化时会出现1次下降,一旦它们进入Droolswork

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

是的,问题事实可以是数组。问题事实也可以包含数组字段。要在Drools分数计算中使用它们,需要从
getProblemFacts()
方法将它们作为
集合返回,但只需将它们包装在
ArrayList
中,在这里,您不会遇到任何明显的性能下降:初始化时会出现1次下降,一旦它们进入Drools
workingMemory
,getProblemFacts()集合就会被遗忘

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

规划实体当前需要是集合,因为
@PlanningEntityCollectionProperty
当前仅支持返回类型为
集合
。请随意制作一个jira,我们还应该支持一个数组,甚至提供一个实现它的github PR:)


计划值范围当前需要是
列表
或数字边界。请随意制作一个jira或PR,我们也应该在那里支持一个数组,只需将
ListValueRange
复制粘贴到
ArrayValueRange

我正在制作一个具有100k点和它们之间实际距离的示例。问题是,保持所有距离(100k)²是不可能的,因为(20k)²32位整数的2D数组占用了几乎2GB的RAM内存(在任何语言中,而不仅仅是在java中)。