具有多重输入值的递归

时间:2017-11-21 18:55:44

标签: python recursion combinations depth-first-search

我有一个函数,它接受两个值作为输入,并返回一个值为"组合"两个通过第二个函数(为简单起见,f2返回输入值的总和)。在python中它是:

f1 (in1, in2):
    return f2(in1,in2)

f2 (in1, in2):
    return in1 + in2

现在,in1in2与时间点相关联; in1可以包含3个值:012。 我想做的是"展望未来"对于n=4个时间点,并确定in1值的最佳序列,这将给我最高的回报值。 所以,让我们说in2最初是10.我需要做的是评估:

a = f1(0, 10)
b = f1(1, 10)
c = f1(2, 10)

然后,对于我获得的每个结果,我需要使用in1的可能值进行评估:

a0 = f1(0, a);  a1 = f1(1, a); a2 = f1(2, a)
b0 = f1(0, b);  b1 = f1(1, b); b2 = f1(2, b)
c0 = f1(0, c);  c1 = f1(1, c); c2 = f1(2, c)

所以我在n次迭代后停止并确定最佳输入序列(在此示例中它将是2 2 2 2,因为10+12+14+16是最高值)。 可以在这个实例中使用递归(可能是深度优先搜索)吗?编码它的最佳方法是什么?蛮力方法是嵌套4 for循环,但如果n = 10

1 个答案:

答案 0 :(得分:0)

如果您事先知道f1和f2的数学性质,那么您应该将其表示为数学程序(例如,如果f1和f2相对于in1和in2是线性的,则使用PuLP库。)

以下是您提到的使用PuLP建模并使用CBC解决的示例:

from pulp import *

model = LpProblem("Maximize f1", LpMaximize)

in1 = LpVariable.dicts("in1", 0, 2, LpInteger)
in2 = 10

model += in1 + in2  # f1 and f2 combined

model.solve()

print(in1.varValue)

虽然这个问题很简单(in1 = 2)。不确定你的时间段是如何形成的,因为你没有指定f1或f2的时间依赖性。

如果你不知道f1和f2的形式,并且不能假设它们相对于in1和in2是连续的,平滑的或凸的,那么你可能需要强制它并计算所有( in1,in2)组合。深度优先和广度优先将花费相同的时间来详尽地计算它们。