AutoHD: Automated Heuristics Discovery for LLM Planning
What is AutoHD?
AutoHD (Automated Heuristics Discovery) is a Python package that enables LLMs to generate and evolve heuristic functions for guiding inference-time search in complex planning tasks.
Based on the research paper: "Complex LLM Planning via Automated Heuristics Discovery" (arXiv:2502.19295v1, Feb 2025, Texas A&M University).
Key Features
- LLM-Generated Heuristics: LLMs automatically generate heuristic functions as Python code
- Heuristic Evolution: Iterative refinement through exploration and modification strategies
- Multiple Search Algorithms: Support for Greedy BFS and A* search
- Multiple Planning Tasks: Blocksworld, Game of 24, and Rubik's Cube
- LLM-Agnostic: Works with OpenAI, Anthropic, and other providers via litellm
- LangChain Integration: Plug into LangChain agents and chains
Quick Start
pip install autohd
Basic Usage
import asyncio
from autohd import AutoHD
from autohd.core.config import AutoHDConfig, LLMConfig
async def main():
# Configure AutoHD
config = AutoHDConfig(
task_name="blocksworld",
llm=LLMConfig(model="gpt-4o", provider="openai"),
)
# Initialize AutoHD
autohd = AutoHD(config=config)
# Generate synthetic training data
train_data = [
{"initial_state": "the red block is clear...", "goal_state": "the orange block is on top of the red block..."},
# ... more examples
]
# Run the pipeline
results = await autohd.run(
train_data=train_data,
test_data=test_data,
)
print(f"Best heuristic accuracy: {results['test_results']['accuracy']:.1%}")
asyncio.run(main())
CLI Usage
# Run on Blocksworld
autohd run --task blocksworld --model gpt-4o
# Run on Game of 24
autohd run --task game24 --model gpt-4o
# Run on Rubik's Cube
autohd run --task rubiks_cube --model gpt-4o
# Custom configuration
autohd run --task blocksworld --generations 5 --population 10 --search-algorithm astar
Architecture
autohd/
├── core/ # Core framework
│ ├── autohd.py # Main AutoHD class
│ ├── config.py # Configuration classes
│ └── llm_client.py # LLM API abstraction
├── search/ # Search algorithms
│ ├── greedy_bfs.py # Greedy BFS solver
│ └── astar.py # A* solver
├── benchmarks/ # Planning task implementations
│ ├── base.py # Base benchmark class
│ ├── blocksworld.py # Blocksworld task
│ ├── game24.py # Game of 24 task
│ └── rubiks_cube.py # Rubik's Cube task
├── integrations/ # Framework integrations
│ └── langchain.py # LangChain integration
└── cli/ # Command-line interface
└── main.py # CLI entry point
How It Works
AutoHD follows a 5-step pipeline:
- Generate Initial Heuristics: LLMs are prompted to create heuristic functions as Python code
- Evaluate Heuristics: Each heuristic is tested on validation data using heuristic-guided search
- Evolve Heuristics: Iterative refinement through exploration (new ideas) and modification (tweaking existing)
- Select Best: The best heuristic from all generations is chosen
- Test: The selected heuristic is evaluated on test data
Performance
Based on the research paper:
| Task | GPT-4o-mini | GPT-4o | Llama 3.1 70B | Best Baseline |
|---|---|---|---|---|
| Blocksworld | 42.4% | 75.1% | 59.1% | ~2× improvement |
| Game of 24 | 54% | 70% | 69% | vs ToT 42/62/59 |
| Rubik's Cube (2×2) | 82.5% | 83.1% | 84.7% | vs XoT 67/80/78 |
Requirements
- Python 3.10+
- OpenAI API key (or other LLM provider)
- Optional:
litellmfor multi-provider support
License
MIT License
Citation
If you use AutoHD in your research, please cite:
@article{ling2025autohd,
title={Complex LLM Planning via Automated Heuristics Discovery},
author={Ling, Hongyi and Parashar, Shubham and Khurana, Sambhav and Olson, Blake and Basu, Anwesha and Sinha, Gaurangi and Tu, Zhengzhong and Caverlee, James and Ji, Shuiwang},
journal={arXiv preprint arXiv:2502.19295},
year={2025}
}
Metadata
Release files for autohd 0.1.7
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| autohd-0.1.7.tar.gz | 30.0 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| autohd-0.1.7-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 63.2 kB
Release files / autohd-0.1.7.tar.gz
| Download URL | autohd-0.1.7.tar.gz |
|---|---|
| Size | 30.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
526d07d301d50bb5e70a97162a918a965342d7b70de2d9489e40353b6b8c14df
|
|
BLAKE2b-256 checksum How to use checksums |
7e13ac8d520767ffcefc2662bdc5733b0dc32caf947112e613d18dc712eb7f86
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.7
|
Release files / autohd-0.1.7-py3-none-any.whl
| Download URL | autohd-0.1.7-py3-none-any.whl |
|---|---|
| Size | 33.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
c19fdfb29f17a9036fa53e3134a7e23bb544f3240c66f65332e61375c8613142
|
|
BLAKE2b-256 checksum How to use checksums |
f7367daa6df7e7db2f3187787634ffac9c11dae5006850aec2dcd90a5438aae1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/7.0.0 CPython/3.14.7
|
Security for autohd 0.1.7
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.