Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
aba00c6
feat(optsolvx): add OptSolvXAdapter with model validation and debug l…
xts-Michi Aug 6, 2025
be38d5c
feat(optsolvx): add working demo
xts-Michi Aug 10, 2025
1c63b82
test(optsolvx): add JUnit test for OptSolvXSolverAdapter (build check…
xts-Michi Aug 10, 2025
36e4b99
Updated README with OptSolvX User Guide
xts-Michi Aug 10, 2025
6ac8cc0
test: added more tests
xts-Michi Aug 10, 2025
e72f950
feat: added better error handling and a timer to track the time while…
xts-Michi Aug 10, 2025
c8edbe4
feat: add SBML to OptSolvX bridge skeleton (FbaToOptSolvX)
xts-Michi Aug 19, 2025
ae03792
feat(sbscl): harden OptSolvXSolverAdapter (final + null-check + 1-arg…
xts-Michi Aug 20, 2025
f2afc17
feat(sbscl-bridge): add FbaToOptSolvX to map SBML/FBC (reactions, bou…
xts-Michi Aug 20, 2025
a64d24c
feat(sbscl): add OptSolvX bridge skeleton (FbaToOptSolvX) + smoke/obj…
xts-Michi Aug 20, 2025
6c7e239
docs(README): add “Using OptSolvX” section (demo, debug flag) and not…
xts-Michi Aug 20, 2025
d9bdc0c
feat(fba): switch default LP backend to OptSolvX (FBA only)
xts-Michi Aug 21, 2025
2976e25
build(pom), docs(readme): exclude legacy XML parsers & add troublesho…
xts-Michi Aug 23, 2025
902f796
refactor(fba): remove unused epsilon field and accessors
xts-Michi Aug 25, 2025
d940dbd
perf(sbscl-bridge): cache SBML lists/ids and pre-size maps to avoid r…
xts-Michi Aug 26, 2025
72e3e2c
fix(sbscl): add Commons Math 2.x dependency for legacy ODE API
xts-Michi Aug 26, 2025
84c7303
fix(fba): restore getActiveObjective() for API/test compatibility
xts-Michi Aug 26, 2025
5ea0c98
test(optsolvx): add BridgeConstraintTests for S·v=0 (counts, signs/va…
xts-Michi Aug 26, 2025
774280c
refactor(fba): remove legacy SCPSolver/GLPK backend (NewGLPKSolver + …
xts-Michi Aug 26, 2025
d137a9b
docs(README): Updated a small fix
xts-Michi Aug 27, 2025
08fbb93
style: reformat codebase for consistency (no functional changes)
xts-Michi Aug 29, 2025
a252828
refactor(demo): use OptSolvXConfig for backend resolution; drop hardc…
xts-Michi Aug 29, 2025
6ae1a01
refactor: implemented the solver selection system
xts-Michi Jan 7, 2026
8dfa4c0
cleanup: remove unnecessary temporal test class
xts-Michi Jan 7, 2026
f3372ed
test: validate OptSolvX backend selection in bridge test
xts-Michi Jan 7, 2026
a62e8c1
cleanup: remove some temporary lines
xts-Michi Jan 7, 2026
525c51b
feat(fba): log resolved OptSolvX backend and update solve() docs
xts-Michi Jan 7, 2026
a756d18
corrected readme and added a new test class
xts-Michi Jan 7, 2026
c892232
docs: changed a error in readme
xts-Michi Jan 7, 2026
24fe301
docs: update README and optsolvx Maven profile in pom.xml
xts-Michi Jan 7, 2026
7bd9345
Merge branch 'master' into feat/optsolvx-default
draeger Apr 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
56 changes: 56 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,57 @@ Further examples can be found directly within this repository in the [Examples P
* How to run a [stochastic simulation](https://github.com/draeger-lab/SBSCL/blob/master/src/main/java/fern/Start.java)


## Using OptSolvX (LP) in SBSCL

SBSCL integrates the OptSolvX linear programming abstraction layer [OptSolvX Repo](https://github.com/draeger-lab/OptSolvX).

### OptSolvX dependency (temporary)

OptSolvX is not yet available on Maven Central and must be installed locally.

To build SBSCL with OptSolvX support:
1. Build OptSolvX locally in the **OptSolvX repo**:
```bash
mvn -P compat8 -DskipTests clean package
```
2. Activate the profile in the SBSCL repo:
```bash
mvn -DskipTests clean package
```
3. SBSCL resolves `org.optsolvx:optsolvx:0.1.0-SNAPSHOT:jar:jdk8` from the local Maven repository.

### Run the OptSolvX demo

* In your IDE, run: `org.simulator.optsolvx.OptSolvXDemo`.
* The demo builds a tiny LP and solves it via OptSolvX (backend selectable via `-Doptsolvx.solver=commons-math|ojalgo`).
* Make sure the OptSolvX **jdk8** artifact is on the classpath (declared in SBSCL’s `pom.xml`).

*Note:* FBA in SBSCL now uses OptSolvX by default.

### Enable debug logs

Create the adapter with `debug = true`:

```java
LPSolverAdapter backend =
OptSolvXConfig.resolve(lpModel, System.getProperty("optsolvx.solver"));
LPSolverAdapter solver =
new OptSolvXSolverAdapter(backend, true);
```

**Solver selection behavior**

* You can pick a backend via `-Doptsolvx.solver=ojalgo` or env `OPTSOLVX_SOLVER=ojalgo`.
* If an explicit solver name is provided and unknown, OptSolvX fails fast with an
`IllegalArgumentException`.
* If no solver is specified, `commons-math` is used as the default backend.

#### SBML/FBC → LP bridge (initial)

`FbaToOptSolvX` implements a minimal SBML/FBC → LP mapping used by FBA.
Advanced SBML features are intentionally out of scope.


### Comparison to Similar Libraries

To compare SBSCL to other simulation engines and to benchmark its predictions and results, a separate project, [SBSCL simulator comparison](https://github.com/matthiaskoenig/sbscl-simulator-comparison), is available.
Expand Down Expand Up @@ -117,6 +168,11 @@ The package structure in more detail:

Please e-mail any bugs, problems, suggestions, or issues regarding this library to the bug tracker at https://github.com/draeger-lab/SBSCL/issues

### Note on XML parsers (JDK ≥ 17)

SBSCL excludes legacy `xercesImpl`, `xml-apis`, and `xalan` (pulled transitively by `jlibsedml`) to avoid JAXP compatibility issues on modern JDKs (e.g., an `AbstractMethodError` during Log4j2 XML configuration).
If you rely on specific Xerces/Xalan features, please open an issue so we can provide an opt-in solution

## Licensing terms

This file is part of Simulation Core Library, a Java-based library for efficient numerical simulation of biological models.
Expand Down
67 changes: 48 additions & 19 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -458,20 +458,44 @@
</exclusion>
</exclusions>
</dependency>

<!--
Exclude legacy XML parser stack for compatibility with modern JDKs.
Reason: xercesImpl/xml-apis/xalan can shadow the JDK's JAXP on JDK 17/22
and trigger AbstractMethodError during Log4j2 XML configuration.
If anyone needs explicit Xerces/Xalan features, please open an issue.
(See SBSCL issue #91)
-->
<dependency>
<groupId>org.jlibsedml</groupId>
<artifactId>jlibsedml</artifactId>
<version>2.2.3</version>
<exclusions>
<exclusion>
<groupId>xerces</groupId>
<artifactId>xercesImpl</artifactId>
</exclusion>
<exclusion>
<groupId>xml-apis</groupId>
<artifactId>xml-apis</artifactId>
</exclusion>
<exclusion>
<groupId>xalan</groupId>
<artifactId>xalan</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-math</artifactId>
<version>2.2</version>
<artifactId>commons-lang3</artifactId>
<version>3.18.0</version>
</dependency>

<!-- Commons Math 2.x (ODE API used under org.apache.commons.math.ode.*) -->
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.18.0</version>
<artifactId>commons-math</artifactId>
<version>2.2</version>
</dependency>

<dependency>
Expand All @@ -486,26 +510,12 @@
</dependency>

<!-- LP solvers -->
<dependency>
<groupId>scpsolver</groupId>
<artifactId>SCPSolver</artifactId>
<version>1.0v2</version>
</dependency>
<dependency>
<groupId>scpsolver</groupId>
<artifactId>GLPKSolverPack</artifactId>
<version>4.35v2</version>
</dependency>
<dependency>
<groupId>scpsolver</groupId>
<artifactId>LPSOLVESolverPack</artifactId>
<version>5.5.2.5</version>
</dependency>
<dependency>
<groupId>kisao</groupId>
<artifactId>libkisao</artifactId>
<version>1.0.3.1-rc</version>
</dependency>

<!-- OMEX archive -->
<dependency>
<groupId>de.uni-rostock.sbi</groupId>
Expand All @@ -518,6 +528,14 @@
</exclusion>
</exclusions>
</dependency>

<!-- OptSolvX -->
<dependency>
<groupId>org.optsolvx</groupId>
<artifactId>optsolvx</artifactId>
<version>0.1.0-SNAPSHOT</version>
<classifier>jdk8</classifier>
</dependency>
Comment thread
xts-Michi marked this conversation as resolved.
</dependencies>


Expand Down Expand Up @@ -796,6 +814,17 @@
<javadoc.opts>-Xdoclint:none</javadoc.opts>
</properties>
</profile>

<!-- Local OptSolvX call -->
<profile>
<id>local-optsolvx</id>
<repositories>
<repository>
<id>local-optsolvx</id>
<url>file:${project.basedir}/lib/maven</url>
</repository>
</repositories>
</profile>
</profiles>

<!-- =================================================================== -->
Expand Down
Binary file not shown.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

14 changes: 0 additions & 14 deletions src/lib/maven/scpsolver/GLPKSolverPack/maven-metadata-local.xml

This file was deleted.

This file was deleted.

This file was deleted.

Binary file not shown.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

This file was deleted.

12 changes: 0 additions & 12 deletions src/lib/maven/scpsolver/LPSOLVESolverPack/maven-metadata-local.xml

This file was deleted.

This file was deleted.

This file was deleted.

Binary file not shown.

This file was deleted.

This file was deleted.

9 changes: 0 additions & 9 deletions src/lib/maven/scpsolver/SCPSolver/1.0v2/SCPSolver-1.0v2.pom

This file was deleted.

This file was deleted.

This file was deleted.

14 changes: 0 additions & 14 deletions src/lib/maven/scpsolver/SCPSolver/maven-metadata-local.xml

This file was deleted.

This file was deleted.

This file was deleted.

3 changes: 0 additions & 3 deletions src/lib/register_maven_jars.sh
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,4 @@
LIB_DIR=$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )

# register
mvn org.apache.maven.plugins:maven-install-plugin:2.5.2:install-file -DgroupId=scpsolver -DartifactId=SCPSolver -Dversion=1.0v2 -Dfile=nmi/scpsolver/1.0/SCPSolver-1.0v2.jar -DlocalRepositoryPath=${LIB_DIR}/maven -Dpackaging=jar -DgeneratePom=true -DcreateChecksum=true
mvn org.apache.maven.plugins:maven-install-plugin:2.5.2:install-file -DgroupId=scpsolver -DartifactId=GLPKSolverPack -Dversion=4.35v2 -Dfile=nmi/scpsolver/1.0/GLPKSolverPack-4.35v2.jar -DlocalRepositoryPath=${LIB_DIR}/maven -Dpackaging=jar -DgeneratePom=true -DcreateChecksum=true
mvn org.apache.maven.plugins:maven-install-plugin:2.5.2:install-file -DgroupId=scpsolver -DartifactId=LPSOLVESolverPack -Dversion=5.5.2.5 -Dfile=nmi/scpsolver/1.0/LPSOLVESolverPack-5.5.2.5.jar -DlocalRepositoryPath=${LIB_DIR}/maven -Dpackaging=jar -DgeneratePom=true -DcreateChecksum=true
mvn org.apache.maven.plugins:maven-install-plugin:2.5.2:install-file -DgroupId=kisao -DartifactId=libkisao -Dversion=1.0.3.1-rc -Dfile=kisao/LibKiSAO/1.0.3.1/libkisao-1.0.3.1-rc.jar -DlocalRepositoryPath=${LIB_DIR}/maven -Dpackaging=jar -DgeneratePom=true -DcreateChecksum=true
Binary file not shown.
Binary file not shown.
Binary file removed src/lib/sbml_test_runner_wrapper/SCPSolver-1.0v2.jar
Binary file not shown.
Loading