Releases: industrial-optimization-group/DESDEO
Releases · industrial-optimization-group/DESDEO
DESDEO 2.2.2
[2.2.2] - 17.2.2026
Core logic
(No core-logic changes in this release.)
Web API
Added
- Added E-NAUTILUS finalize state and endpoint.
- Added
ENautilusTreeNodeResponse,ENautilusDecisionEventResponse, andENautilusSessionTreeResponsemodels. - Added
GET /method/enautilus/session_tree/{session_id}endpoint returning all nodes, edges, root IDs, and decision events. - Added
DELETE /problem/{id}endpoint for problem deletion. - Added cascade deletes to
ProblemDBrelationships (solutions, preferences, states, constants, variables, objectives, constraints, etc.). - Added
ON DELETE CASCADEto all 15 substate foreign key definitions. - Added unit test for problem deletion.
Changed
- Introduced
SessionContextGuardclass, replacingget_session_contextandget_session_context_without_requestacross all endpoint routers. - Enabled
PRAGMA foreign_keys=ONfor SQLite connections. - Added
back_populatesforStateDB→ProblemDBrelationship. - Added defensive cleanup in
_attach_substatefor existing orphaned rows.
Fixed
- Fixed E-NAUTILUS endpoints to work with the new
SessionContextGuard. - Fixed orphaned substate rows causing
UNIQUEconstraint errors after session deletion. - Added missing docstrings and fixed typos in API models and router utilities.
Web GUI
Added
- Added experimental new features for E-NAUTILUS related to tree and decision visualization.
- Added generic
EndStateViewcomponent (reusesFinalResultTable+ CSV download). - Added representative solution set selector to E-NAUTILUS initialization panel; auto-selects when only one set exists, shows warning when none available.
- Added inline session creation with Combobox dropdown and "+ New" button for E-NAUTILUS.
- Added delete and download actions to problems data table.
- Added input confirmation dialog component.
- Added
syncProblem()tomethodSelectionstore (updatesproblem_idwithout clearing session/method).
Changed
- Replaced E-NAUTILUS final JSON view with
EndStateView; show only the selected solution. - Replaced final view toggle buttons with proper Tabs component (experimental).
- Replaced dialog-based formulation views with inline expandable rows in Objectives, Constraints, and Extra Functions tabs.
- Replaced plain HTML intermediate points table with TanStack/sortable table using colored headers, closeness column, and blue selection border.
- Disabled E-NAUTILUS in method initialize page when problem has no representative solution sets.
- Regenerated API client types for new E-NAUTILUS and delete endpoints.
Fixed
- Fixed problem context mismatch when resuming E-NAUTILUS state from a different problem.
- Fixed all
state_referenced_locallySvelte 5 warnings across 11 components. - Fixed Svelte 5
$statewarnings forbind:thiselement references. - Fixed
finalize_enautilus: added missing return on error, cleared stale error messages. - Excluded
mathlivefrom ViteoptimizeDepsto fix KaTeX font 404 errors. - Disabled Finish button until intermediate point is chosen (E-NAUTILUS).
- Removed duplicate config sync effect in GDM-SCORE-bands config-panel.
Full Changelog: v2.2.1...v2.2.2
DESDEO 2.2.1
[2.2.1] - 10.2.2026
Core logic
Fixed
- Fixed an issue in
PyomoEvaluatorwhere equality-type (EQ) constraints were not added correctly to the Pyomo model. - Fixed a small bug in GDM SCORE band computation introduced in a previous change.
Web API
Added
- Added support for Representative Solution Sets:
- Introduced
RepresentativeSolutionSetRequest. - Added endpoints to create representative solution sets.
- Added endpoints to retrieve representative solution sets by problem ID and by set ID.
- Added endpoint to delete a specific representative solution set.
- Introduced
- Added corresponding unit tests for representative solution set endpoints.
Changed
- Refactored representative solution set endpoints to use
get_session_context. - Removed return payload from delete endpoints where it was unnecessary.
- Minor refactoring and cleanup of API router structure.
Documentation
Added
- Added
llms.txtandllms-full.txtdocumentation files and integrated them into the documentation build. - Added Read the Docs-specific configuration to ensure notebooks are executed during RTD builds.
- Added new Makefile rules for documentation:
docs-fast: build docs without executing notebooks.docs-rtd: build docs with notebook execution (RTD parity).
Changed
- Stripped outputs from all notebooks using
nbstripout. - Fixed issues with notebooks not executing correctly during documentation builds.
- Polished and reorganized documentation structure (WIP).
- Added missing documentation pages to MkDocs navigation.
- Updated
README.md:- Fixed links to
llms.txtandllms-full.txt. - Minor clarifications and cosmetic updates.
- Fixed links to
- Extended contributing guidelines with additional information on pre-commit hooks.
Tooling, CI, and linting
Added
- Added
nbstripoutas a pre-commit hook.
Changed
- Updated Read the Docs configuration to install solver binaries so that optimization notebooks can be executed during documentation builds.
- Refined pre-commit and ruff configuration:
- Ignored selected boolean-argument warnings.
- Fixed linter warnings surfaced during documentation audits.
- General cosmetic and formatting fixes across the codebase.
Notes
- This iteration is documentation- and infrastructure-heavy, focusing on reproducibility, documentation execution fidelity, and API extensibility.
- Representative Solution Sets introduce new decision-support abstractions that are expected to evolve as research workflows mature.
- Several changes are WIP and research-driven, and interfaces may still change.
Full Changelog: v2.2.0...v2.2.1
DESDEO 2.2.0
Core logic
Added
- Added a seeded population generator for evolutionary multiobjective optimization:
- Supports generating populations by perturbing a provided seed solution.
- Allows controlling the ratio of seeded vs. random solutions.
- Supports all variable types.
Fixed
- Fixed issues in the seeded generator implementation discovered during integration and testing.
Web API
Changed
- Refactored session context handling:
get_session_contextis now used consistently in the endpoints.- Removed redundant checks around interactive state retrieval; invalid states now raise immediately.
- Applied linter-driven cleanup (removal of deprecated imports, improved import ordering, minor syntax fixes).
- Access tokens are now returned as cookies as well (previously this was a feature just for refresh tokens).
Web GUI
Added
- Added a problem definition page (WIP), including:
- Initial problem definition form.
- Iterative refinements to structure and validation.
- Added initial support for selecting interactive sessions in the method-selection view, analogous to problem selection.
Changed
- Improved E-NAUTILUS session startup and validation logic.
- Updated session and startup inputs for E-NAUTILUS.
- Fixed missing session information in the E-NAUTILUS
selectionstate. - Refined session settings UI for E-NAUTILUS.
- Improved authentication flow by refreshing access tokens on
401responses and updating cookies accordingly.
Known issues
- Deleting sessions can currently break NIMBUS if it attempts to access states from a deleted session.
Tests
Changed
- Improved
Makefiletest rules:- Better handling of skipped tests.
- Added a dedicated
make test-apirule. - General cleanup and variable handling improvements.
- Fixed test setup issues on the home page.
Tooling, CI, and linting
Changed
- Applied extensive ruff-based linting fixes across the codebase.
- Cleaned up code to satisfy pre-commit hooks.
- Minor workflow and maintenance-related refinements.
Documentation
Changed
- Updated
README.md:- Clarified the development status of the Web GUI.
- Updated installation instructions.
- Revised funding information.
- Reordered and expanded project badges, including PyPI version badge.
- Minor documentation fixes and clarifications.
Notes
- Several components (notably the Web GUI and session management) remain actively evolving research prototypes.
Rumo has it...
- Refactoring router to utilize get_session_context by @PtrBednarik in #411
- Web-GUI by @gialmisi in #412
- Codex/enhance e nautilus interface for session settings by @gialmisi in #414
- Codex/implement problem definition page in desdeo by @gialmisi in #415
- Codex/fix token refresh logic in webui by @gialmisi in #416
- Core-logic (EMO): implemented a seeded generator by @gialmisi in #413
Full Changelog: v2.1.1...v2.2.0
DESDEO 2.1.1
General
Core logic
Changed
- Updated
CBCOptionsparameter name fromsectosecondsto better reflect semantics. - Removed obsolete pytest tags (
nogithub) as part of test cleanup.
Web API
(No functional API changes in this release.)
Web GUI
Added
- Added a barebones page for adding and inspecting interactive sessions (WIP).
Tests
Changed
- Cleaned up pytest markers:
- Re-added
githubskipwhere appropriate. - Removed excessive pytest tags that were unintentionally skipping tests.
- Added a new
fixmepytest mark to explicitly label known failing tests with pending issues.
- Re-added
- Updated pytest commands in the
Makefile.
Workflows / CI
Added
- Added a pre-commit hook GitHub workflow that runs checks only on changed files in pull requests.
- Integrated ruff-based linting and formatting via pre-commit hooks.
- For details about pre-commit hooks (how to install and activate),
see the documentation.
Changed
- Updated unit test workflow:
- Now runs on
masterbranch commits and pull requests. - Switched dependency management from
piptouv. - Added missing pytest tags to ensure correct test selection.
- Now runs on
Tooling and linting
Changed
- Removed
isortin favor of ruff-only linting and formatting. - Refined ruff configuration in
pyproject.tomlto be more sensible in practice. - Fixed minor linting issues revealed by enabling pre-commit hooks.
Documentation
Changed
- Updated
README.md. - Updated contributing documentation with instructions and expectations for using pre-commit hooks.
Notes
- This release focuses on developer experience, CI correctness, and test hygiene.
- No user-facing web-API changes are expected.
- GUI additions are early-stage and exploratory.
Full Changelog: v2.1.0...v2.1.1
DESDEO 2.1.0
General
Core logic
Added
- Added Group NIMBUS (GNIMBUS) method to the core optimization framework.
- Added new ADM variants (ADM2, ADMAfsar) and refactored the ADM codebase with clearer base abstractions.
- Started work on a resolver–provider–schema–based mechanism for connecting to external test problem libraries without relying on HTTP (initial support for Pymoo-based problems).
- Added preliminary infrastructure for improved solver metadata handling.
Changed
- Reworked the computation of intermediate solutions (WIP) to improve numerical robustness and alignment with theoretical formulations.
- Refactored solver and reference vector handling as part of ongoing structural cleanup.
Fixed
- Fixed division-by-zero issues in the GUESS scalarization (implementation previously deviated from the paper).
- Fixed circular imports, mismatched parentheses, and multiple small numerical and structural issues discovered during refactoring.
Notes
- Several core-logic changes in this release are experimental and may evolve as methodological work continues.
Web API
Added
- Added new endpoints and request models for stepping, reverting, and inspecting E-NAUTILUS iterations (WIP).
- Added endpoints for retrieving all iterations, votes, confirmations, and intermediate solutions in group decision-making workflows.
- Added support for defining optimization problems via JSON file uploads.
- Added new example problems to database initialization scripts.
Changed
- Refactored database session handling to propagate active sessions explicitly instead of relying on implicit generators.
- Improved authentication handling: access and refresh tokens are now supported via cookies and explicit
Authorizationheaders. - Continued work on multi-valued constraint handling and intermediate-result computation.
Fixed
- Fixed multiple issues in Group NIMBUS–related endpoints, including incorrect group ID usage and broken tests.
- Fixed API inconsistencies in
get_or_initialize, utopia, and intermediate-solution endpoints.
Notes
- Several endpoints and request/response models should be considered unstable and subject to change as research workflows mature.
Web GUI
Added
- Added initial GNIMBUS UI (WIP), including:
- Group and method selection views.
- Voting-based decision and compromise phases.
- End-state views with objective and variable tables and CSV export.
- Added iteration history views with the ability to revert to previous iterations (WIP).
- Added real-time updates via WebSockets for phase changes, iteration updates, and voting results.
- Added new visualizations, including vote bar charts and extended parallel coordinate plot features.
Changed
- Migrated OpenAPI client generation to Orval 8.x and regenerated client models.
- Refactored preference sidebars, solution tables, and layout components for clarity and experimentation.
- Continued work on authentication and session handling in the GUI (cookies + token-based access).
- Iteratively refined dashboards, top bars, and phase-specific views.
Fixed
- Fixed WebSocket reconnection and shutdown handling.
- Fixed phase update propagation, layout resizing issues, tooltip rendering, and visualization inconsistencies.
- Fixed UI behavior during compromise and voting phases (e.g., disabled invalid actions, improved feedback).
Notes
- Large parts of the GUI remain research prototypes; UI structure, naming, and interaction patterns may change rapidly.
Rumor has it...
- Single arithmetic and local crossover by @Paurikova in #244
- feat: 2 models and router for nimbus by @StinaSoile in #256
- Power mutation by @Paurikova in #257
- Bounded exponential xover implementation by @pStefanec in #253
- lower and upper bounds are taken from problem variables now by @pStefanec in #264
- Endpoint for intermediate solutions by @StinaSoile in #263
- (GUI) add Topbar component and implement dashboard and home pages by @giomara-larraga in #265
- feat: can add users now by @viljokass in #266
- bug? fix for enautilus and scaling delta for group scalas by @jpajasmaa in #269
- improved delta types and corresponding parts in the weight calculations by @jpajasmaa in #271
- A fix to the installation guide for restricted Windows PCs by @Matskuu in #272
- Fixed excactly one typo by @Mastereeli in #274
- Table model for problem metadata by @viljokass in #273
- Fix: a single typo in documentation by @laitozz in #277
- Update the links in README.md to point to the new documentation by @laitozz in #279
- typo fix: "form Github," -> "from Github," by @bwalie in #280
- Refactored get_corrected_referencepoint by @Mastereeli in #278
- Update the hypervolume indicator to utilize moocore instad of pymoo by @laitozz in #283
- Fix dead links in the documentation by @laitozz in #282
- typos by @bwalie in #284
- A few typos by @bwalie in #285
- Saving solutions to archive by @StinaSoile in #286
- Added logout endpoint and tests for it by @viljokass in #289
- Forbid assigning values to undefined fields in pydantic classes by @laitozz in #290
- Adding simulator file example to the article examples list by @Matskuu in #292
- Add solver option classes to the available_solvers dictionary by @laitozz in #295
- (GUI) Improvements to UI styles and new visualizations by @giomara-larraga in #299
- Add epsilon indicator by @laitozz in #288
- (GUI) Base layout for NIMBUS method by @giomara-larraga in #300
- Changes in layout for EMO method and correction in preference type of NIMBUS by @giomara-larraga in #303
- fixes to desdeo.tools.utils.py by @viljokass in #302
- (GUI) Added buttons at the bottom of preferences sidebar by @giomara-larraga in #305
- Inputs for preferences and numSolutions by @StinaSoile in #306
- Metadata fetch by @viljokass in #301
- Utopia endpoint by @viljokass in #308
- feat: minimal nimbus initialization endpoint by @StinaSoile in #307
- Iteration, solution table, initialization and dummy finish by @StinaSoile in #309
- Define problem using form in UI by @StinaSoile in #304
- (GUI and API) Added basic functionality for EMO methods by @giomara-larraga in #314
- Group scalarization functions for GNIMBUS by @jpajasmaa in #316
- updates and fixes to group scala tests by @jpajasmaa in #320
- Nimbus UI: new endpoints, intermediate, finish and save, graph, map by @StinaSoile in #319
- (GUI) fixed typo in desdeo/api/models/init and problem with a dependency by @giomara-larraga in #321
- Group scalarization function differentiable variants + tests by @jpajasmaa in #322
- group scala agg. variants diff versions and tests by @jpajasmaa in #324
- solution table, remove saved, button for bar chart, finish button change by @StinaSoile in #325
- Adm2 by @giomara-larraga in #326
- API State refactor by @gialmisi in #330
- fix and feat: One more endpoint, fix typos in generic route, change NIMBUSIntermediateSolutionResponse, NIMBUS UI by @StinaSoile in https:...
DESDEO 2.0.0 Initial release
General
This is the initial release of version 2.0.0 of DESDEO. It introduces many braking changes compared to its previous release.
Zero compatibility should be assumed with the prior versions (1.x.x).
What's Changed
- decision uncertainty example by @yuezhoukangas in #40
- Fixed flake8 and isort warnings. Build should now be passing. by @gialmisi in #41
- Added desdeo-emo to the package and bumped version by @light-weaver in #48
- New documentation by @giomara-larraga in #52
- Update issue templates by @light-weaver in #67
- Add CPU-based rules for dependency choice by @light-weaver in #76
- Light-weaver/issue69 by @light-weaver in #77
- Desdeo2 by @jpajasmaa in #83
- Update scipy_solver_interfaces.py by @juropo in #86
- Desdeo2 gurobi by @juropo in #87
- Desdeo2 gurobipy by @juropo in #90
- Pareto navigator by @Matskuu in #94
- Pareto navigator by @Matskuu in #100
- TensorConstant and TensorVariable added by @gialmisi in #116
- Desdeo2 auth config by @maihoangbichtram in #101
- Tensor handling for GurobipySolver by @Matskuu in #121
- Test problem RE24 by @Matskuu in #115
- Changes requested in issue #112. by @Matskuu in #117
- Correct an error in scipy_solver_interfaces. by @Matskuu in #119
- Nimbus fix by @maihoangbichtram in #127
- Desdeo2 by @juropo in #128
- Light weaver/issue97 by @light-weaver in #133
- Some fixes related to reference point in the augmentation term in the NAUTILUS and NAUTILI methods. by @Matskuu in #132
- Removed CreateSolverType and added BaseSolver as a base class for all solvers. by @Matskuu in #123
- removed CreateSolverType, added BaseSolver for nimbus generate_starti… by @jpajasmaa in #135
- Forest problem implementation by @Matskuu in #130
- Scalarization functions for multiple decision makers by @Matskuu in #131
- Gnimbus test by @maihoangbichtram in #138
- Desdeo2 tokens creation reformat by @maihoangbichtram in #102
- Desdeo2 problems access by @maihoangbichtram in #104
- Remove BaseModel extension for Config classes by @maihoangbichtram in #122
- Add dm users by @maihoangbichtram in #125
- Make DESDEO2 runnable on Rahti by @juropo in #137
- Fix desdeo2 by @maihoangbichtram in #141
- Fix cors by @maihoangbichtram in #168
- Payoff table method by @Matskuu in #170
- Problem schema and tests updated. by @gialmisi in #181
- Avoid problem duplicates by @maihoangbichtram in #151
- Added the data file paths as arguments for the forest problem. by @Matskuu in #140
- Forest problem documentation by @Matskuu in #153
- Updates to evaluator and solver documentations by @Matskuu in #154
- Added checks for the compatibility of the solvers by @Matskuu in #156
- Updated deps. by @gialmisi in #182
- Simulator and surrogate support by @Matskuu in #185
- NIMBUS api updates and forest problems by @juropo in #186
- There's no reason for the utopia elements in the database to be linke… by @juropo in #188
- Fixing guess_best_solver by @Matskuu in #187
- Desdeo2 by @juropo in #190
- fixes to nautili and nautilus family tests by @jpajasmaa in #193
- Tests for simulator/surrogate evaluator by @Matskuu in #192
- Simulator and surrogate support documentation by @Matskuu in #194
- added zdt2 and zdt3 test problems by @jpajasmaa in #196
- forgot the change init.py with last commit by @jpajasmaa in #197
- Rahti documentation update by @juropo in #200
- Rahti documentation update by @juropo in #202
- NAUTILI docs and bug fixes for group scalarization functions by @jpajasmaa in #204
- bug fix coming from polars update for forest problem by @jpajasmaa in #205
- nautili doc minor fixes by @jpajasmaa in #218
- testproblem-refactoring by @Paurikova in #216
- scalarization.py refactored to use optional ideal and nadir points by @pStefanec in #219
- refactoring scipyDeSolver and scipyMinimizeSolver options by @pStefanec in #224
- IGD+ indicator by @Paurikova in #221
- test problem data path fix by @viljokass in #227
- Documentation changes for the simulator stuff by @Matskuu in #229
- Simple installation guide for Windows by @juropo in #230
- R-metric indicator by @Paurikova in #220
- RE problems docs fix, minor formating related changes by @pStefanec in #231
- R2-metric indicator by @Paurikova in #232
- Softlaunch of DESDEO 2.0 by @gialmisi in #233
- scenario based problems scalarization function added by @pStefanec in #235
- Mcwb test problem by @Paurikova in #240
- Blend alpha crossover implementation by @pStefanec in #242
- MPT-mutation by @Paurikova in #247
- Non-uniform mutation by @Paurikova in #248
- Self adaptive Gaussian mutation by @Paurikova in #249
- documentation should use mostly python notebooks from now by @pStefanec in #241
New Contributors
- @yuezhoukangas made their first contribution in #40
- @light-weaver made their first contribution in #48
Full Changelog: v0.2.1...v2.0.0
supplementary: Polars evaluator changes.
This release is to only host solver binaries used in GitHub actions.