apla-toolbox / pythonpddl Goto Github PK
View Code? Open in Web Editor NEW🧭🔍 A PDDL Planner in Python partially wrapping PDDL.jl using JuliaPy
License: Apache License 2.0
🧭🔍 A PDDL Planner in Python partially wrapping PDDL.jl using JuliaPy
License: Apache License 2.0
python3 -m pip install pytest
The CI shows it has passed with 2 checks when the format commit is applied. We will move formatting to a commit to main when a MR is merged
show how to use DataAnalyst() in REPL mode
add screenshots of the plot etc
black
formatter and run black .
Describe the bug
On some domains, delete relaxation either run indefinitely at a fixed point or breaks completely the code
To Reproduce
Run the DataAnalyst.plot_astar_comparison method
Expected behavior
It will hold on some domains, exit with failure on others
The current output of the planning problem is difficult to interpret for someone who does not know what to look for. For example, the current solution provided is something like the following:
[(<PyCall.jlwrap flip_row(r1)>, 1), (<PyCall.jlwrap flip_row(r3)>, 1), (<PyCall.jlwrap flip_column(c2)>, 1)]
Computation time: 18.53
It would be more preferable to have the output in a much simpler fashion, something like :
flip_row(r1), 1
flip_row(r3), 1
flip_row(c2), 1
I think this might be easily achieved by storing the output and trimming off the unnecessary bits, but we'll see about that during implementation.
Hey there and thank you for using Issue Tracker!
Do the checklist before filing an issue:
Make sure to add all the information needed to understand the bug so that someone can help. If the info is missing we'll add the 'Needs more information' label and close the issue until there is enough information.
Only computes single facts as of now (hardcoded in the julia utils we added)
Need to write Julia functions to compute costs to tuple/truple/etc..; of facts
This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.
These updates have all been created already. Click a checkbox below to force a retry/rebase of any.
.github/workflows/build.yml
actions/checkout v2
actions/setup-python v3
actions/checkout v2.4.0
julia-actions/setup-julia v1
snickerbockers/submodules-init v4
.github/workflows/format.yml
actions/checkout v2
actions/checkout v2
actions/setup-python v3
stefanzweifel/git-auto-commit-action v4.14.0
.github/workflows/tests.yml
actions/checkout v2
actions/setup-python v3
actions/checkout v2.4.0
julia-actions/setup-julia v1
snickerbockers/submodules-init v4
actions/checkout v2
actions/setup-python v3
actions/checkout v2.4.0
julia-actions/setup-julia v1
snickerbockers/submodules-init v4
codecov/codecov-action v2
requirements.txt
julia ==0.5.7
coloredlogs ==15.0.1
matplotlib ==3.5.1
Every method implemented must be tested to reach 100% coverage.
Will be implemented having A* in mind (A* with H=0)
Add a metrics class for scalability
In DFS, the visited list is the path
But we return the last node and then do a traceback from parent to child like with other planners
I'm not sure it works
Maybe we should return a path, computation_time, opened_nodes for DFS instead
Investigate if it breaks or not functions that call it (but it shouldn't since only AutomatedPlanner calls dfs.search() directly
We have:
if self.automated_planner.satisfies(self.automated_planner.problem.goal, current_node.state):
computation_time = now() - time_start
self.automated_planner.logger.debug( "Search finished at: " + str(timestamp.now()))
return current_node, computation_time, opened_nodes
return None, computation_time, opened_nodes
def depth_first_search(self):
dfs = DepthFirstSearch(self)
last_node, total_time, opened_nodes = dfs.search()
path = self.__retrace_path(last_node)
return path, total_time, opened_nodes
We should have:
if self.automated_planner.satisfies(self.automated_planner.problem.goal, current_node.state):
computation_time = now() - time_start
self.automated_planner.logger.debug( "Search finished at: " + str(timestamp.now()))
return self.visited, computation_time, opened_nodes
return [], computation_time, opened_nodes
def depth_first_search(self):
dfs = DepthFirstSearch(self)
path, total_time, opened_nodes = dfs.search()
return path, total_time, opened_nodes
I think I figured out why the Julia API calls take time.
The first time they're called, they're initialized ! and when they're called again afterwards, they're ok !
I will try to run them at least once in the constructor and see if it improves the times on first execution
Should display:
... etc
for all h in available_heuristics:
Something along those lines, then move from the "data/" aspect of the code and add pddl-domains-problems instead with the submodule
Yay
A* with g = 0
As of now, every time we want to open a state we:
This is quite expensive computationally. A way to reduce those costs is to hash the actions available with the same hash as a state using __hash
so that we only have to get it from a dict if we already did an action on the same state.
Same goes for the computation of a child state. If we do action x on parent y again, we should be able to retrieve the child state way faster than before.
pyjulia-pddl-docs
Integrate class methods for:
import logging
logging.basicConfig(filename='app.log', encoding='utf-8', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')
logging.error('And non-ASCII stuff, too, like Øresund and Malmö')
Add new features to readme
Dose this toolbox support for PDDL+, such as "event" or "process"?
Test and compare the implemented heuristics
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.