Skip to main content

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+
  • Mimir 0.13.42+

Quick Start

import pymimir as mm
import pymimir_rgnn as rgnn

# Load a PDDL domain
domain = mm.Domain('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(domain, 'path/to/problem.pddl')
# state = problem.get_initial_state()
# actions = state.generate_applicable_actions()
# goal = problem.get_goal_condition()
#
# inputs = [(state, actions, goal)]  # Input tuple matching input_spec order
# outputs = model(inputs)
# q_values = outputs.readout('q_values')

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: Action effects and transitions

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.2.10

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.2.10
File Size Uploaded
pymimir_rgnn-0.2.10.tar.gz 48.6 kB Details

Built distribution (wheel)

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

Total release size: 94.4 kB

Release files / pymimir_rgnn-0.2.10.tar.gz

Download URL pymimir_rgnn-0.2.10.tar.gz
Size 48.6 kB
Tags Source
SHA-256 checksum
How to use checksums
03c92c407559475756b1b9a1327dbc55da581eb4b3e487f5a5f122ab066f6d77
BLAKE2b-256 checksum
How to use checksums
345d3c2707016e14f52b48beeeabb2189a0db9a751a9f05429886e34c2954e96
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.2.10-py3-none-any.whl

Download URL pymimir_rgnn-0.2.10-py3-none-any.whl
Size 45.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0a38c39ee746346e7e39bc218dd7d4c40e623454e676731625849c614610c8fb
BLAKE2b-256 checksum
How to use checksums
af52e81a4f7f2cb95046c0cb303a2d570f13d28861db1fd39a8950f8da68a170
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