Skip to content
Open
Show file tree
Hide file tree
Changes from 1 commit
Commits
Show all changes
22 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
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
7 changes: 7 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -471,6 +471,13 @@
</exclusion>
</exclusions>
</dependency>

<!-- OptSolvX -->
<dependency>
<groupId>org.optsolvx</groupId>
<artifactId>optsolvx</artifactId>
<version>0.1.0-SNAPSHOT</version>
</dependency>
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Please place a local lib file of OptSolvX and use a local dependency for the time being, until we have it in MavenCentral.

</dependencies>


Expand Down
7 changes: 7 additions & 0 deletions src/main/java/org/simulator/optsolvx/OptSolvXDemo.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
package org.simulator.optsolvx;

public class OptSolvXDemo {
public static void main(String[] args) {

}
}
55 changes: 55 additions & 0 deletions src/main/java/org/simulator/optsolvx/OptSolvXSolverAdapter.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package org.simulator.optsolvx;

import org.optsolvx.model.AbstractLPModel;
import org.optsolvx.solver.LPSolution;
import org.optsolvx.solver.LPSolverAdapter;

import java.text.MessageFormat;
import java.util.logging.Logger;

public class OptSolvXSolverAdapter implements LPSolverAdapter {
private static final Logger LOGGER =
Logger.getLogger(OptSolvXSolverAdapter.class.getName());

private final LPSolverAdapter backend;
private final boolean debug;

/**
* @param backend concrete OptSolvX solver (e.g. CommonsMathSolver)
* @param debug enable verbose logging
*/
public OptSolvXSolverAdapter(LPSolverAdapter backend, boolean debug) {
this.backend = backend;
this.debug = debug;
}

@Override
public LPSolution solve(AbstractLPModel model) {
if (!model.isBuilt()) {
throw new IllegalStateException("Model must be built() before solving.");
}

if (debug) {
LOGGER.info(MessageFormat.format(
"{0}: solving with {1} (vars={2}, cons={3})",
getClass().getSimpleName(),
backend.getClass().getSimpleName(),
model.getVariables().size(),
model.getConstraints().size()
));
}

LPSolution sol = backend.solve(model);

if (debug) {
LOGGER.info(MessageFormat.format(
"{0}: result feasible={1}, objective={2}",
getClass().getSimpleName(),
sol.isFeasible(),
sol.getObjectiveValue()
));
}

return sol;
}
}