MoveIteratorFactory的目的

时间:2016-06-01 21:39:41

标签: optaplanner

正如我从文档中可以理解的那样,“MoveIteratorFactory”的目的是生成移动,因为它们需要在每一步都被播放。

“getSize”方法的移动子集有多大?

“createOriginalMoveIterator”和“createRandomMoveIterator”有什么区别?

“createOriginalMoveIterator”会在以后的步骤中再次重新生成一部分移动吗?

我猜在这两种情况下,在调用next()方法之后(在创建之后),该移动会被播放出来吗?

如果需要生成很多动作,这是最好的解决方案吗,因为在我的情况下,有很多动作需要首先生成,更不用说了吗?

是否有更智能的方法在每个步骤中生成基于解决方案当前状态的自定义组合移动?

2 个答案:

答案 0 :(得分:2)

7MoveIteratorFactory的一个更复杂的替代方法,可以通过创建MoveListFactory来避免创建List<Move>。在Java 8术语中,它与Iterator<Move>有很多共同之处。

假设您有50k实体和10k值。所有changemoves的列表将包含500m元素,每次步骤开始时都会导致内存问题和严重的延迟丢失。为避免这种情况,它会在StreamIterator.next()生成及时的更改。

为了使其正常工作,如果迭代器需要选择随机移动(=可能选择相同的移动两次,这不是随机移动,它是随机的!)或原始顺序,它需要表现不同。

答案 1 :(得分:0)

假设您有50k实体和10k值。所有changemoves的列表将包含500m元素,每次步骤开始时都会导致内存问题和严重的延迟丢失。为避免这种情况,它会及时生成一个更改,在Iterator.next()或hasNext()