#!/usr/bin/env python
"""
Solves SAT instance by reading from stdin using an iterative or recursive
watchlist-based backtracking algorithm. Iterative algorithm is used by default,
unless the --recursive flag is given. Empty lines and lines starting with a #
will be ignored.
"""
from __future__ import division
from __future__ import print_function
from argparse import ArgumentParser
from argparse import FileType
from sys import stdin
from sys import stdout
from sys import stderr
from satinstance import SATInstance
from solvers.watchlist import setup_watchlist
from solvers import recursive_sat
from solvers import iterative_sat
__author__ = 'Sahand Saba'
def generate_assignmnets(instance, solver, verbose=False):
"""
Returns a generator that generates all the satisfying assignments for a
given SAT instance, using algorithm given by alg.
"""
n = len(instance.variables)
watchlist = setup_watchlist(instance)
if not watchlist:
return ()
assignment = [None] * n
return solver.solve(instance, watchlist, assignment, 0, verbose)
def run_solver(input_file, output_file, solver, brief, verbose, output_all,
starting_with):
"""
Run the given solver for the given file-like input object and write the
output to the given output file-like object.
"""
instance = SATInstance.from_file(input_file)
assignments = generate_assignmnets(instance, solver, verbose)
count = 0
for assignment in assignments:
count += 1
if verbose:
print('Found satisfying assignment #{}:'.format(count),
file=stderr)
assignment_str = instance.assignment_to_string(
assignment,
brief=brief,
starting_with=starting_with
)
output_file.write(assignment_str + '\n')
if not output_all:
break
if verbose and count == 0:
print('No satisfying assignment exists.', file=stderr)
def main():
args = parse_args()
with args.input:
with args.output:
run_solver(args.input, args.output, args.solver, args.brief,
args.verbose, args.all, args.starting_with)
def parse_args():
parser = ArgumentParser(description=__doc__)
parser.add_argument('-v',
'--verbose',
help='verbose output.',
action='store_true')
parser.add_argument('-a',
'--all',
help='output all possible solutions.',
action='store_true')
parser.add_argument('-b',
'--brief',
help=('brief output:'
' only outputs variables assigned true.'),
action='store_true')
parser.add_argument('--starting_with',
help=('only output variables with names'
' starting with the given string.'),
default='')
parser.add_argument('--iterative',
help='use the iterative algorithm.',
action='store_const',
dest='solver',
default=recursive_sat,
const=iterative_sat)
parser.add_argument('-i',
'--input',
help='read from given file instead of stdin.',
type=FileType('r'),
default=stdin)
parser.add_argument('-o',
'--output',
help='write to given file instead of default stdout.',
type=FileType('w'),
default=stdout)
return parser.parse_args()
if __name__ == '__main__':
main()
没有合适的资源?快使用搜索试试~ 我知道了~
simple-sat, 在 python 中,编写了简单的递归和迭代SAT求解器.zip
共91个文件
in:40个
out:40个
py:8个
需积分: 27 7 下载量 53 浏览量
2019-09-18
04:46:38
上传
评论
收藏 49KB ZIP 举报
温馨提示
simple-sat, 在 python 中,编写了简单的递归和迭代SAT求解器 简单 SAT: 简单 python SAT求解器这个项目是一个简单的递归和迭代实现的回溯,基于观察的,SAT求解器。 代码基本上是基于knuth程序的,可以在这里找到 。 迭代代码的版本更接近于 knuth,但稍微复杂一点。 递归的版本相
资源推荐
资源详情
资源评论
收起资源包目录
simple-sat.zip (91个子文件)
simple-sat-master
.gitignore 544B
README.rst 2KB
LICENSE 1KB
src
sat.py 4KB
tests
simple
03.out 7B
02.in 17B
03.in 32B
01.out 0B
01.in 5B
02.out 8B
w44
w44-014.out 55B
w44-018.out 74B
w44-028.out 120B
w44-025.in 3KB
w44-022.in 2KB
w44-009.out 34B
w44-031.out 133B
w44-036.out 0B
w44-036.in 7KB
w44-029.in 4KB
w44-020.out 83B
w44-027.in 4KB
w44-010.out 39B
w44-031.in 5KB
w44-037.out 0B
w44-034.in 6KB
w44-032.in 5KB
w44-030.in 4KB
w44-013.in 660B
w44-014.in 794B
w44-027.out 115B
w44-019.out 79B
w44-028.in 4KB
w44-021.out 88B
w44-015.out 60B
w44-019.in 2KB
w44-013.out 51B
w44-029.out 124B
w44-034.out 145B
w44-035.out 0B
w44-016.in 1KB
w44-012.out 47B
w44-033.in 6KB
w44-021.in 2KB
w44-008.in 196B
w44-026.out 110B
w44-038.in 7KB
w44-030.out 129B
w44-017.in 1KB
w44-037.in 7KB
w44-023.in 2KB
w44-015.in 928B
w44-026.in 3KB
w44-024.out 101B
w44-017.out 70B
w44-020.in 2KB
w44-009.in 252B
w44-032.out 137B
w44-012.in 530B
w44-039.out 0B
w44-011.out 43B
w44-018.in 1KB
w44-016.out 65B
w44-010.in 342B
w44-024.in 3KB
w44-025.out 106B
w44-023.out 96B
w44-038.out 0B
w44-011.in 434B
w44-022.out 92B
w44-008.out 30B
w44-035.in 6KB
w44-033.out 141B
w44-039.in 8KB
colouring
01.out 30B
01.in 331B
fsm
even-ones-3.out 54B
even-ones-4.out 69B
even-zeros-3.out 55B
even-ones-4.in 641B
even-zeros-3.in 534B
even-zeros-4.out 69B
even-zeros-4.in 629B
even-ones-3.in 531B
satinstance.py 2KB
fsm.py 541B
test_driver.py 1KB
solvers
iterative_sat.py 2KB
recursive_sat.py 967B
__init__.py 0B
watchlist.py 2KB
共 91 条
- 1
资源评论
weixin_38743506
- 粉丝: 349
- 资源: 2万+
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功