私は膨大な数のアイテムの組み合わせ (League of Legends から) を処理しています。約 7,200 万通りあり、それらはすべて、それらがどれほど有益であるかを計算する関数に入力されます。
可能な限り最高の組み合わせを見つけようとしています。
アルゴリズム的に言えば、これを行うためのより良い方法があるかもしれないという事実を無視して、メモリエラーが発生する理由を誰か教えてもらえますか?
allpossiblei = itertools.combinations(items.keys(),5)
maxc = 0
i = 0
for combo in allpossiblei:
icombo = [items[name] for name in combo]
res, tcost = calcStats(icombo, 0.658,100,100)
if res > maxc :
maxc = res
print str(res) + " " + str(res/tcost)
print combo
print float(i)/79208745.0
if i % 500000 == 0:
print str(float(i)/79208745.0) + "\n \n"
gc.collect()
i = i + 1
calcStats は、ローカル変数を使用した算術演算以外は何もしません。
これは急速に 2 GB 以上のメモリを消費し、約 5 分で終了します。itertools は大量のメモリを消費しないジェネレーターを提供するはずだと思っていましたか? その gc.collect() ステートメントを投入しましたが、うまくいかないようです。何か案は?