【问题标题】:Recursion with multplie input values具有多个输入值的递归
【发布时间】:2017-11-21 18:55:43
【问题描述】:

我有一个函数,它接受两个值作为输入,并通过第二个函数返回一个作为两者“组合”的值(为简单起见,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 怎么办?

【问题讨论】:

    标签: python recursion combinations depth-first-search


    【解决方案1】:

    如果您事先知道 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) 组合。深度优先和广度优先将花费相同的时间来彻底计算它们。

    【讨论】:

    • 不,不幸的是我不知道函数的数学性质。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-08
    • 2019-02-17
    • 1970-01-01
    相关资源
    最近更新 更多