私は次のコードを書きました:
combinationsstring = "List of Combinations"
for a = 0, 65 do
for b = 0, 52 do
for c = 0, 40 do
for d = 0, 28 do
for e = 0, 19 do
for f = 0, 11 do
for g = 0, 4 do
if (((1.15^a)-1)+((20/3)*((1.15^b)-1))
+((100/3)*((1.15^c)-1))+(200*((1.15^d)-1))
+((2000/3)*((1.15^e)-1))+((8000/3)*((1.15^f)-1))
+((40000/3)*((1.15^g)-1))) < 10000 then
combinationsstring = combinationsstring
.."\n"..a..", "..b..", "..c..", "..d
..", "..e..", "..f..", "..g
end
end
end
end
end
end
end
end
local file = io.open("listOfCombinations.txt", "w")
file:write(combinationsstring)
file:close()
次の方程式に適合するすべてのデータセットを見つける必要があります
(((1.15^a)-1)+((20/3)*((1.15^b)-1))+
((100/3)*((1.15^c)-1))+(200*((1.15^d)-1))+
((2000/3)*((1.15^e)-1))+((8000/3)*((1.15^f)-1))+
((40000/3)*((1.15^g)-1))) < 10000
各変数 (ag) は実数です。そこで、7 つのそれぞれの最大値を計算しました (各変数の最大値は、他のすべての値が 0 の場合です)。これらの最大値は、65、52、40、28、19、11、および 4 です (62 = a、52 = b など)。
そこで、ネストされた 7 つの for ループを作成し (上記のコードに示すように)、中央のブロックで 7 つの値をテストして、基準に適合するかどうかを確認しました。適合する場合は、文字列に追加されました。コードの最後で、プログラムはファイルを上書きし、可能なすべての組み合わせを含む最終文字列を配置します。
プログラムは正常に動作していますが、このシミュレーションの過程で 31 億回の計算が実行されており、いくつかのテストから、私のコンピューターは 1 秒あたり平均 3000 回の計算を行っていることがわかりました。これは、合計シミュレーション時間が約 12 日と 5 時間であることを意味します。今回はまったく時間がないので、テストする方程式を単純化し、不要なコードを削除するために午前中ずっと費やしていましたが、これが私の最終結果でした。
ネストされた for ループを使用して行ったこの方法は、ここで最も最適な方法ですか? もしそうなら、これをスピードアップできる他の方法はありますか? そうでない場合は、別の方法を教えてもらえますか?
PS Lua は私が最もよく知っている言語であるため、Lua を使用していますが、他の提案や例があれば、あなたの言語で使用してください。このプログラム用に最適化を試みることができます。