我有一个要解决的优化问题。你有某种数据结构:
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 仍然很小,但不足以随着时间的推移将整个树都放在内存中)?这是我可以从运行时获得的东西吗?运行时可以取消计算表达式(将已计算的表达式转换为未计算的表达式)吗?或者我必须为此做些什么肮脏的黑客行为?