scripts
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1 +1,2 @@
|
||||
extended/*
|
||||
*.swp
|
||||
|
42
extend.py
Executable file
42
extend.py
Executable file
@@ -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()
|
@@ -57,9 +57,6 @@ def run(instance, calls_per_instance):
|
||||
for i in range(calls_per_instance):
|
||||
extension = gen_extension(iname, len(f.clauses) / 10)
|
||||
|
||||
#tmp_f = f.copy()
|
||||
#tmp_f.extend(extension)
|
||||
|
||||
ext_f = CNF()
|
||||
ext_f.extend(extension)
|
||||
|
||||
@@ -67,8 +64,9 @@ def run(instance, calls_per_instance):
|
||||
print(len(f.clauses))
|
||||
print()
|
||||
|
||||
ext_f.to_file(next_file_path(iname),
|
||||
comments=["c {} core extended".format(iname),
|
||||
fpath, nr = next_file_path(iname)
|
||||
ext_f.to_file(fpath,
|
||||
comments=["c extending:{} nr:{}".format(iname, nr),
|
||||
"c number of cores: {}".format(len(extension))],
|
||||
compress_with="bzip2")
|
||||
|
||||
@@ -111,7 +109,7 @@ def next_file_path(name):
|
||||
counter += 1
|
||||
ext_file_path = EXTENDED_DIR / ("{}_{:04}.cnf.bz2".format(name, counter))
|
||||
|
||||
return ext_file_path
|
||||
return ext_file_path, counter
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
|
77
main.py
Normal file
77
main.py
Normal file
@@ -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())))
|
||||
|
||||
|
||||
|
||||
|
||||
|
52
main.py.backup
Normal file
52
main.py.backup
Normal file
@@ -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)))
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
3
solve_extended.sh
Executable file
3
solve_extended.sh
Executable file
@@ -0,0 +1,3 @@
|
||||
#!bash
|
||||
|
||||
bzip2 -d < ${1} | python3 ./extend.py | glucose
|
Reference in New Issue
Block a user