Fun-sCOP
- Joint work by Takehide Soh, Daniel Le Berre, Mutsunori Banbara, and Naoyuki Tamura.
- Fun-sCOP won several prises in recent XCSP3 competitions.
- 2023 Main CSP🥈
- 2022 Main CSP🥈
- 2019 Main CSP🥈
- 2018 Main CSP🥇 Parallel CSP🥇
Overview
- Fun-sCOP is a Sat-based COnstraint Programming system written in Scala 2.12.
- Fun-sCOP aims to be a re-implementation of Sugar (Tamura et al.)
written in Java. Many things are imported from Sugar (software
design, normalization, and encoding). Currently, main differences
are as follows:
- XCSP3 instances is accepted as input in Fun-sCOP.
- Hybrid Encoding integrating the order and log encoding is used in Fun-sCOP.
- It works as follows:
- encode a XCSP3 file into a DIMACS CNF file.
- launch a SAT solver to solve the encoded CNF file.
- the output of the SAT solver is decoded to the solution of the XCSP3 instance.
Reference
- Fun-sCOP: SAT-based Constraint Programming System.
- Takehide Soh, Daniel Le Berre, Mutsunori Banbara, Naoyuki Tamura.
- In Proceedings of XCSP3 Competition 2018, 93--94, 2018. http://www.cril.univ-artois.fr/XCSP18/files/XCSP3_2018_Proceedings.pdf
Download
Setting for XCSP3 competitions
-
This Fun-sCOP solver will enter the main CSP track (sequential) with 2 solver configurations.
- 1st one uses a SAT solver "kissat"
- 2nd one uses a SAT solver "GlueMiniSat 2.2.10 193 Order Encoding Adapted Version"
-
Notations in the following
NAME | Description |
---|---|
DIR | It stands for the directory where you place scop |
TMPDIR | It is the directory where the solver is allowed to create temprary files |
BENCHNAME | It stands for the name of the instance file (with its extension) |
- License
- see LICENSE.txt
Requirements for Fun-sCOP
- Java 8
- SAT Solvers and their requirements
How to install SAT solvers
You can use install-sat-solvers.sh. Or please read the following instructions.
- (for Sequential CSP 1) Kissat
- (URL) https://github.com/arminbiere/kissat
- Final products we need is the executable
build/kissat
- Its installation command is as follows:
- Please install it by
./configure && make
cd DIR/kissat
./configure && make
- (for Sequential CSP 2) GlueMiniSat 2.2.10 193 Order Encoding Adapted Version
- Final products we need is the executable
simp/glueminisat-simp-2.2.10-193oa-n-release
- Its installation command is as follows:
- Final products we need is the executable
cd DIR/glueminisat-2.2.10-193oa-n/simp/
make clean
make r
- lzma (os command)
- we assume an OS command 'lzma' is available for decomposing
*.xml.lzma instances.
- lzma is called from Fun-sCOP.
- If there is no 'lzma' then simply give *.xml to Fun-sCOP.
- we assume an OS command 'lzma' is available for decomposing
*.xml.lzma instances.
How to run
- (NOTE) Fun-sCOP performs better the larger the memory.
-
We here assume 32GB can be allocated to JVM. But larger heap size is better if possible.
- assume that the following command is executed in the 'scop-for-xcsp23' directory.
- (Sequential CSP 1) using Kissat
DIR/scop.sh 11g DIR/scop.jar -hybrid DIR/kissat/build/kissat default TMPDIR BENCHNAME
- (Sequential CSP 2) using GlueMiniSat with -order option
DIR/scop.sh 11g DIR/scop.jar -order DIR/glueminisat-2.2.10-193oa-n/simp/glueminisat-simp-2.2.10-193oa-n-release -model:-verb=3:-elim-cl=5000000:-native-oa TMPDIR BENCHNAME
-
Example (please refer http://xcsp.org/series for example XCSP3 instances)
- We here assume 32GB can be allocated to JVM. But larger heap size is better if possible.
- assume that the following command is executed in the 'scop-for-xcsp23' directory.
./scop.sh 11g scop.jar -hybrid kissat/build/kissat default /tmp examples/AllInterval-007.xml
Contact
- please e-mail to Takehide Soh
Links for Related Tool
- Scarab
- a very light weight SAT-based CP system
- Sat4j
- SAT solver in Java.
- Sugar
- SAT-based CSP Solver using order encoding.
- Copris
- Copris is a constraint programming DSL embedded in Scala. It is also developed by our team!
- NACRE
- NACRE (Nogood And Clause Reasoning Engine) is a constraint solver written in C++.
- Numberjack
- Constraint Programming System in Python
- OscaR
- OR in Scala
- JaCoP
- Constraint programming in Java and Scala
- Choco
- Constraint programming in Java
- JSR 331
- Java Specification Requests: Constraint Programming API
- Picat
- BEE
- meSAT