quick start
Note: This Quick Start is a little out of date, but good enough for now.
BUILDING UBCSAT
If you are using linux or Microsoft Windows on an Intel machine, you don't have to build the software; the binaries are provided and named ubcsat and ubcsat.exe, respectively.
If you are building on another platform, the Makefile provided should be sufficient. Please email us at ubcsat@googlegroups.com if you have any trouble at all building the software.
RUNNING UBCSAT FOR THE FIRST TIME
If you run ubcsat for the first time, you will see a message similar to:
> ubcsat
UBCSAT version 1.1.0
GENERAL HELP
============
UBCSAT is a collection of Stochastic Local Search (SLS) algorithms for solving
Satisfiability (SAT) instances, and a tool for analyzing the behaviour of those
SLS algorithms with numerous reports and statistics.
UBCSAT always requires two key command-line parameters:
1) an algorithm to use, specified with the [-alg] parameter, and
2) a SAT instance file to solve, specified with [-i] parameter
For example, to use the SAPS algorithm to solve the instance file sample.cnf
>ubcsat -alg saps -i sample.cnf
If your primary goal is to find a solution, use the [-solve] parameter
>ubcsat -alg saps -i sample.cnf -solve
To analyze the behaviour of an SLS algorithm, you must run it several times.
To run the same algorithm 100 times with a maximum of a million steps per run:
>ubcsat -alg saps -i sample.cnf -runs 100 -cutoff 1000000
For additional help, consult one of the following:
ubcsat -hp list all of the [p]arameters
ubcsat -ha list the available [a]lgorithms
ubcsat -hw list the available [w]eighted algorithms
ubcsat -hr list the available [r]eports
ubcsat -hc For help with the [c]olumns of the default output report
ubcsat -hs For help with the [s]tatistics report
UBCSAT itself is not a SAT solving algorithm, but rather a collection of algorithms.
You must specify which algorithm you wish to use with the -alg parameter.
For now, you can choose the GSAT algorithm, which is one of the most famous Stochastic Local Search (SLS) algorithms for SAT.
> ubcsat -alg gsat
#
# UBCSAT version 1.1.0
#
# ubcsat -h for help
#
# no -inst file specified: reading instance from console (stdin)
# -- e.g.: ubcsat < myfile.cnf
#
So now ubcsat knows what algorithm to use, but it doesn't have a SAT problem to solve. You can either specify the file with the -inst parameter, or use redirection (<) as suggested by the output above. UBCSAT reads SAT instances in the DIMACS (.cnf) file format. We have provided a sample.cnf file for you.
Because we didn't specify an -inst file, ubcsat is trying to read the instance from the standard input (your keyboard :) -- Press Ctrl-C to cancel the program, and then type
> ubcsat -alg gsat -inst sample.cnf
Congratulations! You've run ubcsat. You'll be shown a lot of output (which will be explained in a later section)
SOLVING AN INSTANCE
Quite often you only need to solve a problem once, and after you've solved it, you'll want to know the solution. To have ubcsat show you a solution (or model) use the -solve parameter. Try using the same parameters as above and the -solve parameter:
> ubcsat -alg gsat -inst sample.cnf -solve
....
# No Solution found for -target 0
You'll most likely get an output statement (at the end) saying it couldn't find a solution. The -target parameter it refers to specifies the target solution quality, or the target number of unsatisfied (false) clauses. The default (0) means the instance is completely satisfied -- which is usually what you desire. Try again with a target of 10:
> ubcsat -alg gsat -inst sample.cnf -solve -target 10
...
# Solution found for -target 10
-1 -2 3 -4 5 6 7 8 -9 -10
11 12 -13 -14 -15 16 17 -18 -19 -20
...
It will easily find a solution that has 10 clauses unsatisfied. The output produced shows you the model for the solution. In this case, it would be: x1 = F; x2 = F; x3 = T; x4 = F; etc...
But you're usually looking for a solution with no unsatisfied clauses. A better approach might be to run the algorithm more than once. To do this, use the -runs parameter. If you run the GSAT algorithm 100 times, it will most likely find a solution:
> ubcsat -alg gsat -inst sample.cnf -solve -runs 100
...
Solution found for -target 0
...
Although the GSAT algorithm is famous, for many SAT problems it does not perform very well. We suggest you try -alg novelty+ or -alg saps instead of GSAT if you wish to find a solution faster.
> ubcsat -alg novelty+ -inst sample.cnf -solve
> ubcsat -alg saps -inst sample.cnf -solve
EXAMINING THE OUTPUT OF UBCSAT
If you want to analyse the behaviour of an SLS algorithm on a problem instance, you have to run the algorithm many times on the same instance. Try running -alg novelty+ -runs 100 on the sample instance:
> ubcsat -alg novelty+ -inst sample.cnf -runs 100
We will now look at the output and see what information ubcsat has provided:
Note: The outputs may look different on your screen for two reasons: 1) Cosmetic changes to ubcsat may have occurred and 2) This is a stochastic process, and so the search steps and other statistics will be different
First, we have the ubcsat header:
#
# UBCSAT version 1.1.0
#
# ubcsat -h for help
#
Followed by the ubcsat parameters used. Note that for unspecified parameters (for example, -cutoff) the default values are shown.
#
# -alg novelty+
# -runs 100
# -cutoff 100000
# -timeout 0
# -gtimeout 0
# -noimprove 0
# -target 0
# -wtarget 0
# -seed 794239013
# -solve 0
# -find,-numsol 0
# -findunique 0
# -srestart 0
# -prestart 0
# -drestart 0
#
# -novnoise 0.5
# -wp 0.01
After the parameters, we have the "output" report. There are actually several different reports in ubcsat (-hr to see a list). For this output report, we are shown the columns used in this report, with a description of each column:
#
# UBCSAT default output:
# 'ubcsat -r out null' to suppress, 'ubcsat -hc' for customization help
#
#
# Output Columns: |run|found|best|beststep|steps|
#
# run: Run Number
# found: Target Solution Quality Found? (1 => yes)
# best: Best (Lowest) # of False Clauses Found
# beststep: Step of Best (Lowest) # of False Clauses Found
# steps: Total Number of Search Steps
Followed by some column headers:
# F Best Step Total
# Run N Sol'n of Search
# No. D Found Best Steps
#
And then finally the actual output from ubcsat, which shows the results from each run (in this case, numbered 1..100).
1 1 0 9672 9672
...
100 1 0 16798 16798
That is the end of the output report (-r out).
The output report is immediately followed by the statistics report (-r stats):
Variables = 250
Clauses = 1065
TotalLiterals = 3195
TotalCPUTimeElapsed = 2.278
FlipsPerSecond = 846740
RunsExecuted = 100
SuccessfulRuns = 99
PercentSuccess = 99.00
Steps_Mean = 19288.74
Steps_CoeffVariance = 0.99652183317
Steps_Median = 12524.5
CPUTime_Mean = 0.0227800011635
CPUTime_CoeffVariance = 0.99652183317
CPUTime_Median = 0.0147914339958
You'll note that the percent success for these runs was only 99%. In practice, if you are going to be reporting results, you should ensure that 100% of your runs are successful by increasing the -cutoff parameter (which determines the maximum number of search steps allowed per run).
CUSTOMIZING THE OUTPUT OF UBCSAT
The columns that are provided in the output and the statistics generated can be customised: use the -hc (help columns) and -hs (help statistics) parameters respectively.
If you prefer to redirect the output to files, you can specify the output file with the (-r out filename) and you can redirect the statistics to a file with the (-r stats filename) parameter. To prevent them from being calculated (and make the execution slightly faster) use -r out null -r stats null.
For perspective, the default ubcsat parameters are:
-r out stdout run,found,best,beststep,steps
-r stats stdout numvars,numclauses,numlits,totaltime,fps,runs,percentsolve,steps[mean+cv+median],timesteps[mean+cv+median]
AND BEYOND...
Hopefully you've gotten your feet wet enough that you can start exploring ubcsat on your own. Feel free to e-mail us with your questions, and subscribe to the newsgroup to receive product updates.