Python Z3 et concurrent.futures

voix
0

Je veux résoudre un ensemble de problèmes contenus en parallèle, après quoi l'information d'addition est ajoutée à résoudre un nouveau problème.

Ci-dessous un exemple de la structure du programme utilisé pour résoudre le problème:

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']
            )
        )

Les résultats sont différents à chaque fois que le programme est exécuté, les résultats comprennent:

  • « Commande dec_ref invalide » Z3Exception
  • python qui accident
  • Pas d'erreur

Que dois-je faire, pour rendre le programme plus fiable?

Créé 19/09/2018 à 13:20
source utilisateur
Dans d'autres langues...                            


1 réponses

voix
1

Avez - vous vu cet exemple: http://github.com/Z3Prover/z3/blob/master/examples/python/parallel.py

Je ne suis pas un expert sur les fonctionnalités concurrentes dans z3py, mais il semble que vous être besoin d'être très prudent sur la création des variables dans le même contexte que vous utilisez la solveurs. Il y a quelques conseils dans ce fichier très.

Créé 22/09/2018 à 21:16
source utilisateur

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