有几条线程讨论Optaplanner的可伸缩性,我想知道在涉及数百万行时处理大型数据集的建议方法是什么?Optaplanner - 拥有数百万行的大型数据集
正如本博客讨论我已经使用启发式(模拟退火+禁忌搜索)。云平衡问题的搜索空间为c^p,但可行空间为未知/ NP-complete。
http://www.optaplanner.org/blog/2014/03/27/IsTheSearchSpaceOfAnOptimizationProblemReallyThatBig.html
我试图解决的问题是类似云平衡。但主要的区别在于输入数据,除了计算机列表和进程列表之外,还有一个很大的二维“分数列表/表格”,它具有需要加载到内存中的每种可能组合的分数。
换句话说,除了计划和流程之间的规则需要满足的限制外,不同的有效组合产生不同的分数,分数越高越好。
这是一个简单的问题,但对于数百台电脑,100k +进程和分数表有百万个组合,它需要大量的内存。尽管我可以分配更多内存来增加堆大小,但由于这些步骤是使用自定义计划变量/实体比较器类进行排序的,因此规划可能会变得非常缓慢并且很困难。
一个直接的解决方案是将数据集分成更小的子集,分别运行它们,然后合并结果,这样我就可以同时运行多台机器,并且每台机器都运行在多线程。这种方法的最大缺点是产生的结果远离最优。
我想知道还有其他更好的解决方案吗?
谢谢你的回复,杰弗里。我已经在unionMoveSelector中实现了valueSelector和entitySelector,并且这两个选择器都使用排序的选择顺序和比较器类。只要我明白了,实现Nearby Selection方法将取代我目前的排序选择方法。另外,我需要在MachineReassignment环境中定义什么是“距离”概念? – oy321
我收到一条错误消息,说明带有resolvedCacheType(PHASE)和resolvedSelectionOrder(ORIGINAL)的valueSelectorConfig(ValueSelectorConfig(XXX))需要基于EntityIndependentValueSelector(FromEntityPropertyValueSelector(XXX))。请检查您的@ValueRangeProvider注释。',当尝试使用文档9.8.2(R6.4)中描述的最弱适配递减的高级配置细节配置CH时。它是7.0.0.Beta1中修复的错误吗?什么是解决方法? – oy321