Catalog PyPI
Back to packageRELEASE DETAILS

1.5.0

PyPI

adsg-core

Design Space Graph (ADSG Core)

Published17 Oct 2026
Direct dependencies16
Transitive dependenciesNot calculated

README

Version 1.5.0 documentation

The Design Space Graph (ADSG Core)

Tests PyPI License Documentation Status

GitHub Repository | Documentation

The Design Space Graph (DSG) allows you to model design spaces using a directed graph that contains three types of architectural choices:

  • Selection choices (see example below): selecting among mutually-exclusive options, used for selecting which nodes are part of an architecture instance
  • Connection choices: connecting one or more source nodes to one or more target nodes, subject to connection constraints and optional node existence (due to selection choices)
  • Additional design variables: continuous or discrete, subject to optional existence (due to selection choices)

DSG with selection

Modeling a design space like this allows you to:

  • Model hierarchical relationships between choices, for example only activating a choice when another choice has some option selected, or restricting the available options for choices based on higher-up choices
  • Formulate the design space as an optimization problem that can be solved using numerical optimization algorithms
  • Generate architecture instances for a given design vector, automatically correct incorrect design variables, and get information about which design variables were active
  • Implement an evaluation function (architecture instance --> metrics) and run the optimization problem

Note: due to historical reasons the package and code refer to the ADSG (Architecture DSG), because originally it had been developed to model system architecture design spaces. In the context of this library, the ADSG and DSG can be considered to be equivalent.

Installation

First, create a conda environment (skip if you already have one):

conda create --name dsg python=3.12
conda activate dsg

Then install the package:

conda install numpy scipy~=1.9
pip install adsg-core

Ensure optimization algorithms are installed (SBArchOpt):

pip install sb-arch-opt

If you want to interact with the DSG from a Jupyter notebook:

pip install adsg-core[nb]
jupyter notebook

Documentation

Refer to the documentation for more background on the DSG and how to implement architecture optimization problems.

Examples

An example DSG with two selection choices:

DSG with selection

An example DSG with a connection choice:

DSG with connection

The DSG of the Apollo problem:

GNC DSG

The DSG of the GNC problem:

GNC DSG

Citing

If you use the DSG in your work, please cite it:

J.H. Bussemaker. System Architecture Optimization: Function-Based Modeling, Optimization Algorithms, and Multidisciplinary Evaluation. Dissertation, Delft University of Technology, July 2025. DOI: 10.4233/uuid:246b18f9-1f8c-4ff7-b824-2b1786cf9d14

Contributing

The project is coordinated by: Jasper Bussemaker (jasper.bussemaker at dlr.de)

If you find a bug or have a feature request, please file an issue using the Github issue tracker. If you require support for using the DSG or want to collaborate, feel free to contact me.

Contributions are appreciated too:

  • Fork the repository
  • Add your contributions to the fork
    • Update/add documentation
    • Add tests and make sure they pass (tests are run using pytest)
  • Read and sign the Contributor License Agreement (CLA) , and send it to the project coordinator
  • Issue a pull request into the dev branch

NOTE: Do NOT directly contribute to the adsg_core.optimization.assign_enc and .sel_choice_enc modules! Their development happens in separate repositories:

Use update_enc_repos.py to update the code in this repository.

Adding Documentation

pip install -r requirements-docs.txt
mkdocs serve

Refer to mkdocs and mkdocstrings documentation for more information.

Downloads & popularity

Awaiting observations

No metric observations yet

Download counts and popularity will appear here as the collector receives them.

Declared dependencies 16

Native requirements
16 direct targetsNot calculated transitive count
Package / targetRequirementRelationship
networkx
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": ">=3.9",
  "evaluation": "NOT_EVALUATED"
}
networkxruntime
lxml
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": ">=3.9",
  "evaluation": "NOT_EVALUATED"
}
lxmlruntime
pydot
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": ">=3.9",
  "evaluation": "NOT_EVALUATED"
}
pydotruntime
cached-property
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": ">=3.9",
  "evaluation": "NOT_EVALUATED"
}
cached-property>=1.5runtime
appdirs
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": ">=3.9",
  "evaluation": "NOT_EVALUATED"
}
appdirsruntime
numpy
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": ">=3.9",
  "evaluation": "NOT_EVALUATED"
}
numpyruntime
scipy
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": ">=3.9",
  "evaluation": "NOT_EVALUATED"
}
scipyruntime
pandas
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": ">=3.9",
  "evaluation": "NOT_EVALUATED"
}
pandasruntime
numba
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": ">=3.9",
  "evaluation": "NOT_EVALUATED"
}
numbaruntime
natsort
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": ">=3.9",
  "evaluation": "NOT_EVALUATED"
}
natsortruntime
sb-arch-opt
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": ">=3.9",
  "evaluation": "NOT_EVALUATED"
}
sb-arch-opt>=1.7runtime
openturns
Environment
{
  "extras": "",
  "marker": null,
  "requires_python": ">=3.9",
  "evaluation": "NOT_EVALUATED"
}
openturnsruntime
jupyter
Environment
{
  "extras": "",
  "marker": "extra == \"nb\"",
  "requires_python": ">=3.9",
  "evaluation": "NOT_EVALUATED"
}
jupyter; extra == "nb"runtime
ipython
Environment
{
  "extras": "",
  "marker": "extra == \"nb\"",
  "requires_python": ">=3.9",
  "evaluation": "NOT_EVALUATED"
}
ipython; extra == "nb"runtime
ipykernel
Environment
{
  "extras": "",
  "marker": "extra == \"nb\"",
  "requires_python": ">=3.9",
  "evaluation": "NOT_EVALUATED"
}
ipykernel; extra == "nb"runtime
matplotlib
Environment
{
  "extras": "",
  "marker": "extra == \"nb\"",
  "requires_python": ">=3.9",
  "evaluation": "NOT_EVALUATED"
}
matplotlib; extra == "nb"runtime

Distribution files

2 collected
adsg_core-1.5.0-py3-none-any.whl

bdist_wheel · 204.62 KB · Python py3

Source file
adsg_core-1.5.0.tar.gz

sdist · 157.06 KB · Python source

Source file

Metadata history

Meaningful changes
Current collected state Current

Observed since 20 Oct, 19:53 UTC

No superseded metadata states collected. Unchanged observations do not create new revisions.

Record identity

package_version:9bce842d53a0af2f2ff592b3f94f42b8d6ac896f880e77fba4cf19fb1b8718c2

Other collected versions

View all collected versions →