From 4b55a05f78c570ab8f7e6e5f070f712d17cd9896 Mon Sep 17 00:00:00 2001 From: Leonardo Lamanna Date: Sat, 4 Apr 2026 10:44:37 +0200 Subject: [PATCH 1/4] update README --- README.md | 134 +++++++++++++----- .../__pycache__/__init__.cpython-310.pyc | Bin 174 -> 0 bytes .../action_generator.cpython-310.pyc | Bin 12765 -> 0 bytes .../goal_generator.cpython-310.pyc | Bin 11989 -> 0 bytes .../__pycache__/learner.cpython-310.pyc | Bin 8289 -> 0 bytes .../__pycache__/PDDLenv.cpython-310.pyc | Bin 6721 -> 0 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 174 -> 0 bytes .../symbolic_observation.cpython-310.pyc | Bin 2123 -> 0 bytes .../__pycache__/trajectory.cpython-310.pyc | Bin 1892 -> 0 bytes .../util/__pycache__/__init__.cpython-310.pyc | Bin 170 -> 0 bytes .../ground_actions_util.cpython-310.pyc | Bin 2553 -> 0 bytes .../__pycache__/state_util.cpython-310.pyc | Bin 1201 -> 0 bytes olam/util/__pycache__/util.cpython-310.pyc | Bin 3557 -> 0 bytes .../__pycache__/__init__.cpython-310.pyc | Bin 184 -> 0 bytes 14 files changed, 96 insertions(+), 38 deletions(-) delete mode 100644 olam/learning/__pycache__/__init__.cpython-310.pyc delete mode 100644 olam/learning/__pycache__/action_generator.cpython-310.pyc delete mode 100644 olam/learning/__pycache__/goal_generator.cpython-310.pyc delete mode 100644 olam/learning/__pycache__/learner.cpython-310.pyc delete mode 100644 olam/modeling/__pycache__/PDDLenv.cpython-310.pyc delete mode 100644 olam/modeling/__pycache__/__init__.cpython-310.pyc delete mode 100644 olam/modeling/__pycache__/symbolic_observation.cpython-310.pyc delete mode 100644 olam/modeling/__pycache__/trajectory.cpython-310.pyc delete mode 100644 olam/util/__pycache__/__init__.cpython-310.pyc delete mode 100644 olam/util/__pycache__/ground_actions_util.cpython-310.pyc delete mode 100644 olam/util/__pycache__/state_util.cpython-310.pyc delete mode 100644 olam/util/__pycache__/util.cpython-310.pyc delete mode 100644 olam/util/executability/__pycache__/__init__.cpython-310.pyc diff --git a/README.md b/README.md index c2f54c5..c4dc641 100644 --- a/README.md +++ b/README.md @@ -1,65 +1,117 @@ # Online Learning of Action Models for PDDL Planning +
- + - + - -[//]: # ( ) - -[//]: # ( )
-This repository contains the *refactored* code of the -Online Learning of Action Models (OLAM) algorithm presented at IJCAI 2021, -for details about the method please see -the [paper](https://www.ijcai.org/proceedings/2021/0566.pdf). The previous code used -for the paper experiments is available at this -[link](https://github.com/LamannaLeonardo/OLAM/tree/ijcai-2021). +--- +Refactored implementation of the **Online Learning of Action Models (OLAM)** algorithm, presented at **IJCAI 2021** ([paper](https://www.ijcai.org/proceedings/2021/0566.pdf)). -## Example Usage -```python -import unified_planning -from unified_planning.io import PDDLReader -from unified_planning.shortcuts import SequentialSimulator -from amlgym.util.util import empty_domain -from olam.OLAM import OLAM +OLAM learns PDDL action models online — interleaving planning and execution — without requiring pre-collected trajectories. Starting from a domain skeleton (predicates and operator signatures with empty preconditions and effects), it incrementally refines the action model as the agent acts in a simulated environment. -# Disable printing of planning engine credits -unified_planning.shortcuts.get_environment().credits_stream = None +> The original code used for the paper experiments is preserved at the [`ijcai-2021`](https://github.com/LamannaLeonardo/OLAM/tree/ijcai-2021) branch. -domain_ref_path = "olam/benchmarks/domains/blocksworld.pddl" -problem_path = "olam/benchmarks/problems/blocksworld/1_p00_blocksworld_gen.pddl" -empty_domain_path = empty_domain(domain_ref_path) # remove preconditions/effects -olam = OLAM(empty_domain_path) -sim_problem = PDDLReader().parse_problem(domain_ref_path, - problem_path) -simulator = SequentialSimulator(sim_problem) -learned_domain_str, trajectory = olam.run(simulator, max_steps=100) +## Installation -print(f"Generated a trajectory with {len(trajectory.observations)} states") -print(f"Domain learned: {learned_domain_str}") +### From PyPI + +```bash +pip install olam ``` -## Installation for developers +### For developers -Clone this repository and install in developer mode: +Clone the repository and install in editable mode: -``` +```bash +git clone https://github.com/LamannaLeonardo/OLAM.git +cd OLAM pip install -e . ``` +--- + +## Quick Start + +```python +from unified_planning.io import PDDLReader +from unified_planning.shortcuts import SequentialSimulator +from amlgym.benchmarks import get_domain_path, get_problems_path +from amlgym.util.util import empty_domain + +from olam.OLAM import OLAM + +# Instantiate a simulated environment from a PDDL domain and problem +domain = 'blocksworld' +domain_ref_path = get_domain_path(domain) +problem_path = get_problems_path(domain, kind='learning')[0] +problem = PDDLReader().parse_problem(domain_ref_path, problem_path) +env = SequentialSimulator(problem=problem) + +# Get an input domain path with predicates and operators signature +input_domain_path = empty_domain(domain_ref_path) -## Citations +# Run the OLAM algorithm +olam = OLAM(input_domain_path) +domain_learned, trajectory = olam.run(env, max_steps=100) + +# Print learned domain and produced trajectory +print("##################### Learned domain #####################") +print(domain_learned) + +print("################# Generated trajectory ##################") +print(trajectory) ``` + +## Benchmark Results +OLAM is evaluated on 23 classical planning domains drawn from the IPC benchmark suite. Each domain is paired with a set of 10 problem instances used for incremental online learning. +The following table reports for each domain the *syntactic precision and recall* of the learned model and CPU time (seconds) averaged over all instances. + +| Domain | Precision | Recall | CPU Time (s) | +|---|---|---|---| +| Barman | 0.98 | 1.00 | 385.92 | +| Blocksworld | 1.00 | 1.00 | 3.57 | +| Depots | 0.98 | 1.00 | 5.52 | +| Driverlog | 0.94 | 1.00 | 7.67 | +| Elevators | 0.89 | 1.00 | 183.89 | +| Ferry | 0.93 | 1.00 | 2.07 | +| Floortile | 0.83 | 1.00 | 5.17 | +| Gold-Miner | 0.81 | 1.00 | 15.76 | +| Grid | 0.82 | 1.00 | 5.06 | +| Gripper | 1.00 | 1.00 | 0.43 | +| Hanoi | 0.88 | 1.00 | 0.39 | +| Matching-BW | 0.99 | 1.00 | 66.49 | +| Miconic | 1.00 | 1.00 | 3.99 | +| N-Puzzle | 0.88 | 1.00 | 0.36 | +| NoMystery | 0.92 | 1.00 | 1.46 | +| Parking | 0.89 | 1.00 | 2.49 | +| Rover | 0.83 | 0.88 | 48.19 | +| Satellite | 1.00 | 1.00 | 3.57 | +| Sokoban | 0.88 | 1.00 | 20.39 | +| Spanner | 0.93 | 1.00 | 5.54 | +| TPP | 0.95 | 1.00 | 366.42 | +| Transport | 0.93 | 1.00 | 5.56 | +| Zenotravel | 1.00 | 1.00 | 6.41 | + +--- + +## Citation + +If you find this code useful for your research, please cite: + +```bibtex @inproceedings{ijcai2021-566, title = {Online Learning of Action Models for PDDL Planning}, - author = {Lamanna, Leonardo and Saetti, Alessandro and Serafini, Luciano and Gerevini, Alfonso and Traverso, Paolo}, + author = {Lamanna, Leonardo and Saetti, Alessandro and Serafini, Luciano + and Gerevini, Alfonso and Traverso, Paolo}, booktitle = {Proceedings of the Thirtieth International Joint Conference on Artificial Intelligence, {IJCAI-21}}, publisher = {International Joint Conferences on Artificial Intelligence}, @@ -69,8 +121,14 @@ pip install -e . } ``` +--- + ## License -This project is licensed under the MIT License - see the [LICENSE](/LICENSE.md) file for details. + +This project is licensed under the MIT License — see the [LICENSE](LICENSE.md) file for details. + +--- ## Acknowledgements -This code has been refactored with the help of [Ejdis Gjinika](https://github.com/ejdisgjinika) \ No newline at end of file + +Refactored with the help of [Ejdis Gjinika](https://github.com/ejdisgjinika). diff --git a/olam/learning/__pycache__/__init__.cpython-310.pyc b/olam/learning/__pycache__/__init__.cpython-310.pyc deleted file mode 100644 index a2a2087260c7a0201482d9ad5eaf8a1a3ce32f4f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 174 zcmd1j<>g`kf-s}anIQTxh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o10SKeRZts93)& zH77qgGcC0!U*9D^ximL5ucTN%C$TIaC}3n@WTszGl%JKF3=|CT_i^;qFUZeH%+=3H pO)SdG%uCmgkI&4@EQycTE2zB1VUwGmQks)$2ePV|2}rOo007)yDq{cu diff --git a/olam/learning/__pycache__/action_generator.cpython-310.pyc b/olam/learning/__pycache__/action_generator.cpython-310.pyc deleted file mode 100644 index d4c17052e71606b06370a50e56e5c92aa27011ee..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 12765 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 diff --git a/olam/learning/__pycache__/goal_generator.cpython-310.pyc b/olam/learning/__pycache__/goal_generator.cpython-310.pyc deleted file mode 100644 index be45f5d43d951be02a6b037730d0291907adf7af..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 11989 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 LPNzCoN7(-ZjM@~? diff --git a/olam/modeling/__pycache__/PDDLenv.cpython-310.pyc b/olam/modeling/__pycache__/PDDLenv.cpython-310.pyc deleted file mode 100644 index 1662451088d01c5a0544e454ccc8a931e03697b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 6721 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 diff --git a/olam/modeling/__pycache__/symbolic_observation.cpython-310.pyc b/olam/modeling/__pycache__/symbolic_observation.cpython-310.pyc deleted file mode 100644 index 372e7b739d1145ad1a8f4e7bde17c4a92850e8e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2123 zcmbVN&u`l{6ecOjzv3Xx>TO6{3>tE4=*3tks3M&xphTCX zjm1b#$v?0icS?>q@4wM?r=4@#Y46dNYd2myi~tGhiI4B``#wIZ&CLdZruP0wzx4_E z6F-(4*vMDV%{~mAa4Jbg2bAKRNtSs7&&@sQXTcz#M9^;t_jzzhcyPfk=%B(YhooKo z3;ao&7IhxmIFYe2@UfM|$+6(kNUM?1_7qIPv%caY!PU!ck;l(q6=Xm;8L$_S&%hJD z2t+VsJ494C>k;m8|B?)r%Lc>n{aSHx1zxOYj;$O(H&F6aflrf_DzKV`e&iaP@jg#8fRTQD4f)62>^ zwd4%ker2!OA-O?LJ!5s76|D2P@E|c=g~e|8`(^h90BE`sAytwNg;w3CDj8=8NLR)a z1%|!HdtY=x0Vg5>;}6fjd-8pEq-30RGf;vANV+A!(Gv8X(P`1>$<)|HWut>_%o0;> zk!g1geVr(RETgE?gG>Op1DKS)ZLjc8RGJqRqqG&g*d8g9+H@kK66YIQ_(sU#o3rT+ z2v$_*+ukd~KcLfx?+9O1w6J5HuON*?dC-xlTSS@zNsc0NMXw3c1QdBw>&QkG{^&L_ zp*)=vUW@0UZNeoxxZA9xm5W1su2NvHVrH{z;%XOHRM_#bB zL~gms4bv428o-6gj7FZ`im121b|1Qn)v8QC|4*@2a9L(hBZKc_D;GylRVL#9v31A$ z{cPzE%aa2mHDF{2mq6%`OY002)U?J@@hMIo!mu9sGJ$s?uTdZC057)hxML*!35Ht> z{+;!Az(<+5I)~306ew~6B?>ML?YEi6BIs1GHk%-kDi@!@8dpCWbh@)n0B%(u9*0^K z<#8sWsAxnHl&G=9c{7S$k7GIi17(4$1k6596RYvc6kAaQ6<)y;0k4UPBK-lTg*OTc zsIX3kIz*cTe^Er2n8Aaf-JolO`0QR#W6Wz&R&CK{)g83ot`-}MM^+e(&=mFII8Urn r(##@$G|tmuicjzS+3C1q>oT3;wI+U1>&?!4fO%*IJvH1BrB>KQK>=#7ZECi1zJr!<7UHp*O^%- z#BwAg=gx&2s#K2L5r52FxzKZOy_EOHj_pLCGOL+=``*mF_kQnV%Z-hQ!1(*%kL*v6 zkiYO_b-3{H0H$ukB8Z?l8PG1JNVA*`oUUVOCwB*4*P}$zM?|>7J14@MvMKHQ!rvoF z@B+@0gqk(ME8few*6^{p+pDs&_^i+sFM1L<*Y{2b`(>W>9`9?ZjyZ~Zcyx6vjM@jT zBwZ>VbhxfYh!1!w>`daZr*{e!*YHH=uG;IQIUC_n>w(*s$Mylxa*owVKJ1{?m`LYhn zgdCFRbV7ea94RPZV;#lwu`5K(i+DvzT$OQkAmeIb!(wxL$Q2*p=JwSS`!eQ2NU_{I zv#q^gbP}d~Fvs|OIFyA*m~pkt`zi$H??i3D>(y7SClCnTI+l6a%lcB4t%qfAG>}E5 zTRA^2fpPD{dmp!ksziiz>&wTV?|#uLb3SMdN+I*Cc-mT;-W;9+W+bkS!hK#r4<<|d)RRAj0y49;{NMFMRQJO8AK$!@Q zpWXa6N-*Bzx2`xhllLgdE(Qhy3eYBr{sjm@&uE3ILZ|d0`ToIo?2Mf`6Drsz#7dk) zC@+w_3ljIto4A!Tu{`12BtI~fOz6b>6^ikhJ#n->|MnK&3{Kel?FphD!R;5)8|t-^@e6d|6-~zMZaj{n_|6>Bu@fgz5|}kvK%ywv zI?J=5pN}wajFZbkA)JtUwtS3R@PSNxi)(jtnJ%fWl%bhTN#kXOkUyFr&)`O$UxhwM zad(=&4;Skju(-5ALzoR(r*+n#?@;!WOE0C`{K%zHpjVicSg#su0mCpw_h|=Olmki< zI?I47!4K0^$sw3<7mwl{Ast^|3I2urQeI=UbS9U^nR)dXhNCEupH7ccKt31SN5-)n=`qcG(c z6%^G6u(1VGV@B2hx!bSD^%WQFbxF;DuNbp5HBp*Ep^xCo)YQ`SXvFim#LY7R3){8X zN>g4GCFBisbPYJ5*9tp;YT)u7E-@}>z=}~8Vk|9%<$*ZqZCD~wV~jEyzHYdU5XMH$ zu{%1Dcg`kf-s}anIQTxh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o6vPKeRZts93)& zH77qgGcC0!U*9D^ximL5ucTN%C$TIaC}3n@WTszGl%JKF3=|CT_i^;qFUZeH%+)U~ l$;{D@kI&4@EQycTE2zB1VUwGmQks)$2ePJ^2}rOo001MBD9r!> diff --git a/olam/util/__pycache__/ground_actions_util.cpython-310.pyc b/olam/util/__pycache__/ground_actions_util.cpython-310.pyc deleted file mode 100644 index 802eacdab0cbf7f800274edada814c64626ab01d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2553 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 F{{`I=h1>uD diff --git a/olam/util/executability/__pycache__/__init__.cpython-310.pyc b/olam/util/executability/__pycache__/__init__.cpython-310.pyc deleted file mode 100644 index 1f4361343daa07ac8631a3d98f5f32ccf253f162..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 184 zcmd1j<>g`kf-s}anIQTxh(HF6K#l_t7qb9~6oz01O-8?!3`HPe1o10cKeRZts93)& zH77qgGcC0!U*9D^ximL5ucTN%C$TIaC}3n@WTszGl%JKF3=|CT_i^;qFUZeH%+)U~ z$;{DDtw>ESElEtu%*iaN)Q^wP%*!l^kJl@xyv1RYo1apelWGUDw3rD Date: Sat, 4 Apr 2026 10:45:21 +0200 Subject: [PATCH 2/4] format trajectory print --- olam/OLAM.py | 36 +++++++++++++++++++++--------------- olam/modeling/trajectory.py | 2 +- 2 files changed, 22 insertions(+), 16 deletions(-) diff --git a/olam/OLAM.py b/olam/OLAM.py index 35e1573..90d4b53 100644 --- a/olam/OLAM.py +++ b/olam/OLAM.py @@ -52,27 +52,33 @@ def __init__(self, Example: .. code-block:: python - from amlgym.util.util import empty_domain from unified_planning.io import PDDLReader - from olam.OLAM import OLAM from unified_planning.shortcuts import SequentialSimulator - import unified_planning + from amlgym.benchmarks import get_domain_path, get_problems_path + from amlgym.util.util import empty_domain + + from olam.OLAM import OLAM + + # Instantiate a simulated environment from a PDDL domain and problem + domain = 'blocksworld' + domain_ref_path = get_domain_path(domain) + problem_path = get_problems_path(domain, kind='learning')[0] + problem = PDDLReader().parse_problem(domain_ref_path, problem_path) + env = SequentialSimulator(problem=problem) - # Disable printing of planning engine credits - unified_planning.shortcuts.get_environment().credits_stream = None + # Get an input domain path with predicates and operators signature + input_domain_path = empty_domain(domain_ref_path) - domain_ref_path = "olam/benchmarks/domains/blocksworld.pddl" - problem_path = "olam/benchmarks/problems/blocksworld/1_p00_blocksworld_gen.pddl" - empty_domain_path = empty_domain(domain_ref_path) - olam = OLAM(empty_domain_path) + # Run the OLAM algorithm + olam = OLAM(input_domain_path) + domain_learned, trajectory = olam.run(env, max_steps=100) - sim_problem = PDDLReader().parse_problem(domain_ref_path, - problem_path) - simulator = SequentialSimulator(sim_problem) - learned_domain_str, trajectory = olam.run(simulator, max_steps=100) + # Print learned domain and produced trajectory + print("##################### Learned domain #####################") + print(domain_learned) - print(f"Generated a trajectory with {len(trajectory.observations)} states") - print(f"Domain learned: {learned_domain_str}") + print("################# Generated trajectory ##################") + print(trajectory) """ diff --git a/olam/modeling/trajectory.py b/olam/modeling/trajectory.py index 9ce96c7..a57a96c 100644 --- a/olam/modeling/trajectory.py +++ b/olam/modeling/trajectory.py @@ -38,7 +38,7 @@ def __str__(self): else: trajectory_str += f"{literal}, " if i < len(self.observations) - 1: - trajectory_str += f"\n (action {self.actions[i].action.name} )\n" + trajectory_str += f"\n(:action {self.actions[i]})\n" return trajectory_str def __repr__(self): From 467a5b4039659235b7d96dafcee30f82f8ce8b32 Mon Sep 17 00:00:00 2001 From: Leonardo Lamanna Date: Sat, 4 Apr 2026 10:45:33 +0200 Subject: [PATCH 3/4] bump pypi version --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 432fb6c..76586de 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -22,7 +22,7 @@ addopts = "--ignore=tests/heavy" [project] name = "olam" -version = "1.0.2" +version = "1.0.3" dynamic = ["dependencies"] requires-python = ">=3.10" maintainers = [ From 3bf55a2c9fa76b192121fd3630fda885e5818c2c Mon Sep 17 00:00:00 2001 From: Leonardo Lamanna Date: Sat, 4 Apr 2026 10:58:23 +0200 Subject: [PATCH 4/4] add amlgym integration --- README.md | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index c4dc641..0a4ed40 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,15 @@ OLAM learns PDDL action models online — interleaving planning and execution pip install olam ``` +### From [AMLGym](https://amlgym.readthedocs.io/en/latest/index.html) +```bash +pip install amlgym +``` + +Please refer to [OLAM integration in AMLGym](https://amlgym.readthedocs.io/en/latest/active_algorithms/olam.html) +for a usage example. + + ### For developers Clone the repository and install in editable mode: @@ -36,6 +45,8 @@ git clone https://github.com/LamannaLeonardo/OLAM.git cd OLAM pip install -e . ``` +> OLAM is integrated into [AMLGYM](https://github.com/LamannaLeonardo/OLAM/tree/ijcai-2021). + --- @@ -105,7 +116,7 @@ The following table reports for each domain the *syntactic precision and recall* ## Citation -If you find this code useful for your research, please cite: +If you find OLAM useful for your research, please cite the following paper: ```bibtex @inproceedings{ijcai2021-566,