<?xml version="1.0" encoding="UTF-8" ?><OAI-PMH xmlns="http://www.openarchives.org/OAI/2.0/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.openarchives.org/OAI/2.0/ http://www.openarchives.org/OAI/2.0/OAI-PMH.xsd"><responseDate>2026-07-24T06:27:35Z</responseDate><request identifier="10.35097/1331" metadataPrefix="datacite" verb="GetRecord">https://www.radar-service.eu/oai/OAIHandler</request><GetRecord><record><header><identifier>10.35097/1331</identifier><datestamp>2024-07-10T07:54:50Z</datestamp><setSpec>radar4kit</setSpec></header><metadata><resource xmlns="http://datacite.org/schema/kernel-4"
          xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://datacite.org/schema/kernel-4 https://schema.datacite.org/meta/kernel-4.4/metadata.xsd">
   <identifier identifierType="DOI">10.35097/1331</identifier>
   <creators>
      <creator>
         <creatorName>Bach, Jakob</creatorName>
         <givenName>Jakob</givenName>
         <familyName>Bach</familyName>
         <nameIdentifier nameIdentifierScheme="ORCID" schemeURI="http://orcid.org/">0000-0003-0301-2798</nameIdentifier>
         <affiliation>Institut für Programmstrukturen und Datenorganisation (IPD), Karlsruher Institut für Technologie (KIT)</affiliation>
      </creator>
      <creator>
         <creatorName>Iser, Markus</creatorName>
         <givenName>Markus</givenName>
         <familyName>Iser</familyName>
         <affiliation>Institut für Informationssicherheit und Verlässlichkeit (KASTEL), Karlsruher Institut für Technologie (KIT)</affiliation>
      </creator>
   </creators>
   <titles>
      <title>Experimental Data for the Paper "A Comprehensive Study of k-Portfolios of Recent SAT Solvers"</title>
   </titles>
   <publisher>Karlsruhe Institute of Technology</publisher>
   <dates>
      <date dateType="Created">2022</date>
   </dates>
   <publicationYear>2023</publicationYear>
   <subjects>
      <subject>Computer Science</subject>
      <subject>propositional satisfiability</subject>
      <subject>solver portfolios</subject>
      <subject>runtime prediction</subject>
      <subject>machine learning</subject>
      <subject>integer programming</subject>
   </subjects>
   <resourceType resourceTypeGeneral="Dataset"/>
   <rightsList>
      <rights rightsURI="info:eu-repo/semantics/openAccess">Open Access</rights>
      <rights schemeURI="https://spdx.org/licenses/"
              rightsIdentifierScheme="SPDX"
              rightsIdentifier="CC-BY-4.0"
              rightsURI="https://creativecommons.org/licenses/by/4.0/legalcode">Creative Commons Attribution 4.0 International</rights>
   </rightsList>
   <contributors>
      <contributor contributorType="RightsHolder">
         <contributorName>Bach, Jakob</contributorName>
         <nameIdentifier nameIdentifierScheme="ORCID" schemeURI="https://orcid.org/">0000-0003-0301-2798</nameIdentifier>
      </contributor>
      <contributor contributorType="RightsHolder">
         <contributorName>Iser, Markus</contributorName>
      </contributor>
   </contributors>
   <descriptions>
      <description descriptionType="Abstract">These are the experimental data for the paper&#xD;
&#xD;
&gt; Bach, Jakob, Markus Iser, and Klemens Böhm. "A Comprehensive Study of k-Portfolios of Recent SAT Solvers"&#xD;
&#xD;
published at the conference [*SAT 2022*](http://satisfiability.org/SAT22/).&#xD;
You can find the paper [here](https://www.doi.org/10.4230/LIPIcs.SAT.2022.2) and the code [here](https://github.com/Jakob-Bach/Small-Portfolios).&#xD;
See the `README` for details.</description>
      <description descriptionType="TechnicalInfo"># Experimental Data for the Paper "A Comprehensive Study of k-Portfolios of Recent SAT Solvers"&#xD;
&#xD;
These are the experimental data for the paper&#xD;
&#xD;
&gt; Bach, Jakob, Markus Iser, and Klemens Böhm. "A Comprehensive Study of k-Portfolios of Recent SAT Solvers"&#xD;
&#xD;
accepted at the conference [*SAT 2022*](http://satisfiability.org/SAT22/).&#xD;
Check our [GitHub repository](https://github.com/Jakob-Bach/Small-Portfolios) for the code and instructions to reproduce the experiments.&#xD;
The data were obtained on a server with an `AMD EPYC 7551` [CPU](https://www.amd.com/en/products/cpu/amd-epyc-7551) (32 physical cores, base clock of 2.0 GHz) and 128 GB RAM.&#xD;
The Python version was `3.8.10`.&#xD;
With this configuration, the experimental pipeline (`run_experiments.py`) took about 25 h.&#xD;
&#xD;
The commit hash for the last run of the experimental pipeline (`run_experiments.py`) is [`d402353e7f`](https://github.com/Jakob-Bach/Small-Portfolios/tree/d402353e7f5804d3b693c3057f203a2c719c4098).&#xD;
The commit hash for the last run of the evaluation pipeline (`run_evaluation.py`) is [`5ba0468088`](https://github.com/Jakob-Bach/Small-Portfolios/tree/5ba0468088fc0ce0ce3d2f04229946c1df83fa9d).&#xD;
Both commits are also tagged.&#xD;
&#xD;
In the following, we describe:&#xD;
&#xD;
- how to use the experimental data&#xD;
- the structure/content of each data file&#xD;
&#xD;
## Using the Data&#xD;
&#xD;
Most of the experimental pipeline's input and output files are plain CSVs.&#xD;
You can easily read in any of the CSVs with `pandas` if you are using Python:&#xD;
&#xD;
```python&#xD;
import pandas as pd&#xD;
&#xD;
results = pd.read_csv('&lt;path&gt;/search_results.csv')&#xD;
```&#xD;
&#xD;
All CSVs were written with `&lt;DataFrame&gt;.to_csv(&lt;path&gt;, index=False)`, i.e., they follow `pandas`' defaults for CSVs,&#xD;
so it is unnecessary to pass further parameters when reading them in with `pandas`.&#xD;
The CSVs mostly contain plain numbers and strings;&#xD;
the latter are only quoted if necessary, e.g., if they contain commas.&#xD;
However, the column `solvers` in `search_results.csv` contains lists of solver names.&#xD;
You can convert this column from string to proper Python lists as follows:&#xD;
&#xD;
```python&#xD;
import ast&#xD;
&#xD;
search_results['solvers'] = search_results['solvers'].apply(ast.literal_eval)&#xD;
```&#xD;
&#xD;
## `*.db` files and corresponding `*.csv` files&#xD;
&#xD;
Raw instance-feature databases and solver-runtime databases from [GBD](https://gbd.iti.kit.edu),&#xD;
as well as CSV exports of them.&#xD;
Outputs of the script `prepare_dataset.py`.&#xD;
&#xD;
- `meta`:&#xD;
  Meta-data of SAT instances, e.g., in which competition(s) the instances were used.&#xD;
  We only use this information to filter instances for the experimental datasets but not as features for predictions.&#xD;
- `satzilla`:&#xD;
  Instance features obtained with the feature extractor of [*SATzilla 2012*](https://www.cs.ubc.ca/labs/algorithms/Projects/SATzilla/Report_SAT_features.pdf).&#xD;
  Numeric matrix, apart from the `hash` column that identifies instances.&#xD;
  Each row represents a SAT instance; each column represents a feature (column names are feature names).&#xD;
  The value `timeout` represents missing values (feature extractor exceeded time or memory limits).&#xD;
- `sc2020`:&#xD;
  Solver runtimes from the [*SAT Competition 2020*](https://satcompetition.github.io/2020/).&#xD;
  Numeric matrix, apart from the `hash` column that identifies instances.&#xD;
  Each row represents a SAT instance (not all of them are actually from this SAT competition, so we filter instances later);&#xD;
  each column represents a solver (column names are solver names).&#xD;
  The values `failed`, `unknown`, and `timeout` represent missing values (solver did not solve instance within cut-off time).&#xD;
- `sc2021`:&#xD;
  Solver runtimes from the [*SAT Competition 2021*](https://satcompetition.github.io/2021/).&#xD;
  Numeric matrix, apart from the `hash` column that identifies instances.&#xD;
  Each row represents a SAT instance (not all of them are actually from this SAT competition, so we filter instances later);&#xD;
  each column represents a solver (column names are solver names).&#xD;
  The value `timeout` represents missing values (solver did not solve instance within cut-off time).&#xD;
&#xD;
## `sc(2020|2021)_features.csv`&#xD;
&#xD;
Pre-processed instance-feature data for the *Main Track* of the SAT Competitions 2020 and 2021.&#xD;
Output of the script `prepare_dataset.py`; input to the script `run_experiments.py`.&#xD;
Numeric matrix, apart from the `hash` column that identifies instances&#xD;
(we do not have any categorical features; they would need to be encoded beforehand).&#xD;
Each row represents a SAT instance; each column represents a feature (column names are feature names).&#xD;
Has the same number of rows as the corresponding runtime file.&#xD;
The empty string represents missing values caused by the feature extractor exceeding time or memory limits;&#xD;
these missing values are handled (imputed) in the prediction pipeline.&#xD;
&#xD;
## `sc(2020|2021)_runtimes.csv`&#xD;
&#xD;
Pre-processed solver-runtime data from the *Main Track* of the SAT Competitions 2020 and 2021.&#xD;
Output of the script `prepare_dataset.py`; input to the script `run_experiments.py`.&#xD;
Numeric matrix, apart from the `hash` column that identifies instances.&#xD;
Each row represents a SAT instance; each column represents a solver (column names are solver names).&#xD;
Has the same number of rows as the corresponding feature file.&#xD;
Missing values were replaced with the double cut-off time according to PAR-2 scoring (= 10000).&#xD;
&#xD;
## `search_results.csv`&#xD;
&#xD;
Results of portfolio search, e.g., portfolios, train/test objective values, and search times.&#xD;
Output of the script `run_experiments.py`; input to the script `run_evaluation.py`.&#xD;
&#xD;
- `solvers` (string, but actually a list of strings):&#xD;
  List of the names of the solvers forming the portfolio.&#xD;
  The solver names are column names in `sc(2020|2021)_runtimes.csv`.&#xD;
- `train_objective` (float):&#xD;
  Objective value of a solution (= portfolio) to the `K-Portfolio-Problem`,&#xD;
  using the SAT instances from the training data.&#xD;
  The objective is defined as the PAR-2 score of the portfolio's virtual best solver (VBS).&#xD;
- `test_objective` (float):&#xD;
  Objective value of the `K-Portfolio-Problem` for the SAT instances from the test data,&#xD;
  i.e., take the solvers of the portfolio determined on the training data,&#xD;
  and compute their VBS on the test instances (without running portfolio search again).&#xD;
- `(train|test)_portfolio_vws` (float):&#xD;
  PAR-2 score of the virtual worst solver (VWS) formed from the portfolio,&#xD;
  i.e., select the worst (in terms of PAR-2 score) solver from the portfolio for each instance.&#xD;
  Might be used for comparison purposes; we do not use it in our evaluation.&#xD;
  Bounds the objective value for portfolios with instance-specific solver selection.&#xD;
- `(train|test)_portfolio_sbs` (float):&#xD;
  PAR-2 score of the single best solver (SBS) from the portfolio,&#xD;
  i.e., the best individual solver contained in the portfolio.&#xD;
  Might be used for comparison purposes; we use it in Figures 4 and 5 as a baseline.&#xD;
- `(train|test)_portfolio_sws` (float):&#xD;
  PAR-2 score of the single worst solver (SWS) from the portfolio,&#xD;
  i.e., the worst individual solver contained in the portfolio.&#xD;
  Might be used for comparison purposes; we do not use it in our evaluation.&#xD;
- `(train|test)_global_sws` (float):&#xD;
  PAR-2 score of the single worst solver (SWS) from all solvers (independent from current portfolio),&#xD;
  i.e., the globally worst individual solver.&#xD;
  Might be used for comparison purposes; we use it in Figures 1 and 2 for the submodularity-based upper bound.&#xD;
- `search_time` (float):&#xD;
  Runtime (in seconds) of the portfolio search (on the particular dataset and cross-validation fold,&#xD;
  with the particular portfolio-search approach).&#xD;
- `search_id` (int):&#xD;
  Identifier denoting combinations of dataset, cross-validation fold, and portfolio-search approach.&#xD;
  The experimental pipeline parallelizes these tasks.&#xD;
  Each `search_id` might be associated with multiple portfolios;&#xD;
  combining `search_id` and `solution_id` allows joining `search_results` and `prediction_results`.&#xD;
- `solution_id` (int):&#xD;
  Identifier to distinguish between multiple portfolios found with&#xD;
  a particular portfolio-search approach on a particular dataset and cross-validation fold.&#xD;
  Apart from `mip_search` (the *optimal solution*), all search approaches yield multiple portfolios.&#xD;
- `fold_id` (int in `{0, 1, 2, 3, 4}`):&#xD;
  Index of the cross-validation fold.&#xD;
- `problem` (string, 2 different values):&#xD;
  Dataset name (in our experiments: `SC2020` or `SC2021`).&#xD;
- `algorithm` (string, 4 different values):&#xD;
  Search approach used to determine portfolios&#xD;
  (in our experiments: `beam_search`, `kbest_search`, `mip_search`, or `random_search`).&#xD;
- `k` (int in `[1, 48]`):&#xD;
  Desired number of solvers in the portfolio, an input parameter to portfolio search.&#xD;
  The actual number of solvers in column `solvers` might differ,&#xD;
  as *beam search* and *k-best* are only run with the maximal `k` for each dataset,&#xD;
  but also yield all smaller portfolios (intermediate results).&#xD;
- `w` (int in `[1, 100]`, but stored as float):&#xD;
  Beam width if *beam search* was used, or number of random samples if *random search* was used.&#xD;
  Missing value (represented as an empty string) for the other two search approaches.&#xD;
  Input parameter to portfolio search.&#xD;
&#xD;
## `prediction_results.csv`&#xD;
&#xD;
Results of predictions with portfolios, e.g., train/test prediction performance, train/test objective values, and feature importance.&#xD;
Output of the script `run_experiments.py`; input to the script `run_evaluation.py`.&#xD;
&#xD;
- `model` (string, 2 different values):&#xD;
  Name of the prediction model (in our experiments: `Random Forest` and `XGBoost`).&#xD;
  Each prediction model is trained for each portfolio from the search&#xD;
  (thus, `prediction_results` has twice the number of rows as `search_results`).&#xD;
- `pred_time` (float):&#xD;
  Runtime (in seconds) for training the prediction model (for one portfolio) on the training data,&#xD;
  and making predictions on training data as well as test data.&#xD;
- `(train|test)_pred_mcc` (float in `[-1, 1]`):&#xD;
  Prediction performance in terms of Matthews Correlation Coefficient for predicting&#xD;
  the best solver from the portfolio for each instance.&#xD;
- `(train|test)_pred_objective` (float):&#xD;
  PAR-2 score of the (instance-specific) solver recommendations made by the prediction model.&#xD;
- `imp.&lt;feature_name&gt;` (float in `[0, 1]`):&#xD;
  Feature importances extracted from the prediction model after training.&#xD;
  Importances are normalized and should sum up to one for each row. &#xD;
  Missing values (represented as empty strings) occur if no prediction model was trained&#xD;
  since the prediction target only had one class, e.g.,&#xD;
  portfolio had size one or always the same solver (out of multiple solvers) was best.&#xD;
- `search_id` (int), `solution_id` (int):&#xD;
  Same as in `search_results.csv`, can be used for joining the results.&#xD;
&#xD;
## `Evaluation_console_output.txt`&#xD;
&#xD;
Output of the script `run_evaluation.py`, manually copied from the console to a file.</description>
   </descriptions>
   <alternateIdentifiers>
      <alternateIdentifier alternateIdentifierType="KITopen-DOI">10.5445/IR/1000146629</alternateIdentifier>
   </alternateIdentifiers>
   <relatedIdentifiers>
      <relatedIdentifier relatedIdentifierType="URL" relationType="IsIdenticalTo">https://publikationen.bibliothek.kit.edu/1000146629</relatedIdentifier>
   </relatedIdentifiers>
   <sizes>
      <size/>
   </sizes>
   <formats>
      <format>application/x-tar</format>
   </formats>
</resource></metadata></record></GetRecord></OAI-PMH>