在对Optaplanner进行分区时,SubSingleBenchmarker错误。

问题描述 投票:0回答:1

我正试图运行带有分区的基准测试。分区在较小的问题上运行得很好,但当我试图在更多的规划实体上运行时,我得到以下错误。@ProblemFactCollectionProperty 标签,但我还是得到了同样的问题。

有什么办法可以解决这个问题吗?

The subSingleBenchmarkRunner (Problem_0_First Fit Decreasing DDU_1) failed.
java.util.ConcurrentModificationException: null
    at java.util.ArrayList$SubList.checkForComodification(ArrayList.java:1239)
    at java.util.ArrayList$SubList.size(ArrayList.java:1048)
    at java.util.AbstractList.add(AbstractList.java:108)
    at com.Problem.utils.ProblemPartitioner.splitWorkingSolution(ProblemPartitioner.java:60)
    at org.optaplanner.core.impl.partitionedsearch.DefaultPartitionedSearchPhase.solve(DefaultPartitionedSearchPhase.java:94)
    at org.optaplanner.core.impl.solver.AbstractSolver.runPhases(AbstractSolver.java:88)
    at org.optaplanner.core.impl.solver.DefaultSolver.solve(DefaultSolver.java:191)
    at org.optaplanner.benchmark.impl.SubSingleBenchmarkRunner.call(SubSingleBenchmarkRunner.java:106)
    at org.optaplanner.benchmark.impl.SubSingleBenchmarkRunner.call(SubSingleBenchmarkRunner.java:34)
    at java.util.concurrent.FutureTask.run(FutureTask.java:266)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
    at java.lang.Thread.run(Thread.java:748)
search partition optaplanner concurrentmodification
1个回答
0
投票

ArrayList.subList() 并没有对列表进行复制。对子列表的任何更改都会影响原始列表。

因此,当你的 ProblemPartitioner 将一个 List 分割成 4 个不同的子列表时,它应该使用 new ArrayList(originalList.subList()) 所以它有一个子列表的副本。

© www.soinside.com 2019 - 2024. All rights reserved.