Python元素的求和和和连续时间约束

Python元素的求和和和连续时间约束,python,artificial-intelligence,constraint-programming,Python,Artificial Intelligence,Constraint Programming,我有这样的数据 a = [10, 11, 12, 13, 14] b = [15, 16, 17, 18, 19] c = [20, 21, 22, 23, 24] 我想检查列表中每个元素的第I个元素的总和,即元素的总和是否大于50,其中I=[0,1,2,3,4] 我还想检查总和是否连续三次大于50 在python中,有没有一种方法可以作为约束满足问题来实现这一点 我尝试了以下方法(使用此CSP模块:),但这会打印每个列表中所有可能值的组合,但我想进行元素求和

我有这样的数据

    a = [10, 11, 12, 13, 14]
    b = [15, 16, 17, 18, 19]
    c = [20, 21, 22, 23, 24]
  • 我想检查列表中每个元素的第I个元素的总和,即元素的总和是否大于50,其中I=[0,1,2,3,4]
  • 我还想检查总和是否连续三次大于50
  • 在python中,有没有一种方法可以作为约束满足问题来实现这一点

    我尝试了以下方法(使用此CSP模块:),但这会打印每个列表中所有可能值的组合,但我想进行元素求和

        from constraint import *
    
        problem = Problem()
        problem.addVariable("a", [10, 11, 12, 13, 14])
        problem.addVariable("b", [15, 16, 17, 18, 19])
        problem.addVariable('c', [20, 21, 22, 23, 24])
    
        problem.addConstraint(lambda a,b,c: a+b+c>50, ("a","b","c"))
    
        for x in problem.getSolutions():
            print x
    
    结果(共72个答案)

    所需答复:

        {'a': 12, 'c': 22, 'b': 17}
        {'a': 13, 'c': 23, 'b': 18}
        {'a': 14, 'c': 24, 'b': 19}
    
    另外,如何添加约束来检查总和大于50的连续次数

    我知道我可以使用lambda函数来实现这一点,但如果可能的话,我想使用CSP库,因为以后可能会有更多的约束,而且列表的数量和每个列表中的元素数量可能会增加到1000

        a = [10, 11, 12, 13, 14]
        b = [15, 16, 17, 18, 19]
        c = [20, 21, 22, 23, 24]
    
        z = zip(a, b, c)
    
        print map(lambda (x,y,z): x+y+z>50, z)
    
    我建议你调查一下。例如,下面的一些代码将查找并计算总和大于50的连续列的运行次数

    from itertools import groupby
    
    a = [10, 11, 12, 13, 14]
    b = [15, 16, 17, 18, 19]
    c = [20, 21, 22, 23, 24]
    
    data = [a, b, c]
    
    def keyfunc(t):
        return sum(t) > 50
    
    for k, g in groupby(zip(*data), keyfunc):
        if k:
            g = list(g)
            print(g, len(g))
    
    输出

    [(12, 17, 22), (13, 18, 23), (14, 19, 24)] 3
    

    虽然我理解你在这里所说的“连续”是什么意思,但这似乎不容易转化为约束。使用附加变量
    I
    :三个数组中的索引。关于连续:约束编程的要点通常是不考虑生成解的顺序。好的解算器的目标是最小化生成第一个解的时间,因此通常以无顺序方式生成解。将其与数据库进行比较:如果未指定
    orderby
    ,则大多数数据库不会对检索顺序提供任何硬保证。
    [(12, 17, 22), (13, 18, 23), (14, 19, 24)] 3