解決したい最適化問題があります。ある種のデータ構造があります。
data Foo =
{ fooA :: Int
, fooB :: Int
, fooC :: Int
, fooD :: Int
, fooE :: Int
}
および評価関数:
rateFoo :: myFoo -> Int
rateFoo
構造体の値を変更して、結果を最適化する必要があります。この特定のケースでは、問題を解決するために反復深化探索を使用することにしました。最適化を最適化するための(無限の)検索ツリーは、別の関数によって作成されます。この関数は、考えられるすべての変更をツリーに再帰的に適用します。
fooTree :: Foo -> Tree
私の検索機能は次のようになります。
optimize :: Int -> Foo -> Foo
optimize threshold foo = undefined
私が始める前に私が持っていた質問はこれです:
ツリーは各ポイントのデータによって生成できるので、現在アルゴリズムで必要とされているツリーの部分のみを生成することは可能ですか?メモリを節約するために、必要に応じてメモリを解放し、ツリーを再生成することは可能ですか(レベルnのリーブを生成でき
O(n)
、nは小さいままですが、ツリー全体をメモリに保持するのに十分な小ささではありません)。これは私がランタイムから期待できるものですか?ランタイムは式を未評価にすることができますか(評価された式を未評価の式に変換します)?または、これのために私がしなければならない汚いハックは何ですか?