保存规划结果时optaplanner堆栈溢出异常

optaplanner stack overflow exception when saving planing result

当我尝试为 665 位客户保存计划车辆路径结果时(使用 "Save as.. " 按钮)我遇到堆栈溢出异常:

Exception in thread "AWT-EventQueue-0" java.lang.WhosebugError: null
    at com.thoughtworks.xstream.mapper.MapperWrapper.isImmutableValueType(MapperWrapper.java:42)
    at com.thoughtworks.xstream.mapper.MapperWrapper.isImmutableValueType(MapperWrapper.java:42)
    at com.thoughtworks.xstream.mapper.MapperWrapper.isImmutableValueType(MapperWrapper.java:42)
    at com.thoughtworks.xstream.mapper.MapperWrapper.isImmutableValueType(MapperWrapper.java:42)
    at com.thoughtworks.xstream.mapper.MapperWrapper.isImmutableValueType(MapperWrapper.java:42)
    at com.thoughtworks.xstream.mapper.MapperWrapper.isImmutableValueType(MapperWrapper.java:42)
    at com.thoughtworks.xstream.mapper.MapperWrapper.isImmutableValueType(MapperWrapper.java:42)
    at com.thoughtworks.xstream.mapper.MapperWrapper.isImmutableValueType(MapperWrapper.java:42)
    at com.thoughtworks.xstream.mapper.MapperWrapper.isImmutableValueType(MapperWrapper.java:42)

如果客户少于 10 个(或更多)(655 个或更少),它工作正常。任何想法有什么问题

异常在不同的情况下看起来不同,起初我认为它是一些奇怪的字符(它驱动 xml 序列化疯狂 - 因为它是调用堆栈上的 xml 序列化方法),所以我用 ID 替换所有地址。我认为如果节点区域中的地址没有唯一名称可能是这样——但事实并非如此。我也尝试了 32 位和 64 位java,但这对天气没有帮助。

上次尝试的完整堆栈在这里 https://dl.dropboxusercontent.com/u/10874009/stack-overflow-exception.txt 这是我的 vrp 文件的 zip,异常是 100% 可报告的数据集 https://dl.dropboxusercontent.com/u/10874009/generated-n666-k36.zip

我使用的二进制文件来自:optaplanner-distribution-6.4。0.Final 提前致谢

一旦VRP数据集达到一定大小,链表结构就会在XStream中触发Whosebug。在那个大小下,XML 格式也变得非常冗长:例如,XML 格式的 10k 客户可以占用 GB 的磁盘空间 space... 在处理大案例时最好导出为 txt 格式到磁盘(或将它们存储在数据库中)。参见 VehicleRoutingSolutionFileIO