鉴于 -
A = fn (B, C, D)
fn
可以是任何可能包含简单和复杂计算的函数。
我需要根据运行时的当前值(如果可用)计算A,B,C,D的可能值
让我们举个例子来更好地理解它。假设 -
A = B + C * D
现在,如果B=2
,C=3
和D=5
则A = 17
如果B=1 to 2
,C=1 to 5
和D=5
,则A = 6 to 27
如果A=10 to 20
,B=100
,D=1 to 10
,则A = 110 to 1020
同样根据B,C和D的可能值,我们可以计算A
的可能值。
现在我需要为B
,C
和D
执行相同操作,即如果我知道A
,C
和{{1}的值那么我应该能够告诉D
的可能值 - (记住,没有办法直接知道什么是B
而且B = fn2 (A, C, D)
可能不仅仅是数学计算。
我知道的一种方法是预先计算数据库中所有可能值的数据,然后根据可用值将其过滤掉(假设存储不是问题)。
以最短的响应时间实现此目的的其他可能方法是什么?
答案 0 :(得分:1)
基本上,您要做的是找到fn
的最大值和最小值,即解决constraint optimization problem:首先,您要查找最小fn
个给定约束(范围)对于B,C和D),然后在同一域中最小化-fn
。
幸运的是,你只有3个变量,所以这应该不是问题。但算法的速度取决于您拥有的函数的信息量。理想情况下,您应该能够计算Hessian,但只知道gradient就足够了。最后,如果您不知道渐变,您仍然可以使用finite differences近似它。
如果你事先不知道优化函数,但在基本操作方面知道它的符号表示(公式)(如+
,-
,等和基本函数如exp
,log
,等),您可以symbolic differentiation获取渐变公式(和粗体)。
在优化方面,我不是专家,但我认为预测方法(如投影梯度下降,投影牛顿法)将起作用。此外,内点法可能有用,但我不熟悉它。
已作出假设: