簡體   English   中英

`java.lang.OutOfMemoryError: Java 大樹上的堆空間`

[英]`java.lang.OutOfMemoryError: Java heap space On large Tree`

所以我的程序是一個國際象棋人工智能。 它通過為所有可能的動作制作一棵樹來工作。

問題是在深度為 4 之后,這棵樹變得非常大。 在開始的 position 中,只有 20 個可能的移動,所以還不錯,但是一旦程序在游戲后期到達,就有接近 40 個可能的移動,這意味着樹呈指數級增長,這會導致錯誤。

我也可以互換地得到java.lang.OutOfMemoryError: GC overhead limit exceeded

我的問題是是否有辦法將堆大小增加到 > 1024 Mb,或者以其他方式解決這個問題。 謝謝 <3

增加堆大小相當簡單。 如本答案https://stackoverflow.com/a/6452812/7201500中所述,您可以使用 -Xmx

但是,它不會讓您走得太遠,因為您的 memory 需求將隨着您要計算的移動次數而繼續呈指數增長。 考慮到您所說的,即使使用強大的計算機,您也不太可能計算超過 10 步。

您需要使用一種策略,它不會將計算的所有內容都保留在 memory 中,並且如果可能的話,只計算可用的移動。 因為在您的 memory 問題之后,您將遇到計算問題。 處理器速度很快,但指數增長更快。

作為第一步,您可能會優化您的代碼,以丟棄分析過的每一個動作並發現不如其他動作最優。 這應該可以幫助您解決 memory 問題。 到 go 進一步,算法需要更復雜,但你很幸運:這個主題已經研究了很多。

您可以查看Stockfish或其他一些開源國際象棋引擎,以了解如何優化您的算法。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM