【问题标题】:How to get a list of integers from a given set of possible integers in z3?如何从z3中给定的一组可能整数中获取整数列表?
【发布时间】:2018-01-18 06:17:48
【问题描述】:

最小示例如下:给定一组可能的整数[1, 2, 3],使用 z3py 创建一个大小为 5 的任意列表。允许重复。

预期结果类似于[1, 1, 1, 1, 1][3, 1, 2, 2, 3] 等。

如何解决这个问题以及如何实现“选择”?最后,我想找到所有可以通过添加额外约束来完成的解决方案,如link 中所述。任何帮助将不胜感激。

【问题讨论】:

    标签: z3 constraint-programming z3py


    【解决方案1】:

    以下应该有效:

    from z3 import *
    
    def choose(elts, acceptable):
        s = Solver()
        s.add(And([Or([x == v for v in acceptable]) for x in Ints(elts)]))
    
        models = []
        while s.check() == sat:
            m = s.model ()
            if not m:
                break
            models.append(m)
            block = Not(And([v() == m[v] for v in m]))
            s.add(block)
    
        return models
    
    print choose('a b c d e', [1, 2, 3])
    

    【讨论】:

    • 太棒了!我看到您没有使用任何 Array 或量词,但您只需分别为每个字段定义一个变量并放置约束。完美,谢谢!
    猜你喜欢
    • 1970-01-01
    • 2020-05-18
    • 1970-01-01
    • 2012-08-21
    • 1970-01-01
    • 1970-01-01
    • 2022-08-15
    相关资源
    最近更新 更多