Skip to main content

Kernel for building and simulating constraint hypergraphs.

Project description


Static Badge Read the Docs Static Badge GitHub Release GitHub last commit

ConstraintHg is a systems modeling kernel written in Python that enables general definition and universal simulation of any system. The kernel breaks a system down into the informational values (nodes) and functional relationships (hyperedges), providing robust simulation through pathfinding operations. This repository is under active development (no official release yet), and is therefore subject to change without warning. It is not a rigorous data storage solution. Do not use this as a database.

Usage and More Information

Install

ConstraintHg is listed on the Python Package Index. To install, paste the following to your command terminal:

   pip install constrainthg

Introduction

Hypergraphs are normal graphs but without the constraint that edges must only link between two nodes. Because of this expanded generality, hypergraphs can be used to model more complex relationships. For instance, the relationship A + B = C is a multinodal relationship between three nodes, A, B, and C. You can think of all three nodes being linked by a 2D hyperedge, so that to move along that hyperedge you need at least two of three nodes.

A constraint hypergraph is a hypergraph where the relationships are constraints that can be solved for by some execution engine, generally via API calls. These constraints reveal the behavior of the system. The goal is for the hypergraph to be platform agnostic, while API calls allow for edges to be processed on any available software.

Processing a series of nodes and edges (a "route") is what constitutes a simulation, so one of the uses of an constraint hypergraph is enabling high-level simulation ability from any possible entry point in a system model.

Getting started

Note that this demo is found in demos/demo_basic.py Let's build a basic constraint hypergraph of the following equations:

  • $A + B = C$
  • $A = -D$
  • $B = -E$
  • $D + E = F$
  • $F = -C$

First, import the classes.

from constrainthg.hypergraph import Hypergraph
import constrainthg.relations as R

A hypergraph consists of edges that map between a set of nodes to a single node. We provide the mapping by defining a constraint function (many of which are already defined in the relationships module). The two relationships defined in the governing equations are addition and negation. Using the typical syntax, we refer to the functions defined in relationships with R.<name>, in this case R.Rsum and R.Rnegate. To make the hypergraph we'll need to compose the 5 edges (equations) given above.

hg = Hypergraph()
hg.add_edge(['A', 'B'], 'C', R.Rsum)
hg.add_edge('A', 'D', R.Rnegate)
hg.add_edge('B', 'E', R.Rnegate)
hg.add_edge(['D', 'E'], 'F', R.Rsum)
hg.add_edge('F', 'C', R.Rnegate)

We can verify that the hypergraph was made correctly by tracing all possible paths for generating C using the printPaths function.

print(hg.print_paths('C'))

This should give us the following output. Hyperedges are indicated with a , with the last source separated from other edges with a .

└──C, cost=1
   ├◯─A, cost=0
   ├●─B, cost=0
   └──F, cost=3
      ├◯─D, cost=1
      │  └──A, cost=0
      └●─E, cost=1
         └──B, cost=0

Compute the value of $C$ by picking a set of source nodes (inputs), such as $A$ and $B$ or $A$ and $E$. Set values for the inputs and the solver will automatically calulate an optimized route to simulate $C$.

print("**Inputs A and E**")
hg.solve('C', {'A':3, 'E':-7}, to_print=True)
print("**Inputs A and B**")
hg.solve('C', {'A':3, 'B':7}, to_print=True)

The output of the above should be:

**Inputs A and E**
└──C= 10, cost=3
   └──F= -10, cost=2
      ├──D= -3, cost=1
      │  └──A= 3, cost=0
      └──E= -7, cost=0

**Inputs A and B**
└──C= 10, cost=1
   ├──A= 3, cost=0
   └──B= 7, cost=0

Examples

Many examples are available in the demos directory. These, and other external examples include:

  • Pendulum: demonstrating model selection
  • Elevator: combining discrete-event simulation with a PID controller
  • Naval Microgrid: complex system featuring data querying and dynamic simulation and linear systems
  • Crankshaft: integrates CAD software (Onshape) with dynamic simulation

Licensing and Usage

Author: John Morris
Organization: PLM Center at Clemson University
Contact: Reach out to my GitHub profile (jmorris335)
Usage: An official release will likely be provided under the Apache 2.0 license, but for now all rights are reserved. For usage, please reach out to the author directly.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

constrainthg-0.2.tar.gz (23.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

constrainthg-0.2-py3-none-any.whl (20.0 kB view details)

Uploaded Python 3

File details

Details for the file constrainthg-0.2.tar.gz.

File metadata

  • Download URL: constrainthg-0.2.tar.gz
  • Upload date:
  • Size: 23.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for constrainthg-0.2.tar.gz
Algorithm Hash digest
SHA256 c4792060c0965eac01f62bb3f9af94850a54da81d2a9f8cbd01a9c30076e3b2e
MD5 46becc24c5908bdfa5ae729b31969636
BLAKE2b-256 a820959c9369a33f448e6b7f21bdd5c4c8f554dab5a47afad7d9a3494cc9e671

See more details on using hashes here.

File details

Details for the file constrainthg-0.2-py3-none-any.whl.

File metadata

  • Download URL: constrainthg-0.2-py3-none-any.whl
  • Upload date:
  • Size: 20.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for constrainthg-0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 d97ba250fb4e020123128a2d6cbca1b91839f1484656a2ff0e08a7a43e726636
MD5 d12181c4d824965bee4dc104db11429f
BLAKE2b-256 21f017c7a69b03e95db648ba1d03d0590765de3fd2ab21b69401e807328d1da8

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page