diff --git a/pddl/main.py b/pddl/main.py index 6766cce..9c05f1c 100644 --- a/pddl/main.py +++ b/pddl/main.py @@ -5,7 +5,7 @@ from src.model.asm4_structure import Asm4Structure from src.usecases.assembly_to_pddl_use_case import AssemblyToPddlUseCase -# python3 main.py --stepStructurePath /home/idontsudo/t/framework/asp-review-app/server/public/cubes/generation/step-structure.json --outPath /home/idontsudo/t/framework/pddl/ +# python3 main.py --stepStructurePath /Users/idontsudo/robo/step-structure.json --outPath /Users/idontsudo/robo/pddl/out/ if __name__ == "__main__": parser = argparse.ArgumentParser() diff --git a/pddl/src/usecases/assembly_to_pddl_use_case.py b/pddl/src/usecases/assembly_to_pddl_use_case.py index 7583043..a6ba8ef 100644 --- a/pddl/src/usecases/assembly_to_pddl_use_case.py +++ b/pddl/src/usecases/assembly_to_pddl_use_case.py @@ -7,13 +7,11 @@ import os class AssemblyToPddlUseCase: def call(assembly: List[str], rootLabel: str): - print(assembly) partType = UserType("part") assemblyType = UserType('assembly') objectsPartPddl = [] objectsAsmToPddl = [] - i = 0 for el in assembly: objectsPartPddl.append(Object(el, partType)) @@ -30,15 +28,26 @@ class AssemblyToPddlUseCase: connected = Fluent('part-of', BoolType(), l_from=partType, l_to=assemblyType) + assemblyOrder = Fluent('assembly_order', BoolType(), + l_from=assemblyType, l_to=assemblyType) i = 0 for el in objectsPartPddl: problem.set_initial_value(connected(el, objectsAsmToPddl[i]), True) i = i+1 goal = Fluent(rootLabel) + problem.add_goal(connected(objectsPartPddl[objectsPartPddl.__len__( ) - 1], objectsAsmToPddl[objectsAsmToPddl.__len__() - 1]),) + + i = 0 + for el in objectsAsmToPddl: + if objectsAsmToPddl[i-1] != objectsAsmToPddl[objectsAsmToPddl.__len__() - 1]: + problem.set_initial_value(assemblyOrder(objectsAsmToPddl[i-1], el), True) + i = i+1 + + problem.add_goal(assemblyOrder(objectsAsmToPddl[objectsAsmToPddl.__len__( + ) - 1], objectsAsmToPddl[objectsAsmToPddl.__len__() - 1]),) return { "problem": unified_planning.io.PDDLWriter(problem).get_problem(), 'domain': FS.readFile(os.path.dirname(os.path.realpath(__file__)) + '/../../mocks' + '/domain.txt'), } -