Dec 2021 – Update to the latest Apache Log4J 

JSR331 v. 2.2.0 updated all included solvers and JSR331 core software to work with the latest Apache Log4J to mitigate the security vulnerability discovered in Dec-2021.

Sep 2020 – New Implementations 

JSR331 v. 2.1.0 includes a new implementation of the linear solver “JSR331 CLP“. It’s based on the COIN CLP release 1.16.10 and uses a linear programming library “clp-java” developed by Dr. Nils Loehndorf from Quantego. This library allowed JSR331 to use CLP directly from Maven without any additional installation of the COIN CLP itself. However, CLP handles only real variables but not MIP.

JSR-331 v.2.0.4 includes a new implementation of the constraint solver “JSR331 JSetL“. It’s based on the latest release v. 3.0 of Java constraint programming library “JSetl” developed by the University of Parma (Italy)

A new open source product Rule Solver uses JSR331 as a foundation for optimization decision models.

All JSR331 projects have been added to the Maven and GitHub repositories.

April 2020 – JSR331 in GitHub and MVN Repositories

JSR-331 has been 100% mavenized and moved to the public GibHub repository. You may download all included projects with all sources right from here.

JSR331 Scheduler, a special Java API for scheduling and resource allocation problems has been added – see its description in Java Solver.

A new JSR331 constraint solver implementation “JSR331 Sugar” has been added. It utilizes Sugar 2.1.3, a SAT-based Constraint Solver.

JSR-331 has been also deployed to the public MVN Repository. It means now you can easily incorporate JSR-331 into your own Maven projects by simply adding JSR-331 dependencies. JavaSolver provides a good example of how it can be done – just take a look at its pom.xml file.

May 13, 2019 – Java Solver

Java Solver is a very simple Java API for modeling and solving optimization problems built on the top of JSR-331. The objective is to make it as simple as possible for any Java developer to add optimization components to their applications. Read the announcement.

December 2018 – DMCommunity Challenges

See how JSR-331 was used to address the following DMCommunity Challenges:

October 24, 2016 – Cable Operation Scheduler

JSR-331 became a foundation for a Cable Operation Scheduler built for a major Japanese telecom corporation. The scheduler deals with hundreds of various operations that need to be scheduled as soon as possible subject to various precedence and exclusivity constraints. We utilized the scheduling package “javax.constraints.scheduler” built on the top of JSR-331 and that is included in the standard JSR-331 installation. For the performance reasons we added a custom constraint “Operations should not overlap unless a special constraint states otherwise”. Now an instance of the class Schedule may post the proper constraint using the method “postAllDiff(Activity[] activities)” that is much more efficient to compare with the use of a ResourceDisjunctive.

July 15, 2016 – Retail Price Optimization

JSR-331 was effectively used to model and solve a complex integrated machine learning and optimization problem  for Retail Price Optimization. You may read more about the problem at this presentation. As we tried to build different models for the problem, we took advantage of the key JSR-331 feature: an ability to switch between different underlying solvers! Our initial model relied on the underlying constraint solver – it allowed us to catch the errors in the input data and in the model itself.  When the size of the problem was increased almost 100 times, we had to linearize the initial optimization model and switch to linear solvers. We tried 4 different linear solvers without changing a character in the model itself by just changing required jar-files in the project classpath. We found an open source solver that in our case produced optimal results an order of magnitude faster than other tried linear solvers. In this case the winner was the SCIP solver, but it is quite possible that other solvers will do better for different optimization models.

December 10, 2015. JSR331 Maintenance Release 1.2.2

Improvements in the JSR-331 API

May 2014. JSR331 Maintenance Release 1.2.1

Support for Defeasible Logic and Constraints with Probabilities

November 12, 2013. JSR331 Maintenance Release 1.2.0

This release includes a vertical package “Scheduler” that allows a user to model and solve scheduling and resource allocation

October 16, 2012. JSR331 Maintenance Release 1.1.0

      • This release includes 7 implementations based on commercial and open source Linear Solvers
      • More advanced search for optimal solutions with an ability to limit time for search of one solution and for the entire optimization process
      • The use of dynamic lists of constrained integer variables.

March 7, 2012. JSR331 Final Release 1.0.0

January 24, 2012

The final JSR-331 Proposal including TCK, 3 implementations, and all related documentation delivered to JCP for the Final Approval Ballot.

August 19, 2011. JSR331 Final Draft

The Proposed Final Draft of the JSR-331 has been submitted to the JCP

October 1, 2010

A new version of the JSR-331 Specification v.0.7.1 is available for free downloads with 3 initial implementations (Constrainer, Choco, JaCoP)

September 22, 2010. JavaOne Award

Java Community Process ( awarded JSR-331 with “The Most Innovative JSR of 2010” award.

July 30, 2010. JSR331 Initial Implementations

    • A new version of the JSR-331 Specification v.0.6.1 is available for review – see changes in v.0.6.1.
    • The SVN repository with two initial implementations and Examples and have been updated too. The latest specification and its implementations are available upon requests

March 25, 2010.  JSR331 Early Draft Review

The JSR-331 Early Draft has been made available for public review. The official JSR-331 specification and Javadoc can be downloaded from