在任意表达式树中找到最大值

问题描述 投票:0回答:1

我有一个非常简单的语言,它被编译成一个表达式树,然后被评估。用户可以定义数学运算、使用变量和控制流程。此外,还可以从脚本中读取外部输入,该输入对于给定的评估是固定的(即,如果重复调用,它会输出相同的值)。例如,这是一个有效的脚本:

if readInput() < 10 then
    x = 2 * readInput()
else
    x = 0
end

我的问题:对于给定的输入域,我需要计算

x
的最大值和最小值,例如
[0, 1000]
.

我想到的解决方案:

  • 分配给

    readInput()
    域的边界并评估
    x
    的值。它在许多情况下有效,但在许多其他情况下失败,例如在上面的情况下,它在
    x = 0
    0
     中评估为 
    1000

  • 以数字方式计算最大/最小值,这在很多情况下都有效,但计算量大,并且不能保证达到最大值,尤其是在存在不连续性时

  • 以某种方式转换树并使用符号数学库来计算边界

我还缺少其他选择吗?

mathematical-optimization dsl expression-trees symbolic-math nonlinear-optimization
1个回答
0
投票

你可以动态地做

max = -∞
...
if x > max then 
   max = x
...

最后

max
保持最大值或-∞如果没有输入值

© www.soinside.com 2019 - 2024. All rights reserved.