@ -1 +1,2 @@ | |||
extended/* | |||
*.swp |
@ -0,0 +1,42 @@ | |||
#!python3 | |||
import sys | |||
from pysat.formula import CNF | |||
import argparse | |||
import pathlib as pl | |||
import bz2 | |||
def main(): | |||
f_ext= CNF(from_fp=sys.stdin) | |||
instance_dir = pl.Path(parse_args()) | |||
instance, core_nr = parse_header(f_ext.comments[0]) | |||
ipath = instance_dir / (instance + ".cnf.bz2") | |||
f = CNF(ipath) | |||
f.extend(f_ext) | |||
f.comments = [] | |||
f.to_fp(sys.stdout, | |||
comments=["c extension_of:{} nr:{}".format(instance, core_nr)]) | |||
def parse_args(): | |||
parser = argparse.ArgumentParser() | |||
parser.add_argument("-i", "--instance_dir", | |||
type=str, | |||
default="./instances", | |||
help="path to the directoy containing all instances") | |||
args = parser.parse_args() | |||
return args.instance_dir | |||
def parse_header(header): | |||
tokens = header.split(' ')[1:] | |||
return tokens[0].split(':')[1], int(tokens[1].split(':')[1]) | |||
if __name__ == "__main__": | |||
main() |
@ -0,0 +1,77 @@ | |||
""" | |||
This script is written for running Uwe Schöning's WalkSAT algorithm | |||
[Uwe Schöning: | |||
A probabilistic algorithm for k-SAT and constraint satisfaction problems. | |||
In: Proceedings of FOCS 1999, IEEE, pages 410–414.] | |||
via the command line | |||
by specifying the instance to solve, and the seed to use. | |||
Uwe Schöning's WalkSAT algorithm can be seen as a special case of the probSAT algorithm | |||
[Adrian Balint, Uwe Schöning: | |||
Choosing Probability Distributions for Stochastic Local Search and the Role of Make versus Break. | |||
In: Lecture Notes in Computer Science, 2012, Volume 7317, Theory and Applications of Satisfiability Testing - SAT 2012, pages 16-29. | |||
https://www.uni-ulm.de/fileadmin/website_uni_ulm/iui.inst.190/Mitarbeiter/balint/SAT2012.pdf] | |||
with exponential function (break-only-exp-algorithm) and c_b = 1. | |||
The script will record the number of flips, the time used, and the seed used. | |||
""" | |||
import argparse | |||
from subprocess import Popen, PIPE | |||
from time import sleep | |||
from os.path import exists | |||
import sys | |||
from timeit import default_timer as timer | |||
import pathlib as pl | |||
def run_alg(instance): | |||
solve_ext_path = pl.Path("./solve_extended.sh").absolute() | |||
#p = Popen([solve_ext_path, instance]) | |||
p = Popen(["bash", "./solve_extended.sh", instance], stdin = PIPE, stdout = PIPE, stderr=PIPE) | |||
output, err = p.communicate() | |||
rc = p.returncode | |||
err = err.decode("utf-8") if err else "" | |||
if err != "": | |||
print(err, file=sys.stderr) | |||
return output.decode("utf-8") | |||
def parse_result(res_str): | |||
res = {} | |||
for line in res_str.splitlines(): | |||
if line.startswith("c restarts"): | |||
res["restarts"] = int(line.split(":")[1].strip().split(" ")[0]) | |||
elif line.startswith("c conflicts"): | |||
res["conflicts"] = int(line.split(":")[1].strip().split(" ")[0]) | |||
elif line.startswith("c decisions"): | |||
res["decisions"] = int(line.split(":")[1].strip().split(" ")[0]) | |||
elif line.startswith("c propagations"): | |||
res["propagations"] = int(line.split(":")[1].strip().split(" ")[0]) | |||
elif line.startswith("c nb reduced Clauses"): | |||
res["reduced_clauses"] = int(line.split(":")[1]) | |||
elif line.startswith("c CPU time"): | |||
res["cpu_time"] = float(line.split(":")[1].strip().split(" ")[0]) | |||
elif line.startswith("s"): | |||
res["result"] = line.split(" ")[1].strip() | |||
return res | |||
if __name__ == '__main__': | |||
parser = argparse.ArgumentParser() | |||
parser.add_argument("-i", "--instance", help="The instance.") | |||
args = parser.parse_args() | |||
res_str = run_alg(args.instance) | |||
res = parse_result(res_str) | |||
print(','.join(map(str, res.values()))) | |||
@ -0,0 +1,52 @@ | |||
""" | |||
This script is written for running Uwe Schöning's WalkSAT algorithm | |||
[Uwe Schöning: | |||
A probabilistic algorithm for k-SAT and constraint satisfaction problems. | |||
In: Proceedings of FOCS 1999, IEEE, pages 410–414.] | |||
via the command line | |||
by specifying the instance to solve, and the seed to use. | |||
Uwe Schöning's WalkSAT algorithm can be seen as a special case of the probSAT algorithm | |||
[Adrian Balint, Uwe Schöning: | |||
Choosing Probability Distributions for Stochastic Local Search and the Role of Make versus Break. | |||
In: Lecture Notes in Computer Science, 2012, Volume 7317, Theory and Applications of Satisfiability Testing - SAT 2012, pages 16-29. | |||
https://www.uni-ulm.de/fileadmin/website_uni_ulm/iui.inst.190/Mitarbeiter/balint/SAT2012.pdf] | |||
with exponential function (break-only-exp-algorithm) and c_b = 1. | |||
The script will record the number of flips, the time used, and the seed used. | |||
""" | |||
import argparse | |||
from subprocess import Popen, PIPE | |||
from time import sleep | |||
from os.path import exists | |||
import sys | |||
from timeit import default_timer as timer | |||
def run_alg(instance, seed): | |||
p = Popen(['./uweAlg', '--cb', '1.0', '--fct', str(1), instance, str(abs(seed))], stdin = PIPE, stdout = PIPE, stderr=PIPE) | |||
output, err = p.communicate() | |||
rc = p.returncode | |||
err = err.decode("utf-8") | |||
if err != "": | |||
print(err, file=sys.stderr) | |||
return output.decode("utf-8").replace(" 1\n","").replace("\n","") | |||
if __name__ == '__main__': | |||
parser = argparse.ArgumentParser() | |||
parser.add_argument("-s", "--seed", type=int, default=1909, help="The seed.") | |||
parser.add_argument("-i", "--instance", default='./instances/uf250-01.cnf', help="The instance.") | |||
args = parser.parse_args() | |||
start = timer() | |||
flips = run_alg(args.instance, args.seed) | |||
end = timer() | |||
print(flips, end-start, str(abs(args.seed))) | |||
@ -0,0 +1,3 @@ | |||
#!bash | |||
bzip2 -d < ${1} | python3 ./extend.py | glucose |