Skip to main content
Pre-release

This release is a pre-release and may not be stable for production use.

Mimir-RGNN

PyPI Version Python Versions License Tests

Mimir-RGNN is a Python library that implements Relational Graph Neural Networks (R-GNN) for AI planning applications. Built on PyTorch and Mimir, it provides a powerful and flexible interface for learning on structured relational data, particularly PDDL planning domains.

Key Features

  • 🧠 Relational Graph Neural Networks: R-GNN implementation for structured reasoning
  • 📋 PDDL Integration: Seamless integration with PDDL planning domains and problems via Mimir
  • ⚡ PyTorch Backend: Built on PyTorch for GPU acceleration
  • 🔧 Flexible Configuration: Declarative configuration system for input/output specifications
  • 🎯 Planning-Focused: Designed specifically for AI planning and reinforcement learning applications
  • 📊 Multiple Aggregation Functions: Support for various message aggregation strategies
  • 🏗️ Typed API: Clean and type-safe interface

Installation

Install Mimir-RGNN from PyPI:

pip install pymimir-rgnn

Requirements

  • Python 3.11+
  • PyTorch 2.6.0+
  • Pymimir 0.14.0b3

Quick Start

import pymimir as mm
import pymimir_rgnn as rgnn

# Load a PDDL domain
domain = mm.Domain.from_file('path/to/domain.pddl')

# Configure the R-GNN hyperparameters
hparam_config = rgnn.HyperparameterConfig(
    domain=domain,
    embedding_size=64,
    num_layers=30,
)

# Define input and output specifications using encoder/decoder classes
input_spec = (rgnn.StateEncoder(), rgnn.GroundActionsEncoder(), rgnn.GoalEncoder())
output_spec = [('q_values', rgnn.ActionScalarDecoder(hparam_config))]

# Configure the R-GNN modules (aggregation, message, and update functions)
module_config = rgnn.ModuleConfig(
    aggregation_function=rgnn.MeanAggregation(),
    message_function=rgnn.PredicateMLPMessages(hparam_config, input_spec),
    update_function=rgnn.MLPUpdates(hparam_config)
)

# Create and initialize the model
model = rgnn.RelationalGraphNeuralNetwork(hparam_config, module_config, input_spec, output_spec)

# Use the model for inference
# problem = mm.Problem.from_file(domain, 'path/to/problem.pddl')
# state = problem.initial_state
# actions = state.applicable_actions()
# goal = problem.goal
#
# inputs = [(state, actions, goal)]  # Input tuple matching input_spec order
# outputs = model(inputs)
# q_values = outputs.readout('q_values')

Pymimir 0.14.0b3 provides the native pymimir.learning extraction used by all built-in RGNN encoders. One native encoding context owns the complete input batch: RGNN begins and ends each instance around the existing instance-major, polymorphic encoder loop, then materializes one packed int32 relation buffer and the node metadata once. PyTorch creates one CPU tensor from that buffer; each native relation is a view, and accelerator encoding transfers the packed tensor only once. State, goal, ground-action, transition-effect, virtual-node, and expressive encoders delegate their traversal and relation assembly directly to Mimir. Custom encoders remain freely mixable in specification order and allocate IDs through that same context. The public EncodedTensors interface and model checkpoint layout is unchanged for domains without nullary predicates.

Nullary predicates are represented as unary relations over every canonical problem object, including domain constants. Goal and expressive encoders use the same lifting. A nullary transition effect is instead represented by the transition node alone, as P(transition). Consequently, relation arities—and therefore checkpoint structure—change for domains that contain nullary predicates.

Numeric PDDL remains intentionally unsupported.

API Overview

Core Components

HyperparameterConfig

Configuration class for R-GNN model hyperparameters:

  • Domain: The PDDL domain for the planning problem
  • Model Parameters: Embedding size, number of layers
  • Training Settings: Normalization, global readout options

ModuleConfig

Configuration class for R-GNN neural network modules:

  • Aggregation Function: How messages are aggregated (mean, sum, max, etc.)
  • Message Function: How messages are computed between related nodes
  • Update Function: How node embeddings are updated with aggregated messages

Encoder/Decoder Classes

Extensible class-based system for defining inputs and outputs:

  • Input Specification: Tuple of encoder instances (StateEncoder, GoalEncoder, etc.)
  • Output Specification: List of named decoder instances with custom readout logic

RelationalGraphNeuralNetwork

The main R-GNN model class that:

  • Takes hyperparameter config, module config, input specification, and output specification
  • Processes relational graph structures from PDDL problems
  • Supports extensible encoder/decoder system for custom input/output handling
  • Handles batched inference efficiently

Encoder Classes

Inherit from Encoder base class to define custom input processing:

  • StateEncoder: Current state of the planning problem
  • GoalEncoder: Goal specification
  • GroundActionsEncoder: Available ground actions
  • TransitionEffectsEncoder: Ordered successor states and their realized transition effects

StateEncoder, GoalEncoder, and TransitionEffectsEncoder expose get_relation_descriptors(domain) for semantic relation discovery. Each EncoderRelation identifies its source symbol and EncoderRelationKind, so callers do not need to infer meaning from relation names or list positions. TransitionEffectsEncoder consumes (ordered_successor_states, effect_relations, goal_condition); relation index pairs refer to positions in the successor sequence.

Decoder Classes

Inherit from Decoder base class to define custom output readout:

input_spec = (StateEncoder(), GroundActionsEncoder(), GoalEncoder())
output_spec = [
    ('actor', ActionScalarDecoder(hparam_config)),
    ('critic', ObjectsScalarDecoder(hparam_config)), 
    ('embeddings', ActionEmbeddingDecoder())
]

Aggregation Functions

Available in the ModuleConfig:

  • MeanAggregation(): Mean aggregation
  • SumAggregation(): Sum aggregation
  • HardMaximumAggregation(): Hard maximum
  • SmoothMaximumAggregation(): Smooth maximum (LogSumExp)

Examples and Tutorials

For an comprehensive example, visit:

Contributing

We welcome contributions! Please see our Contributing Guidelines for details on:

  • Development setup
  • Coding standards
  • Testing requirements
  • Pull request process

License

This project is licensed under the GNU General Public License v3.0 or later. See the LICENSE file for details.

Citation

If you use Mimir-RGNN in your research, please cite:

@inproceedings{stahlberg-bonet-geffner-icaps2022,
  author       = {Simon St{\aa}hlberg and Blai Bonet and Hector Geffner},
  title        = {Learning General Optimal Policies with Graph Neural Networks: Expressive Power, Transparency, and Limits},
  booktitle    = {Proceedings of the Thirty-Second International Conference on Automated Planning and Scheduling, {ICAPS} 2022, Singapore (virtual), June 13-24, 2022},
  pages        = {629--637},
  year         = {2022}
}

Support

Release files for pymimir-rgnn 0.3.0b2

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for pymimir-rgnn 0.3.0b2
File Size Uploaded
pymimir_rgnn-0.3.0b2.tar.gz 60.0 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for pymimir-rgnn 0.3.0b2
File Interpreter ABI Platform
pymimir_rgnn-0.3.0b2-py3-none-any.whl Python 3 none any Details

Total release size: 107.0 kB

Release files / pymimir_rgnn-0.3.0b2.tar.gz

Download URL pymimir_rgnn-0.3.0b2.tar.gz
Size 60.0 kB
Tags Source
SHA-256 checksum
How to use checksums
75e545279d0990ef5f654e421cc807a46b4506d61aff6c1493e0f76d68a61c2f
BLAKE2b-256 checksum
How to use checksums
c59431642d2ca6765efad730b0f5c80f2d9000fe338d34f3b412b768aa932c52
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14

Release files / pymimir_rgnn-0.3.0b2-py3-none-any.whl

Download URL pymimir_rgnn-0.3.0b2-py3-none-any.whl
Size 47.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
1814e0448d37af5015827f8a5791f077d084ae043ac2a5f0ad18995b18cb8cf0
BLAKE2b-256 checksum
How to use checksums
3b72435ba10a6bec62eeadc3c3da1335697823bd732a51844d9bcbc3fbf4c211
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.13.14
Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page