{ "cells": [ { "cell_type": "markdown", "metadata": { "id": "JDt03iE12fnd" }, "source": [ "# MA-PDDL I/O Example MA-Logistic\n", "\n", "\n", "[![Open In GitHub](https://img.shields.io/badge/see-Github-579aca?logo=github)](https:///github.com/aiplan4eu/unified-planning/blob/master/docs/notebooks/io/02-mapddl-writer-example.ipynb)\n", "[![Open In Colab](https://colab.research.google.com/assets/colab-badge.svg)](https://colab.research.google.com/github/aiplan4eu/unified-planning/blob/master/docs/notebooks/io/02-mapddl-writer-example.ipynb)\n", "\n" ] }, { "cell_type": "markdown", "metadata": { "id": "LdBQnYDT2g3I" }, "source": [ "This notebook will show the possible interations between the ma-pddl language and the unified_planning usage." ] }, { "cell_type": "markdown", "metadata": { "id": "DKgLnOLN2hCo" }, "source": [ "## Setup" ] }, { "cell_type": "markdown", "metadata": { "id": "-_EplCIs3jXN" }, "source": [ "We start by installing the library with PIP" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "txS5e5axew6C", "outputId": "5e1c4418-df7f-407e-f4c7-c208b3089305", "tags": [ "remove_from_CI" ] }, "outputs": [], "source": [ "!pip install --pre unified-planning[fmap]" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "D5EO_Nmgf3rz" }, "outputs": [], "source": [ "from unified_planning.shortcuts import *\n", "from unified_planning.model.multi_agent import *\n", "from collections import namedtuple\n", "from unified_planning.io.ma_pddl_writer import MAPDDLWriter\n", "\n", "\n", "problem = MultiAgentProblem(\"ma-logistic\")\n", "truck1 = Agent(\"truck1\", problem)\n", "truck2 = Agent(\"truck2\", problem)\n", "airplane = Agent(\"airplane\", problem)\n", "\n", "object = UserType(\"object\")\n", "location = UserType(\"location\", object)\n", "vehicle = UserType(\"vehicle\", object)\n", "package = UserType(\"package\", object)\n", "city = UserType(\"city\", object)\n", "airport = UserType(\"airport\", location)\n", "truck_ = UserType(\"truck_\", vehicle) \n", "airplane_ = UserType(\"airplane_\", vehicle) \n", "\n", "\n", "pos = Fluent(\"pos\", location=location)\n", "at = Fluent(\"at\", BoolType(), object=object, location=location)\n", "In = Fluent(\"in\", BoolType(), package=package, vehicle=vehicle)\n", "on = Fluent(\"on\", BoolType(), object=object)\n", "in_city = Fluent(\"in_city\", BoolType(), location=location, city=city)\n", "\n", "truck1.add_public_fluent(pos, default_initial_value=False)\n", "truck1.add_private_fluent(in_city, default_initial_value=False)\n", "truck1.add_public_fluent(on, default_initial_value=False)\n", "truck2.add_public_fluent(pos, default_initial_value=False)\n", "truck2.add_private_fluent(in_city, default_initial_value=False)\n", "truck2.add_public_fluent(on, default_initial_value=False)\n", "airplane.add_public_fluent(pos, default_initial_value=False)\n", "airplane.add_public_fluent(on, default_initial_value=False)\n", "problem.ma_environment.add_fluent(at, default_initial_value=False)\n", "problem.ma_environment.add_fluent(In, default_initial_value=False)\n", "\n", "\n", "load_truck = InstantaneousAction(\"load_truck\", loc=location, obj=package)\n", "obj = load_truck.parameter(\"obj\")\n", "loc = load_truck.parameter(\"loc\")\n", "load_truck.add_precondition(at(obj, loc))\n", "load_truck.add_precondition(pos(loc))\n", "load_truck.add_effect(at(obj, loc), False)\n", "load_truck.add_effect(on(obj), True)\n", "\n", "\n", "unload_truck = InstantaneousAction(\"unload_truck\", obj=package, loc=location)\n", "obj = unload_truck.parameter(\"obj\")\n", "loc = unload_truck.parameter(\"loc\")\n", "unload_truck.add_precondition(pos(loc))\n", "unload_truck.add_precondition(on(obj))\n", "unload_truck.add_effect(on(obj), False)\n", "unload_truck.add_effect(at(obj, loc), True)\n", "\n", "\n", "drive_truck = InstantaneousAction(\"drive_truck\", loc_from=location, loc_to=location, city_=city)\n", "loc_from = drive_truck.parameter(\"loc_from\")\n", "loc_to = drive_truck.parameter(\"loc_to\")\n", "city_ = drive_truck.parameter(\"city_\")\n", "drive_truck.add_precondition(pos(loc_from))\n", "drive_truck.add_precondition(in_city(loc_from, city_))\n", "drive_truck.add_precondition(in_city(loc_to, city_))\n", "drive_truck.add_effect(pos(loc_from), False)\n", "drive_truck.add_effect(pos(loc_to), True)\n", "\n", "load_airplane = InstantaneousAction(\"load_airplane\", loc = airport, obj=package)\n", "loc = load_airplane.parameter(\"loc\")\n", "obj = load_airplane.parameter(\"obj\")\n", "load_airplane.add_precondition(at(obj, loc))\n", "load_airplane.add_precondition(pos(loc))\n", "load_airplane.add_effect(at(obj, loc), False)\n", "load_airplane.add_effect(on(obj), True)\n", "\n", "unload_airplane = InstantaneousAction(\"unload_airplane\", loc = airport, obj=package)\n", "loc = load_airplane.parameter(\"loc\")\n", "obj = load_airplane.parameter(\"obj\")\n", "unload_airplane.add_precondition(on(obj))\n", "unload_airplane.add_precondition(pos(loc))\n", "unload_airplane.add_effect(on(obj), False)\n", "unload_airplane.add_effect(at(obj, loc), True)\n", "\n", "fly_airplane = InstantaneousAction(\"fly_airplane\", loc_from=airport, loc_to=airport)\n", "loc_from = fly_airplane.parameter(\"loc_from\")\n", "loc_to = fly_airplane.parameter(\"loc_to\")\n", "fly_airplane.add_precondition(pos(loc_from))\n", "fly_airplane.add_effect(pos(loc_from), False)\n", "fly_airplane.add_effect(pos(loc_to), True)\n", "\n", "truck1.add_action(drive_truck)\n", "truck1.add_action(unload_truck)\n", "truck1.add_action(load_truck)\n", "truck2.add_action(drive_truck)\n", "truck2.add_action(unload_truck)\n", "truck2.add_action(load_truck)\n", "airplane.add_action(load_airplane)\n", "airplane.add_action(unload_airplane)\n", "airplane.add_action(fly_airplane)\n", "problem.add_agent(truck1)\n", "problem.add_agent(truck2)\n", "problem.add_agent(airplane)\n", "\n", "\n", "#problem\n", "obj21 = Object(\"obj21\", package)\n", "obj22 = Object(\"obj22\", package)\n", "obj23 = Object(\"obj23\", package)\n", "obj11 = Object(\"obj11\", package)\n", "obj13 = Object(\"obj13\", package)\n", "obj12 = Object(\"obj12\", package)\n", "apt2 = Object(\"apt2\", airport)\n", "apt1 = Object(\"apt1\", airport)\n", "pos1 = Object(\"pos1\", location)\n", "cit1 = Object(\"cit1\", city)\n", "pos2 = Object(\"pos2\", location)\n", "cit2 = Object(\"cit2\", city)\n", "\n", "\n", "problem.add_object(obj21)\n", "problem.add_object(obj22)\n", "problem.add_object(obj23)\n", "problem.add_object(obj11)\n", "problem.add_object(obj13)\n", "problem.add_object(obj12)\n", "problem.add_object(apt2)\n", "problem.add_object(apt1)\n", "problem.add_object(pos1)\n", "problem.add_object(cit1)\n", "problem.add_object(pos2)\n", "problem.add_object(cit2)\n", "\n", "problem.set_initial_value(Dot(truck1, pos(pos1)), True)\n", "problem.set_initial_value(at(obj11, pos1), True)\n", "problem.set_initial_value(at(obj12, pos1), True)\n", "problem.set_initial_value(at(obj13, pos1), True)\n", "problem.set_initial_value(Dot(truck1, in_city(pos1, cit1)), True)\n", "problem.set_initial_value(Dot(truck1, in_city(apt1, cit1)), True)\n", "problem.set_initial_value(Dot(truck1, pos(pos1)), True)\n", "\n", "problem.set_initial_value(Dot(truck2, pos(pos2)), True)\n", "problem.set_initial_value(at(obj21, pos2), True)\n", "problem.set_initial_value(at(obj22, pos2), True)\n", "problem.set_initial_value(at(obj23, pos2), True)\n", "problem.set_initial_value(Dot(truck2, in_city(pos2, cit2)), True)\n", "problem.set_initial_value(Dot(truck2, in_city(apt2, cit2)), True)\n", "problem.set_initial_value(Dot(truck2, pos(pos2)), True)\n", "\n", "problem.set_initial_value(Dot(airplane, pos(apt2)), True)\n", "problem.set_initial_value(at(obj11, pos1), True)\n", "problem.set_initial_value(at(obj12, pos1), True)\n", "problem.set_initial_value(at(obj13, pos1), True)\n", "problem.set_initial_value(Dot(airplane, pos(apt2)), True)\n", "\n", "problem.add_goal(at(obj11, apt1))\n", "problem.add_goal(at(obj23, pos1))\n", "problem.add_goal(at(obj13, apt1))\n", "problem.add_goal(at(obj21, pos1))\n", "\n", "w = MAPDDLWriter(problem)\n", "w.write_ma_domain('logistic')\n", "w.write_ma_problem('logistic')" ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "zGNGyJpk4XdB", "outputId": "53f9aecd-566d-44d8-d142-c54fb6c4786a" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "problem name = ma-logistic\n", "\n", "types = [object, location - object, city - object, package - object, vehicle - object, airport - location]\n", "\n", "environment fluents = [\n", " bool at[object=object, location=location - object]\n", " bool in[package=package - object, vehicle=vehicle - object]\n", "]\n", "\n", "agents = [\n", " Agent name = truck1\n", "\n", "private fluents = [\n", " bool in_city[location=location - object, city=city - object]\n", "]\n", "\n", "public fluents = [\n", " bool pos[location=location - object]\n", " bool on[object=object]\n", "]\n", "\n", "actions = [\n", " action drive_truck(location - object loc_from, location - object loc_to, city - object city_) {\n", " preconditions = [\n", " pos(loc_from)\n", " in_city(loc_from, city_)\n", " in_city(loc_to, city_)\n", " ]\n", " effects = [\n", " pos(loc_from) := false\n", " pos(loc_to) := true\n", " ]\n", " }\n", " action unload_truck(package - object obj, location - object loc) {\n", " preconditions = [\n", " pos(loc)\n", " on(obj)\n", " ]\n", " effects = [\n", " on(obj) := false\n", " at(obj, loc) := true\n", " ]\n", " }\n", " action load_truck(location - object loc, package - object obj) {\n", " preconditions = [\n", " at(obj, loc)\n", " pos(loc)\n", " ]\n", " effects = [\n", " at(obj, loc) := false\n", " on(obj) := true\n", " ]\n", " }\n", "]\n", "\n", "\n", " Agent name = truck2\n", "\n", "private fluents = [\n", " bool in_city[location=location - object, city=city - object]\n", "]\n", "\n", "public fluents = [\n", " bool pos[location=location - object]\n", " bool on[object=object]\n", "]\n", "\n", "actions = [\n", " action drive_truck(location - object loc_from, location - object loc_to, city - object city_) {\n", " preconditions = [\n", " pos(loc_from)\n", " in_city(loc_from, city_)\n", " in_city(loc_to, city_)\n", " ]\n", " effects = [\n", " pos(loc_from) := false\n", " pos(loc_to) := true\n", " ]\n", " }\n", " action unload_truck(package - object obj, location - object loc) {\n", " preconditions = [\n", " pos(loc)\n", " on(obj)\n", " ]\n", " effects = [\n", " on(obj) := false\n", " at(obj, loc) := true\n", " ]\n", " }\n", " action load_truck(location - object loc, package - object obj) {\n", " preconditions = [\n", " at(obj, loc)\n", " pos(loc)\n", " ]\n", " effects = [\n", " at(obj, loc) := false\n", " on(obj) := true\n", " ]\n", " }\n", "]\n", "\n", "\n", " Agent name = airplane\n", "\n", "private fluents = [\n", "]\n", "\n", "public fluents = [\n", " bool pos[location=location - object]\n", " bool on[object=object]\n", "]\n", "\n", "actions = [\n", " action load_airplane(airport - location loc, package - object obj) {\n", " preconditions = [\n", " at(obj, loc)\n", " pos(loc)\n", " ]\n", " effects = [\n", " at(obj, loc) := false\n", " on(obj) := true\n", " ]\n", " }\n", " action unload_airplane(airport - location loc, package - object obj) {\n", " preconditions = [\n", " on(obj)\n", " pos(loc)\n", " ]\n", " effects = [\n", " on(obj) := false\n", " at(obj, loc) := true\n", " ]\n", " }\n", " action fly_airplane(airport - location loc_from, airport - location loc_to) {\n", " preconditions = [\n", " pos(loc_from)\n", " ]\n", " effects = [\n", " pos(loc_from) := false\n", " pos(loc_to) := true\n", " ]\n", " }\n", "]\n", "\n", "\n", "]\n", "\n", "objects = [\n", " object: [obj21, obj22, obj23, obj11, obj13, obj12, apt2, apt1, pos1, cit1, pos2, cit2]\n", " location - object: [apt2, apt1, pos1, pos2]\n", " city - object: [cit1, cit2]\n", " package - object: [obj21, obj22, obj23, obj11, obj13, obj12]\n", " vehicle - object: []\n", " airport - location: [apt2, apt1]\n", "]\n", "\n", "initial values = [\n", " truck1.pos(pos1) := true\n", " at(obj11, pos1) := true\n", " at(obj12, pos1) := true\n", " at(obj13, pos1) := true\n", " truck1.in_city(pos1, cit1) := true\n", " truck1.in_city(apt1, cit1) := true\n", " truck2.pos(pos2) := true\n", " at(obj21, pos2) := true\n", " at(obj22, pos2) := true\n", " at(obj23, pos2) := true\n", " truck2.in_city(pos2, cit2) := true\n", " truck2.in_city(apt2, cit2) := true\n", " airplane.pos(apt2) := true\n", " at(obj21, apt2) := false\n", " at(obj22, apt2) := false\n", " at(obj23, apt2) := false\n", " at(obj11, apt2) := false\n", " at(obj13, apt2) := false\n", " at(obj12, apt2) := false\n", " at(apt2, apt2) := false\n", " at(apt1, apt2) := false\n", " at(pos1, apt2) := false\n", " at(cit1, apt2) := false\n", " at(pos2, apt2) := false\n", " at(cit2, apt2) := false\n", " at(obj21, apt1) := false\n", " at(obj22, apt1) := false\n", " at(obj23, apt1) := false\n", " at(obj11, apt1) := false\n", " at(obj13, apt1) := false\n", " at(obj12, apt1) := false\n", " at(apt2, apt1) := false\n", " at(apt1, apt1) := false\n", " at(pos1, apt1) := false\n", " at(cit1, apt1) := false\n", " at(pos2, apt1) := false\n", " at(cit2, apt1) := false\n", " at(obj21, pos1) := false\n", " at(obj22, pos1) := false\n", " at(obj23, pos1) := false\n", " at(apt2, pos1) := false\n", " at(apt1, pos1) := false\n", " at(pos1, pos1) := false\n", " at(cit1, pos1) := false\n", " at(pos2, pos1) := false\n", " at(cit2, pos1) := false\n", " at(obj11, pos2) := false\n", " at(obj13, pos2) := false\n", " at(obj12, pos2) := false\n", " at(apt2, pos2) := false\n", " at(apt1, pos2) := false\n", " at(pos1, pos2) := false\n", " at(cit1, pos2) := false\n", " at(pos2, pos2) := false\n", " at(cit2, pos2) := false\n", " truck1.pos(apt2) := false\n", " truck1.pos(apt1) := false\n", " truck1.pos(pos2) := false\n", " truck1.in_city(apt2, cit1) := false\n", " truck1.in_city(pos2, cit1) := false\n", " truck1.in_city(apt2, cit2) := false\n", " truck1.in_city(apt1, cit2) := false\n", " truck1.in_city(pos1, cit2) := false\n", " truck1.in_city(pos2, cit2) := false\n", " truck1.on(obj21) := false\n", " truck1.on(obj22) := false\n", " truck1.on(obj23) := false\n", " truck1.on(obj11) := false\n", " truck1.on(obj13) := false\n", " truck1.on(obj12) := false\n", " truck1.on(apt2) := false\n", " truck1.on(apt1) := false\n", " truck1.on(pos1) := false\n", " truck1.on(cit1) := false\n", " truck1.on(pos2) := false\n", " truck1.on(cit2) := false\n", " truck2.pos(apt2) := false\n", " truck2.pos(apt1) := false\n", " truck2.pos(pos1) := false\n", " truck2.in_city(apt2, cit1) := false\n", " truck2.in_city(apt1, cit1) := false\n", " truck2.in_city(pos1, cit1) := false\n", " truck2.in_city(pos2, cit1) := false\n", " truck2.in_city(apt1, cit2) := false\n", " truck2.in_city(pos1, cit2) := false\n", " truck2.on(obj21) := false\n", " truck2.on(obj22) := false\n", " truck2.on(obj23) := false\n", " truck2.on(obj11) := false\n", " truck2.on(obj13) := false\n", " truck2.on(obj12) := false\n", " truck2.on(apt2) := false\n", " truck2.on(apt1) := false\n", " truck2.on(pos1) := false\n", " truck2.on(cit1) := false\n", " truck2.on(pos2) := false\n", " truck2.on(cit2) := false\n", " airplane.pos(apt1) := false\n", " airplane.pos(pos1) := false\n", " airplane.pos(pos2) := false\n", " airplane.on(obj21) := false\n", " airplane.on(obj22) := false\n", " airplane.on(obj23) := false\n", " airplane.on(obj11) := false\n", " airplane.on(obj13) := false\n", " airplane.on(obj12) := false\n", " airplane.on(apt2) := false\n", " airplane.on(apt1) := false\n", " airplane.on(pos1) := false\n", " airplane.on(cit1) := false\n", " airplane.on(pos2) := false\n", " airplane.on(cit2) := false\n", "]\n", "\n", "goals = [\n", " at(obj11, apt1)\n", " at(obj23, pos1)\n", " at(obj13, apt1)\n", " at(obj21, pos1)\n", "]\n", "\n", "\n" ] } ], "source": [ "print(problem)" ] }, { "cell_type": "markdown", "metadata": { "id": "6DzfopqA79tF" }, "source": [ "## MA-PDDL Writer" ] }, { "cell_type": "markdown", "metadata": { "id": "_PxnAbJW76y9" }, "source": [ "As the name suggests, `MAPDDLWriter` offers the capability of dumping a `unified_planning MultiAgentProblem` in ma-pddl.\n", "\n", "There are 3 possible usages of the `MAPDDLWriter`:\n", "\n", "- printing ma-pddl domain and problem in a different file for each agent (factored domains)\n", "- getting ma-pddl domain and problem for each agent as a python str\n", "- printing ma-pddl domain and problem for each agent to `STDOUT`" ] }, { "cell_type": "markdown", "metadata": { "id": "PjY28KuaCABy" }, "source": [ "## Writing to files" ] }, { "cell_type": "markdown", "metadata": { "id": "Vvf1vd9iCE0R" }, "source": [ "To write the ma-pddl equivalent of a `unified_planning MultiAgentProblem` to a file we use the `MAPDDLWriter.write_ma_domain` and `MAPDDLWriter.write_ma_problem` methods." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "id": "p6b3FWs30uGB" }, "outputs": [], "source": [ "w = MAPDDLWriter(problem)\n", "w.write_ma_domain('ma_logistic_directory')\n", "w.write_ma_problem('ma_logistic_directory')" ] }, { "cell_type": "markdown", "metadata": { "id": "_yNH9bEHCY0u" }, "source": [ "### Getting domains and problems as a python strings" ] }, { "cell_type": "markdown", "metadata": { "id": "RXCLFydqDQvL" }, "source": [ "To get the ma-pddl equivalent of a `unified_planning MultiAgentProblem` as a python strings we use the `MAPDDLWriter.get_ma_domain_agent('name_of_agent')` and `MAPDDLWriter.get_ma_problem_agent('name_of_agent')` methods.\n", "In this way we can get the domain and problem of a particular agent." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/", "height": 122 }, "id": "immgO6uImOq6", "outputId": "ecbd802a-45e6-4ba4-eb4d-34e86ed9ec31" }, "outputs": [ { "data": { "application/vnd.google.colaboratory.intrinsic+json": { "type": "string" }, "text/plain": [ "'(define (problem ma_logistic-problem)\\n (:domain ma_logistic-domain)\\n (:objects\\n pos1 pos2 - location\\n cit1 cit2 - city\\n obj21 obj22 obj23 obj11 obj13 obj12 - package\\n apt2 apt1 - airport\\n truck1 - truck1_type\\n truck2 - truck2_type\\n airplane - airplane_type\\n )\\n (:init\\n (a_pos truck1 pos1)\\n (at_ obj11 pos1)\\n (at_ obj12 pos1)\\n (at_ obj13 pos1)\\n (a_pos truck2 pos2)\\n (at_ obj21 pos2)\\n (at_ obj22 pos2)\\n (at_ obj23 pos2)\\n (a_pos airplane apt2))\\n (:goal (and (at_ obj11 apt1) (at_ obj23 pos1) (at_ obj13 apt1) (at_ obj21 pos1)))\\n)'" ] }, "execution_count": 51, "metadata": {}, "output_type": "execute_result" } ], "source": [ "w.get_ma_domain_agent('truck1')\n", "w.get_ma_problem_agent('airplane')" ] }, { "cell_type": "markdown", "metadata": { "id": "cOZ5SZYYrSs3" }, "source": [ "###Printing domain and problem to STDOUT" ] }, { "cell_type": "markdown", "metadata": { "id": "59plrGoCmfv5" }, "source": [ "To print the pddl equivalent of a `unified_planning Problem` to `STDOUT` we use the `MAPDDLWriter.print_ma_domain_agent('name_of_agent')` and `MAPDDLWriter.print_ma_problem_agent('name_of_agent')` methods." ] }, { "cell_type": "code", "execution_count": null, "metadata": { "colab": { "base_uri": "https://localhost:8080/" }, "id": "UO5tRAzqB7pu", "outputId": "93e37bcb-c498-4b3b-9100-9f8c23c3120c" }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "(define (domain ma_logistic-domain)\n", " (:requirements :factored-privacy :typing)\n", " (:types\n", " object_ ag - object\n", " truck1_type truck2_type airplane_type - ag\n", " location city package vehicle - object_\n", " airport - location\n", " )\n", " (:predicates\n", " (at_ ?object - object_ ?location - location)\n", " (in ?package - package ?vehicle - vehicle)\n", " (a_pos ?agent - ag ?location - location)\n", " (a_on ?agent - ag ?object - object_)\n", " (:private\n", " (a_in_city ?agent - ag ?location - location ?city - city)))\n", " (:action drive_truck\n", " :parameters ( ?truck1 - truck1_type ?loc_from - location ?loc_to - location ?city_ - city)\n", " :precondition (and \n", " (a_pos ?truck1 ?loc_from)\n", " (a_in_city ?truck1 ?loc_from ?city_)\n", " (a_in_city ?truck1 ?loc_to ?city_)\n", " )\n", " :effect (and\n", " (not (a_pos ?truck1 ?loc_from))\n", " (a_pos ?truck1 ?loc_to)\n", "))\n", " (:action unload_truck\n", " :parameters ( ?truck1 - truck1_type ?obj - package ?loc - location)\n", " :precondition (and \n", " (a_pos ?truck1 ?loc)\n", " (a_on ?truck1 ?obj)\n", " )\n", " :effect (and\n", " (not (a_on ?truck1 ?obj))\n", " (at_ ?obj ?loc)\n", "))\n", " (:action load_truck\n", " :parameters ( ?truck1 - truck1_type ?loc - location ?obj - package)\n", " :precondition (and \n", " (at_ ?obj ?loc)\n", " (a_pos ?truck1 ?loc)\n", " )\n", " :effect (and\n", " (not (at_ ?obj ?loc))\n", " (a_on ?truck1 ?obj)\n", "))\n", ")\n", "(define (problem ma_logistic-problem)\n", " (:domain ma_logistic-domain)\n", " (:objects\n", " pos1 pos2 - location\n", " cit1 cit2 - city\n", " obj21 obj22 obj23 obj11 obj13 obj12 - package\n", " apt2 apt1 - airport\n", " truck1 - truck1_type\n", " truck2 - truck2_type\n", " airplane - airplane_type\n", " )\n", " (:init\n", " (a_pos truck1 pos1)\n", " (at_ obj11 pos1)\n", " (at_ obj12 pos1)\n", " (at_ obj13 pos1)\n", " (a_pos truck2 pos2)\n", " (at_ obj21 pos2)\n", " (at_ obj22 pos2)\n", " (at_ obj23 pos2)\n", " (a_pos airplane apt2))\n", " (:goal (and (at_ obj11 apt1) (at_ obj23 pos1) (at_ obj13 apt1) (at_ obj21 pos1)))\n", ")" ] } ], "source": [ "w.print_ma_domain_agent('truck1')\n", "w.print_ma_problem_agent('airplane')" ] } ], "metadata": { "celltoolbar": "Tags", "colab": { "name": "MAPDDL Writer", "provenance": [] }, "kernelspec": { "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.6" } }, "nbformat": 4, "nbformat_minor": 1 }