Skip to content

Commit

Permalink
Merge pull request #133 from bark-simulator/experiment_runner_package
Browse files Browse the repository at this point in the history
Place ExperimentRunner in bark_ml and introduce max. velocity
  • Loading branch information
patrickhart authored Nov 15, 2021
2 parents 73b6cd5 + eab8c83 commit 2fc969e
Show file tree
Hide file tree
Showing 13 changed files with 288 additions and 97 deletions.
2 changes: 1 addition & 1 deletion bark_ml/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ test_suite(
"//bark_ml/tests:py_library_tfa_tests",
"//bark_ml/tests:py_bark_behavior_model_tests",
"//bark_ml/tests:py_tracer_tests",
"//experiments:py_experiment_tests"
"//bark_ml/experiment:py_experiment_tests"
]
)

Expand Down
9 changes: 7 additions & 2 deletions bark_ml/evaluators/reward_shaping.py
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,10 @@ def __init__(self,
self._params["ML"]["RewardShapingEvaluator"]["MaxSteps",
"Maximum steps per episode.",
60]
self._max_vel = \
self._params["ML"]["RewardShapingEvaluator"]["MaxVelocity",
"Maximum velocity in episode.",
10]
self._active_shaping_functions = \
self._params["ML"]["RewardShapingEvaluator"]["RewardShapingPotentials",
"Reward shaping functions.", {
Expand Down Expand Up @@ -147,9 +151,10 @@ def _evaluate(self, observed_world, eval_results, action):
step_count = eval_results["step_count"]
collision = eval_results["collision"] or eval_results["drivable_area"]

# TERMINATE WITH NEGATIVE VEL.
# TERMINATE WITH NEGATIVE VEL. or if larger than max. vel
ego_state = observed_world.ego_agent.state
ego_vel = ego_state[int(StateDefinition.VEL_POSITION)] < 0.
ego_vel = ego_state[int(StateDefinition.VEL_POSITION)] < 0 or \
ego_state[int(StateDefinition.VEL_POSITION)] > self._max_vel

reward_shaping_signal = self.RewardShapingFunction(observed_world)
if success or collision or step_count > self._max_steps or ego_vel:
Expand Down
40 changes: 40 additions & 0 deletions bark_ml/experiment/BUILD
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
filegroup(
name = "data",
srcs = glob(["*.json", "**/*.yaml", "**/*.json", "**/*.xodr", "**/*.py"]),
visibility = ["//visibility:public"],
)

py_library(
name = "experiment",
srcs = ["experiment.py"],
data = ["@bark_project//bark/python_wrapper:core.so"],
imports = ["../external/bark_project/bark/python_wrapper/"],
deps = ["//bark_ml/environments:environments",
"//bark_ml/library_wrappers/lib_tf_agents/agents:agents",
"//bark_ml/library_wrappers/lib_tf_agents/runners:runners",
"//bark_ml/evaluators:evaluators",
"//bark_ml/observers:observers"],
visibility = ["//visibility:public"],
)

py_binary(
name = "experiment_runner",
srcs = ["experiment_runner.py"],
data = ["@bark_project//bark/python_wrapper:core.so",
"//bark_ml:generate_core"],
imports = ["../external/bark_project/bark/python_wrapper/"],
deps = [":experiment"],
visibility = ["//visibility:public"],
)

py_test(
name = "py_experiment_tests",
srcs = ["py_experiment_tests.py"],
data = ["@bark_project//bark/python_wrapper:core.so",
":data"],
imports = ["../external/bark_project/bark/python_wrapper/",
"../python_wrapper/"],
deps = [":experiment"],
visibility = ["//visibility:public"]
)

173 changes: 173 additions & 0 deletions bark_ml/experiment/data/highway_gnn.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,173 @@
{
"Experiment": {
"Observer": {
"ModuleName": "GraphObserver",
"Config": {}
},
"Evaluator": {
"ModuleName": "RewardShapingEvaluator",
"Config": {}
},
"Runtime": {
"ModuleName": "SingleAgentRuntime",
"Config": {}
},
"Runner": {
"ModuleName": "SACRunner",
"Config": {}
},
"Agent": {
"ModuleName": "BehaviorGraphSACAgent",
"Config": {
"init_gnn": "init_interaction_network"
}
},
"Blueprint": {
"ModuleName": "ContinuousHighwayBlueprint",
"Config": {
"num_scenarios": 10000,
"viewer": true,
"mode": "dense"
}
},
"NumEvaluationEpisodes": 10,
"NumVisualizationEpisodes": 10
},
"Visualization": {
"Agents": {
"Color": {
"Other": {
"Lines": [
0.5,
0.5,
0.5
],
"Face": [
0.7,
0.7,
0.7
]
},
"Controlled": {
"Lines": [
0.0,
0.27,
0.58
],
"Face": [
0.49,
0.63,
0.83
]
},
"UseColormapForOtherAgents": false,
"IfColormapUseLineColorOthers": true
},
"Alpha": {
"Controlled": 1.0,
"Other": 1
},
"ColorRoute": [
0.2,
0.2,
0.2
],
"DrawRoute": false,
"DrawAgentId": false,
"DrawEvalGoals": true,
"EvalGoalColor": [
0.49,
0.63,
0.83
],
"DrawHistory": false,
"DrawHistoryDrawFace": true
}
},
"ML": {
"RewardShapingEvaluator": {
"RewardShapingPotentials": {
"VelocityPotential" : {
"desired_vel": 20.0, "vel_dev_max": 20.0, "exponent": 0.4, "type": "positive"
}
}
},
"GoalReachedEvaluator": {
"MaxSteps": 200
},
"InteractionNetwork": {
"NumMessagePassingLayers": 2,
"EmbeddingSize": 80
},
"BehaviorTFAAgents": {
"NumCheckpointsToKeep": 3
},
"TFARunner": {
"EvaluationSteps": 25,
"InitialCollectionEpisodes": 50,
"CollectionEpisodesPerStep": 1
},
"BehaviorContinuousML": {
"ActionsLowerBound": [
-5.0,
-0.2
],
"ActionsUpperBound": [
4.0,
0.2
]
},
"GraphObserver": {
"NormalizationEnabled": true,
"AgentLimit": 5,
"VisibilityRadius": 1500,
"SelfLoops": true,
"EnabledNodeFeatures": [
"x",
"y",
"theta",
"vel"
],
"EnabledEdgeFeatures": [
"dx",
"dy"
]
},
"BehaviorGraphSACAgent": {
"ActorFcLayerParams": [
512,
512
],
"CriticObservationFcLayerParams": null,
"CriticActionFcLayerParams": null,
"CriticJointFcLayerParams": [
512,
512
],
"ActorLearningRate": 0.0003,
"CriticLearningRate": 0.0003,
"AlphaLearningRate": 0.0003,
"TargetUpdateTau": 0.05,
"TargetUpdatePeriod": 3,
"Gamma": 0.995,
"RewardScaleFactor": 1.0,
"AgentName": "gnn_sac_agent",
"DebugSummaries": false,
"ReplayBufferCapacity": 10000,
"ParallelBufferCalls": 1,
"BatchSize": 512,
"BufferNumSteps": 2,
"BufferPrefetch": 3
},
"SACRunner": {
"NumberOfCollections": 250000,
"EvaluateEveryNSteps": 2000
}
},
"BehaviorDynamicModel": {
"IntegrationTimeDelta": 0.05000000074505806
},
"World": {
"remove_agents_out_of_map": true
}
}
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@
from bark.runtime.commons.parameters import ParameterServer
from bark_ml.environments.blueprints import *
from bark_ml.environments import *
from bark_ml.behaviors import *
Expand All @@ -8,6 +7,7 @@
from bark_ml.library_wrappers.lib_tf_agents.runners import *
from bark_ml.core.observers import *
from bark_ml.core.evaluators import *
from bark.runtime.commons.parameters import ParameterServer


def LoadModule(module_name, dict_items):
Expand All @@ -25,6 +25,7 @@ def LoadModule(module_name, dict_items):
return FrenetObserver(dict_items['params'])
return eval("{}(**dict_items)".format(module_name))


class Experiment:
"""The Experiment-class contains all entities in order to run,
train, or evaluate an agent."""
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,28 +3,11 @@
import hashlib
import logging
from pathlib import Path
from absl import app
from absl import flags
import tensorflow as tf
import numpy as np
from bark.runtime.commons.parameters import ParameterServer
from experiments.experiment import Experiment
from bark_ml.experiment.experiment import Experiment

FLAGS = flags.FLAGS
flags.DEFINE_enum("mode",
"visualize",
["train", "visualize", "evaluate", "print", "save"],
"Mode the configuration should be executed in.")
# NOTE: absolute paths are required
flags.DEFINE_string("exp_json",
"/Users/hart/Development/bark-ml/experiments/configs/highway_gat_small.json",
"Path to the experiment json.")
flags.DEFINE_string("save_path",
"/Users/hart/Development/bark-ml/experiments/configs/new_exp.json",
"Path to the experiment json.")
flags.DEFINE_integer("random_seed",
0,
"Random seed to be used.")

class ExperimentRunner:
"""The ExperimentRunner-Class provides an easy-to-use interface to
Expand Down Expand Up @@ -133,14 +116,4 @@ def PrintExperiment(self):
pprint.pprint(self._experiment.params.ConvertToDict())

def SaveExperiment(self, file_path):
self._params.Save(file_path)

# run experiment
def run_experiment(argv):
exp_runner = ExperimentRunner(
json_file=FLAGS.exp_json,
mode=FLAGS.mode,
random_seed=FLAGS.random_seed)

if __name__ == '__main__':
app.run(run_experiment)
self._params.Save(file_path)
29 changes: 29 additions & 0 deletions bark_ml/experiment/py_experiment_tests.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
# Copyright (c) 2020 fortiss GmbH
#
# Authors: Patrick Hart, Julian Bernhard, Klemens Esterle, and
# Tobias Kessler
#
# This software is released under the MIT License.
# https://opensource.org/licenses/MIT


import unittest
import os
from bark_ml.experiment.experiment import Experiment
from bark_ml.experiment.experiment_runner import ExperimentRunner


class PyExperimentTests(unittest.TestCase):
def test_experiment(self):
experiment = Experiment(
os.path.join(os.path.dirname(__file__),
"data/highway_gnn.json"))

def test_experiment_runner(self):
exp_runner = ExperimentRunner(
json_file=os.path.join(os.path.dirname(__file__),
"data/highway_gnn.json"), mode="evaluate", random_seed=0)


if __name__ == '__main__':
unittest.main()
34 changes: 4 additions & 30 deletions experiments/BUILD
Original file line number Diff line number Diff line change
Expand Up @@ -4,39 +4,13 @@ filegroup(
visibility = ["//visibility:public"],
)


py_library(
name = "experiment",
srcs = ["experiment.py"],
data = ["@bark_project//bark/python_wrapper:core.so"],
imports = ["../external/bark_project/bark/python_wrapper/"],
deps = ["//bark_ml/environments:environments",
"//bark_ml/library_wrappers/lib_tf_agents/agents:agents",
"//bark_ml/library_wrappers/lib_tf_agents/runners:runners",
"//bark_ml/evaluators:evaluators",
"//bark_ml/observers:observers"],
visibility = ["//visibility:public"],
)

py_binary(
name = "experiment_runner",
srcs = ["experiment_runner.py"],
name = "run_experiment",
srcs = ["run_experiment.py"],
data = ["@bark_project//bark/python_wrapper:core.so",
"//bark_ml:generate_core",
":data"],
imports = ["../external/bark_project/bark/python_wrapper/"],
deps = [":experiment"],
deps = ["//bark_ml/experiment:experiment_runner"],
visibility = ["//visibility:public"],
)

py_test(
name = "py_experiment_tests",
srcs = ["py_experiment_tests.py"],
data = ["@bark_project//bark/python_wrapper:core.so",
":data"],
imports = ["../external/bark_project/bark/python_wrapper/",
"../python_wrapper/"],
deps = [":experiment"],
visibility = ["//visibility:public"]
)

)
Loading

0 comments on commit 2fc969e

Please sign in to comment.