Added metabolic simplification and replaced lpsolve with HiGHS - #500
Open
DimitriosPavlouGR wants to merge 6 commits into
Open
DimitriosPavlouGR wants to merge 6 commits into
DimitriosPavlouGR wants to merge 6 commits into
Conversation
MetabolicPolytope with sparse equality constraints, BiGG JSON parser, warm_start::simplify (relax redundant bounds, fix degenerate dimensions), tests, benchmark, and PolyRound comparison.
Fixing R related CI issues; align with Rvolesti repository
… in warm_start.hpp.
…lpsolve with HiGHS
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Overview
This PR introduces metabolic polytope preprocessing and replaces the LP oracles from
lpsolvetoHiGHS.The changes can be broken down into two main parts:
lpsolveand moving the lp oracles toHiGHS.The goal is to make metabolic network models smaller and easier to process with VolEsti's existing algorithms, while also providing a more consistent and new LP backend.
Metabolic Polytope Preprocessing
A new preprocessing pipeline has been added for metabolic polytopes obtained from metabolic network models.
This pipeline includes:
The preprocessing related files have been added under
preprocess/metabolic/and is split into separate components for:Simplification Methods
Two simplification approaches have been implemented.
Exhaustive Simplification
The exhaustive approach checks the reactions/bounds individually and determines whether they can be removed while preserving the metabolic polytope. This provides a simple and reliable baseline and is very useful for smaller models, or for preprocessing degenerate polytopes, where numerical accuracy becomes an issue.
Clarkson Simplification
A Clarkson based redundancy removal method has also been implemented. The method maintains a smaller set of relevant constraints and uses a worklist to identify reactions that are pinned or redundant. This avoid repeatedly processing the complete set of constraints and is intended to scale better with larger models.
Simplification Results
Experiments on metabolic models from the BiGG database demonstrate that a significant amount of redundancy can be removed before applying any volume/sampling algorithms.
The following is a table showing the performance of the two methods compared to polyround:
Overall, the Clarkson based approach generally provides a significant reduction in preprocessing time compared to Polyround and the Exhaustive approach, and there is room for further improvements.
LPSolve Removal
The old
lp_solvebackend and its oracle implementations have been removed and replaced with aHiGHSimplementation. The new oracles can be found under the folderlp_oracles/.The following were implemented with HiGHS:
LP Oracle Interface
The LP oracle interface (function signatures) has also been updated.
A common
LPOracleOptionsinterface is now provided for configuring HiGHS. This allows solver options to be configured without exposing the underlying HiGHS objects.The LP oracles also distinguish between:
This makes it possible for callers to distinguish scenarios such as "the point is outside the polytope" from "the LP solver failed".
Code Organization
The relevant headers are organized as follows:
Examples and Tests
Relevant tests and examples are organized as follows:
Examples
Tests