Welcome to the homepage of SMTgazer!
SMTgazer is an effective algorithm scheduling based method for SMT solving. This repository includes the implementation of SMTgazer and the experimental results.
The BMC, SymEx, and SyGuS datasets can be found on Zenodo. The SMT-COMP dataset can be found on StarExec via the SMT-COMP website.
machfea/*_solver.json is the file containing the candidate solvers of each dataset.
machfea/infer_result/ is the folder containing the feature files of each dataset.
data/ is the folder containing the running time of all solvers for each dataset.
Before using SMTgazer, make sure you have installed the requirements and SMAC3.
For the requirements, run:
pip install -r requirements.txt
smac/ is the folder containing the implementations of SMAC3 with a hybrid model. To install SMAC3, run:
python ./smac/setup.py install
If you need to use SMTgazer on your own dataset named "xxx", generate the corresponding json file (data/xxxLabels.json) according to the format of data/*Labels.json and the file containing the candidate solvers like machfea/*_solver.json.
Modify the corresponding dataset name and path in machfea/mach_run_inference.py. Generate the feature files by running:
cd machfea
python mach_run_inference.py
Change line 32 of batchportfolio.py to:
key_set = ["xxx"]
Uncomment the code on line 24 of batchportfolio.py, run:
python batchportfolio.py
The training result will be stored in the folder output/ with the prefix train_result.
Uncomment the code on line 26 of batchportfolio.py, run:
python batchportfolio.py
The testing result will be stored in the folder output/ with the prefix test_result.
output/ is the folder containing the scheduling sequences generated by SMTgazer on the datasets.
To calculate the PAR2 score and the number of unsolved instances for each dataset, run:
python calc_portfolio_result.py