[JAVA] Comment utiliser la bibliothèque JDD dans Scala avec Eclipse

Introduction In this post, I will show you how to use the jdd Java library with Scala in Eclipse Neon 3 IDE a Java BDD library.

Requirements

How to use it in Scala In this part, I will show you how to use the JDD library in Scala to get all solutions of SAT formula or just one. You have first to import the library :

import jdd.bdd.BDD

Initialization You need to initialize a BDD object by specify the size of initial node table and cache. We will use the values 1000 for the both parameters :

val bdd: BDD = new BDD(1000,1000)

Create variables After the BDD object is created, you can define some BDD variables like this :

val v1: Int = bdd.createVar()
val v2: Int = bdd.createVar()

Specify formula Finally, you can specify the formula you want to solve, just by calling the BDD operations :

val and: Int = bdd.and(v1,v2);
val or: Int = bdd.or(v1,v2)
val not: Int = bdd.not(v1)

Get one solution of SAT formula Now, if you want to get one solution from a formula, call the method oneSat from a BDD object with the reference of the formula and an array of size of the number of result of your formula, here it will be 2 :

val oneSolution: Array[Int] = bdd.oneSat(and, new Array(2))
oneSolution.map(f=>print(f))

// Result
11

Get all solutions of SAT formula If you want to get all solution from a formula, call the method printSet from a BDD object :

bdd.printSet(or)

// Result
01
1-

You can notice the result is "simplified", in fact the result you was maybe expecting would be something like that (see below) but the BDD library simplified the result with a "-" when it's possible :

01
10
11

By the way, the method printSet doesn't return anything so if you want to get the result, you have to redirect the output stream, like this :

val baos = new ByteArrayOutputStream(); // Create a stream to hold the output
val ps = new PrintStream(baos); 
val old = System.out;            // Store the current output stream
System.setOut(ps);               // Redefine the output stream 
bdd.printSet(or)                 // Call the method with the print statement
System.out.flush();              // Flush the print statement into the PrintStream ps
System.setOut(old);              // Restore the previous state of the output stream

for (line <- baos.toString().split("\n")) // Get the result line by line
{
   println(line)
}

// Result
01
1-

Sources Eclipse Neon, Scala IDE JDD Bitbucket Method to redirect the output stream

Also if you want to use different BDD library for different language like C, Python or an other language ; I recommend you to visit this web page which list some BDD libraries.

Recommended Posts

Comment utiliser la bibliothèque JDD dans Scala avec Eclipse
Comment utiliser Eclipse Debug_Shell
Comment basculer Tomcat context.xml avec Eclipse WTP
Comment utiliser Lombok au printemps
Comment utiliser mssql-tools avec Alpine
Comment utiliser InjectorHolder dans OpenAM
Comment utiliser les classes en Java?
Comment définir Lombok dans Eclipse
Un mémorandum sur l'utilisation d'Eclipse
Prise en charge multilingue de Java Comment utiliser les paramètres régionaux
Comment utiliser Apache Derby sur Eclipse
Comment utiliser le volume nommé dans docker-compose.yml
Comment utiliser BootStrap avec Play Framework
Comment inclure Spring Tool dans Eclipse 4.6.3?
Je souhaite utiliser DBViewer avec Eclipse 2018-12! !!
Comment utiliser Docker dans VSCode DevContainer
Comment utiliser MySQL dans le didacticiel Rails
Comment utiliser les variables d'environnement dans RubyOnRails
Comment publier une bibliothèque dans jCenter
Comprendre en 5 minutes !! Comment utiliser Docker
Comment utiliser credentials.yml.enc introduit à partir de Rails 5.2
[Pour les débutants] Comment déboguer avec Eclipse
Comment utiliser ExpandableListView dans Android Studio
[Java FX] Comment écrire des autorisations Eclipse dans build.gradle
Comment colorer la sortie de la console de code dans Eclipse
Comment utiliser MyBatis2 (iBatis) avec Spring Boot 1.4 (Spring 4)
[Rails] Comment utiliser les boîtes de sélection dans Ransack
Comment utiliser h2db intégré avec Spring Boot
Comment utiliser le framework Java avec AWS Lambda! ??
Comment utiliser l'API Java avec des expressions lambda
Comment utiliser JQuery dans Rails 6 js.erb
Comment utiliser le protocole NFS version 2 avec Ubuntu 18.04
[Rails] Comment utiliser PostgreSQL dans l'environnement Vagrant
Comment générer automatiquement un constructeur dans Eclipse
Comment utiliser Map
Comment utiliser rbenv
Comment utiliser with_option
Comment utiliser fields_for
Comment utiliser java.util.logging
Comment utiliser la carte
Comment utiliser collection_select
Pour déboguer avec Eclipse
Comment utiliser Twitter4J
Comment utiliser active_hash! !!
Comment utiliser MapStruct
Comment utiliser TreeSet
[Comment utiliser l'étiquette]
Comment utiliser l'identité
Comment utiliser le hachage
Utiliser PostgreSQL dans Scala
Comment utiliser Dozer.mapper
Comment utiliser Gradle
Comment utiliser org.immutables