【发布时间】:2012-12-19 16:26:16
【问题描述】:
问题如下:
我开发了一个表达式评估引擎,它为用户提供了一种类似 XPath 的语言,以便他可以构建表达式。然后将这些表达式解析并存储为表达式树。表达式有很多种,包括逻辑(and/or/not),关系(=, !=, >, =,
除了这些操作之外,表达式还可以包含常量(数字、字符串、日期等),还可以使用类似于 XPath 的语法在 Java 对象树中导航来访问外部信息。
鉴于上述情况,我们可以构建如下表达式:
/some/value and /some/other/value
/some/value or /some/other/value
if (<evaluate some expression>) then
<evaluate some other expression>
else
<do something else>
由于 if-then-else 表达式的 then-part 和 else-part 本身就是表达式,并且一切都被认为是一个表达式,那么任何东西都可以出现在那里,包括其他 if-then-else,允许用户通过嵌套 if-then-else 来构建大型决策树。
由于这些表达式是手动构建的并且容易出现人为错误,因此我决定构建一个能够基于对常见外部数据的分析来优化这些表达式树的自动学习过程。例如:在上面的第一个表达式中(/some/value and /some/other/value),如果 /some/other/value 的结果大部分是 false时间,我们可以重新排列树,这样这个分支将成为左分支,以利用短路评估(AND 的右侧不被评估,因为左侧已经确定了结果)。
另一个可能的优化是重新排列嵌套的 if-then-else 表达式(决策树),以便根据最常用的外部数据采用的最频繁路径将在未来更快地执行,从而避免对某些分支进行不必要的评估大多数时候。
您对用于执行这些表达式树的自动重构的最佳或推荐方法/算法有什么想法吗?
【问题讨论】:
-
我不明白,优化如何帮助您解决人为错误?
标签: machine-learning expression-trees decision-tree