2017-09-25 63 views
0

我想爲我的基於VRP(時間窗口)的示例應用程序創建一種「智能」MoveIteratorFactory。這個移動工廠應該返回一個Iterator,它會在每次基於當前解決方案狀態生成CompositeMove時生成。MoveIteratorFactory可以根據當前的工作解決方案生成移動嗎?

MoveIteratorFactory是否可以創建一個迭代器,以便根據當前解決方案狀態生成移動?

AFAIK MoveIteratorFactory的方法接受ScoreDirector對象,看起來返回的Iterator應該使用從ScoreDirector的工作解決方案中檢索到的實例生成移動。但是在求解過程正在進行時這些實例是否被更新?他們是否具有根據當前工作解決方案狀態設置的所有計劃變量,何時hasNext下一個方法被調用?還是應該迭代器有一個帶有ScoreDirector實例的字段,並且使用每次從ScoreDirector檢索到的實例生成移動?

回答

1

是的,只要確保cacheType不是PHASE或更高(默認情況下,因爲默認情況下它是JUST_IN_TIME)。請參閱文檔第7章。

在每一步開始時,它將調用createRandomMoveIterator(),它可以考慮當前workingSolution的狀態。

+0

非常感謝!我只想知道每次爲每個步驟重新分配一個迭代器實例時分配的影響(性能)是什麼? –

+0

可忽略的,如果它確實在列表中創建所有移動(否則你可能會使用MoveListFactory) –