Python Z3 и concurrent.futures

голоса
0

Я хочу, чтобы решить множество проблем, содержащихся параллельно, после чего добавляют решить новую проблему Добавление информации.

Ниже приведен пример структуры программы, используемой для решения проблемы:

from z3 import *
import concurrent.futures


# solver test function
def add(a, b, solver, index):
    solver.append(a > b)
    assert solver.check()
    model = solver.model()
    return {
        'solver': solver,
        'av': model[a],
        'a': a,
        'b': b,
        'bv': model[b],
        'index': index
    }


with concurrent.futures.ThreadPoolExecutor(max_workers=5) as executor:
    # start solving the problems
    to_compute = []
    for i in range(3):
        sol = z3.Solver()
        to_compute.append(executor.submit(
            add,
            Int('a{}'.format(i)),
            Int('b{}'.format(i)),
            sol,
            i
        ))
    # wait for the solution to the computations
    next_to_solve = []
    for result_futures in concurrent.futures.as_completed(to_compute):
        results = result_futures.result()
        print(results)
        sol = results['solver']
        sol.append(results['a'] > results['av'])
        next_to_solve.append(
            executor.submit(
                add,
                results['a'],
                results['b'],
                sol,
                results['index']
            )
        )

Результаты отличаются каждый раз, когда программа запускается, результаты включают в себя:

  • Z3Exception «неправильная команда dec_ref»
  • Python, что сбой
  • Нет ошибок

Что мне нужно сделать, чтобы сделать программу более надежной?

Задан 19/09/2018 в 13:20
источник пользователем
На других языках...                            


1 ответов

голоса
1

Видели ли вы этот пример: http://github.com/Z3Prover/z3/blob/master/examples/python/parallel.py

Я не эксперт по параллельным функциям в z3py, но это, кажется, вам нужно быть очень осторожными о создании переменных в том же контексте, что вы запускаете решатель. Есть некоторые намеки в этом самом файле.

Ответил 22/09/2018 в 21:16
источник пользователем

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more