Browse Source

initial commit

main
sp 4 months ago
parent
commit
58919ad4d4
  1. 2
      docker_build.sh
  2. 22
      docker_run_experiment.sh
  3. 2
      docker_run_jupyter.sh
  4. 11
      dockerfile
  5. 199
      notebooks/.ipynb_checkpoints/DeterministicShielding-checkpoint.ipynb
  6. 0
      notebooks/.ipynb_checkpoints/HelloLavaGap-checkpoint.ipynb
  7. 0
      notebooks/.ipynb_checkpoints/Playground-checkpoint.ipynb
  8. 147
      notebooks/.ipynb_checkpoints/ProbabilisticShielding-checkpoint.ipynb
  9. 557
      notebooks/.ipynb_checkpoints/SlipperyCliff-checkpoint.ipynb
  10. 199
      notebooks/DeterministicShielding.ipynb
  11. 719
      notebooks/FaultyActions.ipynb
  12. 105
      notebooks/FaultyActions.py
  13. 110
      notebooks/HelloLavaGap.py
  14. 107
      notebooks/Playground.py
  15. 365
      notebooks/ProbabilisticShielding.ipynb
  16. 523
      notebooks/SlipperyCliff.ipynb
  17. 105
      notebooks/SlipperyCliff.py
  18. BIN
      notebooks/__pycache__/sb3utils.cpython-310.pyc
  19. BIN
      notebooks/__pycache__/utils.cpython-310.pyc
  20. 744
      notebooks/environments/Minigrid/minigrid/envs/.ipynb_checkpoints/windycity-checkpoint.py
  21. 183
      notebooks/shielding_files_20241129T122425_0tlvpkoj/grid.prism
  22. 49
      notebooks/shielding_files_20241129T122425_0tlvpkoj/grid.txt
  23. 1580
      notebooks/shielding_files_20241129T122425_0tlvpkoj/shield
  24. 183
      notebooks/shielding_files_20241129T122427_qaabh7px/grid.prism
  25. 49
      notebooks/shielding_files_20241129T122427_qaabh7px/grid.txt
  26. 1580
      notebooks/shielding_files_20241129T122427_qaabh7px/shield
  27. 183
      notebooks/shielding_files_20241129T122429_qyepifjg/grid.prism
  28. 49
      notebooks/shielding_files_20241129T122429_qyepifjg/grid.txt
  29. 1578
      notebooks/shielding_files_20241129T122429_qyepifjg/shield
  30. 183
      notebooks/shielding_files_20241129T122432_3ui3yv2s/grid.prism
  31. 49
      notebooks/shielding_files_20241129T122432_3ui3yv2s/grid.txt
  32. 1574
      notebooks/shielding_files_20241129T122432_3ui3yv2s/shield
  33. 183
      notebooks/shielding_files_20241129T122454_58hszne6/grid.prism
  34. 49
      notebooks/shielding_files_20241129T122454_58hszne6/grid.txt
  35. 1580
      notebooks/shielding_files_20241129T122454_58hszne6/shield
  36. 183
      notebooks/shielding_files_20241129T122456_wtrsvp2x/grid.prism
  37. 49
      notebooks/shielding_files_20241129T122456_wtrsvp2x/grid.txt
  38. 1580
      notebooks/shielding_files_20241129T122456_wtrsvp2x/shield
  39. 183
      notebooks/shielding_files_20241129T122458_wavsk47p/grid.prism
  40. 49
      notebooks/shielding_files_20241129T122458_wavsk47p/grid.txt
  41. 1578
      notebooks/shielding_files_20241129T122458_wavsk47p/shield
  42. 183
      notebooks/shielding_files_20241129T122500_n10bceo8/grid.prism
  43. 49
      notebooks/shielding_files_20241129T122500_n10bceo8/grid.txt
  44. 1574
      notebooks/shielding_files_20241129T122500_n10bceo8/shield

2
docker_build.sh

@ -1 +1 @@
sudo docker build -t tempest_in_action .
sudo docker build -t cacm_shielding_framework .

22
docker_run_experiment.sh

@ -0,0 +1,22 @@
DOCKER_IMAGE=gsw_ai_lab
IMAGE_VERSION=latest
CONTAINER_NAME=tempestpy_jupyter
NOTEBOOK_DIR=./notebooks
CONTAINER_NOTEBOOK_DIR=/opt/notebooks
LOGRESULTS_DIR=./logresults
CONTAINER_LOGRESULTS_DIR=/opt/logresults
MINIGRID_DIR=./notebooks/environments/Minigrid
CONTAINER_MINIGRID_DIR=/opt/Minigrid
sudo docker run \
--name "$CONTAINER_NAME" \
--mount "type=bind,src=$NOTEBOOK_DIR,dst=$CONTAINER_NOTEBOOK_DIR" \
--mount "type=bind,src=$LOGRESULTS_DIR,dst=$CONTAINER_LOGRESULTS_DIR" \
--mount "type=bind,src=$MINIGRID_DIR,dst=$CONTAINER_MINIGRID_DIR" \
--rm \
-p "6006:6006" \
-p "8888:8888" \
--shm-size=4.86gb \
--entrypoint sh \
"$DOCKER_IMAGE:$IMAGE_VERSION"

2
docker_run_jupyter.sh

@ -1,4 +1,4 @@
DOCKER_IMAGE=tempest_in_action
DOCKER_IMAGE=gsw_ai_lab
IMAGE_VERSION=latest
CONTAINER_NAME=tempestpy_jupyter

11
dockerfile

@ -27,6 +27,7 @@ RUN cmake .. -DCMAKE_BUILD_TYPE=$build_type
# Manage python packages
WORKDIR /opt/
RUN apt-get update --fix-missing
RUN apt-get install -y python3-venv
@ -69,26 +70,24 @@ RUN make -j $no_threads
RUN apt-get update && apt-get install ffmpeg libsm6 libxext6 -y
WORKDIR /opt/tempestpy
RUN pip install -U "ray[all]==2.6.3"
RUN pip install dm-tree
RUN pip install opencv-python
RUN pip install scikit-image
RUN pip install torch
RUN pip install tensorboard
RUN pip install tensorboardX
RUN pip install gymnasium
RUN pip install tensorflow
RUN pip install jupyterlab
RUN pip install astar
RUN pip install ipywidgets
RUN pip install numpy
RUN pip install matplotlib
RUN pip install sb3-contrib
RUN pip install opencv-python
RUN pip install moviepy
RUN pip install gymnasium==0.29.0
RUN pip install numpy==1.24.4
ENV M2P_BINARY=/opt/Minigrid2PRISM/build/main
RUN apt-get install bash -y
# We mount the Minigrid directory here manually again, to be able to have the directory hosted in the jupyter notebook
CMD ["pip", "install", "-e", "/opt/Minigrid"]
ENTRYPOINT ["jupyter", "lab","--ip=0.0.0.0","--allow-root", "--notebook-dir=/opt/notebooks"]
ENTRYPOINT ["/bin/bash"]

199
notebooks/.ipynb_checkpoints/DeterministicShielding-checkpoint.ipynb
File diff suppressed because it is too large
View File

0
notebooks/HelloLavaGap.ipynb → notebooks/.ipynb_checkpoints/HelloLavaGap-checkpoint.ipynb

0
notebooks/Playground.ipynb → notebooks/.ipynb_checkpoints/Playground-checkpoint.ipynb

147
notebooks/.ipynb_checkpoints/ProbabilisticShielding-checkpoint.ipynb

@ -0,0 +1,147 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {},
"source": [
"## Example usage of Tempestpy"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"vscode": {
"languageId": "plaintext"
}
},
"outputs": [],
"source": [
"from sb3_contrib import MaskablePPO\n",
"from sb3_contrib.common.wrappers import ActionMasker\n",
"from stable_baselines3.common.logger import Logger, CSVOutputFormat, TensorBoardOutputFormat, HumanOutputFormat\n",
"\n",
"import gymnasium as gym\n",
"\n",
"from minigrid.core.actions import Actions\n",
"from minigrid.core.constants import TILE_PIXELS\n",
"from minigrid.wrappers import RGBImgObsWrapper, ImgObsWrapper\n",
"\n",
"import tempfile, datetime, shutil\n",
"\n",
"import time\n",
"import os\n",
"\n",
"from utils import MiniGridShieldHandler, create_log_dir, ShieldingConfig, MiniWrapper, expname, shield_needed, shielded_evaluation, create_shield_overlay_image\n",
"from sb3utils import MiniGridSbShieldingWrapper, parse_sb3_arguments, ImageRecorderCallback, InfoCallback\n",
"\n",
"import os, sys\n",
"from copy import deepcopy\n",
"\n",
"from PIL import Image"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"vscode": {
"languageId": "plaintext"
}
},
"outputs": [],
"source": [
"GRID_TO_PRISM_BINARY=os.getenv(\"M2P_BINARY\")\n",
"\n",
"def mask_fn(env: gym.Env):\n",
" return env.create_action_mask()\n",
"\n",
"def nomask_fn(env: gym.Env):\n",
" return [1.0] * 7\n",
"\n",
"def main():\n",
" #env = \"MiniGrid-LavaSlipperyCliff-16x13-Slip10-Time-v0\"\n",
" env = \"MiniGrid-WindyCity2-v0\"\n",
"\n",
" formula = \"Pmax=? [G ! AgentIsOnLava]\"\n",
" value_for_training = 0.99\n",
" shield_comparison = \"absolute\"\n",
" shielding = ShieldingConfig.Training\n",
" \n",
" logger = Logger(\"/tmp\", output_formats=[HumanOutputFormat(sys.stdout)])\n",
" \n",
" env = gym.make(env, render_mode=\"rgb_array\")\n",
" image_env = RGBImgObsWrapper(env, TILE_PIXELS)\n",
" env = RGBImgObsWrapper(env, 8)\n",
" env = ImgObsWrapper(env)\n",
" env = MiniWrapper(env)\n",
"\n",
" \n",
" env.reset()\n",
" Image.fromarray(env.render()).show()\n",
" \n",
" shield_handlers = dict()\n",
" if shield_needed(shielding):\n",
" for value in [0.9, 0.95, 0.99, 1.0]:\n",
" shield_handler = MiniGridShieldHandler(GRID_TO_PRISM_BINARY, \"grid.txt\", \"grid.prism\", formula, shield_value=value, shield_comparison=shield_comparison, nocleanup=True, prism_file=None)\n",
" env = MiniGridSbShieldingWrapper(env, shield_handler=shield_handler, create_shield_at_reset=False)\n",
"\n",
"\n",
" shield_handlers[value] = shield_handler\n",
" if shield_needed(shielding):\n",
" for value in [0.9, 0.95, 0.99, 1.0]: \n",
" create_shield_overlay_image(image_env, shield_handlers[value].create_shield())\n",
" print(f\"The shield for shield_value = {value}\")\n",
"\n",
" if shielding == ShieldingConfig.Training:\n",
" env = MiniGridSbShieldingWrapper(env, shield_handler=shield_handlers[value_for_training], create_shield_at_reset=False)\n",
" env = ActionMasker(env, mask_fn)\n",
" print(\"Training with shield:\")\n",
" create_shield_overlay_image(image_env, shield_handlers[value_for_training].create_shield())\n",
" elif shielding == ShieldingConfig.Disabled:\n",
" env = ActionMasker(env, nomask_fn)\n",
" else:\n",
" assert(False) \n",
" model = MaskablePPO(\"CnnPolicy\", env, verbose=1, device=\"auto\")\n",
" model.set_logger(logger)\n",
" steps = 200\n",
"\n",
" model.learn(steps,callback=[InfoCallback()])\n",
"\n",
"\n",
"\n",
"if __name__ == '__main__':\n",
" print(\"Starting the training\")\n",
" main()"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
}
],
"metadata": {
"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.12"
}
},
"nbformat": 4,
"nbformat_minor": 4
}

557
notebooks/.ipynb_checkpoints/SlipperyCliff-checkpoint.ipynb
File diff suppressed because it is too large
View File

199
notebooks/DeterministicShielding.ipynb
File diff suppressed because it is too large
View File

719
notebooks/FaultyActions.ipynb
File diff suppressed because it is too large
View File

105
notebooks/FaultyActions.py

@ -1,105 +0,0 @@
#!/usr/bin/env python
# coding: utf-8
# ## Example usage of Tempestpy
# In[1]:
from sb3_contrib import MaskablePPO
from sb3_contrib.common.wrappers import ActionMasker
from stable_baselines3.common.logger import Logger, CSVOutputFormat, TensorBoardOutputFormat, HumanOutputFormat
import gymnasium as gym
from minigrid.core.actions import Actions
from minigrid.core.constants import TILE_PIXELS
from minigrid.wrappers import RGBImgObsWrapper, ImgObsWrapper
import tempfile, datetime, shutil
import time
import os
from utils import MiniGridShieldHandler, create_log_dir, ShieldingConfig, MiniWrapper, expname, shield_needed, shielded_evaluation, create_shield_overlay_image
from sb3utils import MiniGridSbShieldingWrapper, parse_sb3_arguments, ImageRecorderCallback, InfoCallback
import os, sys
from copy import deepcopy
from PIL import Image
# In[3]:
GRID_TO_PRISM_BINARY=os.getenv("M2P_BINARY")
def mask_fn(env: gym.Env):
return env.create_action_mask()
def nomask_fn(env: gym.Env):
return [1.0] * 7
def main():
env = "MiniGrid-LavaFaultyS15-1-v0"
formula = "Pmax=? [G ! AgentIsOnLava]"
value_for_training = 0.0
shield_comparison = "absolute"
shielding = ShieldingConfig.Training
logger = Logger("/tmp", output_formats=[HumanOutputFormat(sys.stdout)])
env = gym.make(env, render_mode="rgb_array")
image_env = RGBImgObsWrapper(env, TILE_PIXELS)
env = RGBImgObsWrapper(env, 8)
env = ImgObsWrapper(env)
env = MiniWrapper(env)
env.reset()
Image.fromarray(env.render()).show()
shield_values = [0.0, 0.9, 0.99, 0.999, 1.0]
shield_handlers = dict()
if shield_needed(shielding):
for value in shield_values:
shield_handler = MiniGridShieldHandler(GRID_TO_PRISM_BINARY, "grid.txt", "grid.prism", formula, shield_value=value, shield_comparison=shield_comparison, nocleanup=False, prism_file=None)
env = MiniGridSbShieldingWrapper(env, shield_handler=shield_handler, create_shield_at_reset=False)
shield_handlers[value] = shield_handler
if shield_needed(shielding):
for value in shield_values:
create_shield_overlay_image(image_env, shield_handlers[value].create_shield())
print(f"The shield for shield_value = {value}")
if shielding == ShieldingConfig.Training:
env = MiniGridSbShieldingWrapper(env, shield_handler=shield_handlers[value_for_training], create_shield_at_reset=False)
env = ActionMasker(env, mask_fn)
print("Training with shield:")
create_shield_overlay_image(image_env, shield_handlers[value_for_training].create_shield())
elif shielding == ShieldingConfig.Disabled:
env = ActionMasker(env, nomask_fn)
else:
assert(False)
model = MaskablePPO("CnnPolicy", env, verbose=1, device="auto")
model.set_logger(logger)
steps = 20_000
assert(False)
model.learn(steps,callback=[InfoCallback()])
if __name__ == '__main__':
print("Starting the training")
main()
# In[ ]:

110
notebooks/HelloLavaGap.py

@ -1,110 +0,0 @@
#!/usr/bin/env python
# coding: utf-8
# ## Example usage of Tempestpy
# In[1]:
from sb3_contrib import MaskablePPO
from sb3_contrib.common.wrappers import ActionMasker
from stable_baselines3.common.logger import Logger, CSVOutputFormat, TensorBoardOutputFormat, HumanOutputFormat
import gymnasium as gym
from minigrid.core.actions import Actions
from minigrid.core.constants import TILE_PIXELS
from minigrid.wrappers import RGBImgObsWrapper, ImgObsWrapper
import tempfile, datetime, shutil
import time
import os
from utils import MiniGridShieldHandler, create_log_dir, ShieldingConfig, MiniWrapper, expname, shield_needed, shielded_evaluation, create_shield_overlay_image
from sb3utils import MiniGridSbShieldingWrapper, parse_sb3_arguments, ImageRecorderCallback, InfoCallback
import os, sys
from copy import deepcopy
from PIL import Image
# In[ ]:
GRID_TO_PRISM_BINARY=os.getenv("M2P_BINARY")
def mask_fn(env: gym.Env):
return env.create_action_mask()
def nomask_fn(env: gym.Env):
return [1.0] * 7
def main():
env = "MiniGrid-LavaGapS6-v0"
# TODO Change the safety specification
formula = "Pmax=? [G !AgentIsOnLava]"
value_for_training = 1.0
shield_comparison = "absolute"
shielding = ShieldingConfig.Training
logger = Logger("/tmp", output_formats=[HumanOutputFormat(sys.stdout)])
env = gym.make(env, render_mode="rgb_array")
image_env = RGBImgObsWrapper(env, TILE_PIXELS)
env = RGBImgObsWrapper(env, 8)
env = ImgObsWrapper(env)
env = MiniWrapper(env)
env.reset()
Image.fromarray(env.render()).show()
input("")
shield_handlers = dict()
if shield_needed(shielding):
for value in [0.0, 1.0]:
shield_handler = MiniGridShieldHandler(GRID_TO_PRISM_BINARY, "grid.txt", "grid.prism", formula, shield_value=value, shield_comparison=shield_comparison, nocleanup=True, prism_file=None)
env = MiniGridSbShieldingWrapper(env, shield_handler=shield_handler, create_shield_at_reset=False)
shield_handlers[value] = shield_handler
print("Symbolic Description of the Model:")
shield_handlers[1.0].print_symbolic_model()
input("")
if shield_needed(shielding):
for value in [1.0]:
create_shield_overlay_image(image_env, shield_handlers[value].create_shield())
print(f"The shield for shield_value = {value}")
input("")
if shielding == ShieldingConfig.Training:
env = MiniGridSbShieldingWrapper(env, shield_handler=shield_handler, create_shield_at_reset=False)
env = ActionMasker(env, mask_fn)
print("Training with shield:")
create_shield_overlay_image(image_env, shield_handlers[value_for_training].create_shield())
elif shielding == ShieldingConfig.Disabled:
env = ActionMasker(env, nomask_fn)
else:
assert(False)
model = MaskablePPO("CnnPolicy", env, verbose=1, device="auto")
model.set_logger(logger)
steps = 20_000
model.learn(steps,callback=[InfoCallback()])
if __name__ == '__main__':
main()
# In[ ]:

107
notebooks/Playground.py

@ -1,107 +0,0 @@
#!/usr/bin/env python
# coding: utf-8
# ## Example usage of Tempestpy
# In[1]:
from sb3_contrib import MaskablePPO
from sb3_contrib.common.wrappers import ActionMasker
from stable_baselines3.common.logger import Logger, CSVOutputFormat, TensorBoardOutputFormat, HumanOutputFormat
import gymnasium as gym
from minigrid.core.actions import Actions
from minigrid.core.constants import TILE_PIXELS
from minigrid.wrappers import RGBImgObsWrapper, ImgObsWrapper
import tempfile, datetime, shutil
import time
import os
from utils import MiniGridShieldHandler, create_log_dir, ShieldingConfig, MiniWrapper, expname, shield_needed, shielded_evaluation, create_shield_overlay_image
from sb3utils import MiniGridSbShieldingWrapper, parse_sb3_arguments, ImageRecorderCallback, InfoCallback
import os, sys
from copy import deepcopy
from PIL import Image
# In[ ]:
GRID_TO_PRISM_BINARY=os.getenv("M2P_BINARY")
import gymnasium as gym
def mask_fn(env: gym.Env):
return env.create_action_mask()
def nomask_fn(env: gym.Env):
return [1.0] * 7
def main():
# Edit 'environments/Minigrid/minigrid/envs/Playground.py' to alter the environment
env = "MiniGrid-Playground-v0"
# TODO Change the safety specification
formula = "Pmax=? [G !AgentIsOnLava]"
value_for_training = 1.0
shield_comparison = "absolute"
shielding = ShieldingConfig.Training
logger = Logger("/tmp", output_formats=[HumanOutputFormat(sys.stdout)])
env = gym.make(env, render_mode="rgb_array")
image_env = RGBImgObsWrapper(env, TILE_PIXELS)
env = RGBImgObsWrapper(env, 8)
env = ImgObsWrapper(env)
env = MiniWrapper(env)
env.reset()
Image.fromarray(env.render()).show()
shield_handlers = dict()
if shield_needed(shielding):
for value in [0.9, 0.99, 0.999, 0.9999, 1.0]:
shield_handler = MiniGridShieldHandler(GRID_TO_PRISM_BINARY, "grid.txt", "grid.prism", formula, shield_value=value, shield_comparison=shield_comparison, nocleanup=True, prism_file=None)
env = MiniGridSbShieldingWrapper(env, shield_handler=shield_handler, create_shield_at_reset=False)
create_shield_overlay_image(image_env, shield_handler.create_shield())
print(f"The shield for shield_value = {value}")
shield_handlers[value] = shield_handler
if shielding == ShieldingConfig.Training:
env = MiniGridSbShieldingWrapper(env, shield_handler=shield_handler, create_shield_at_reset=False)
env = ActionMasker(env, mask_fn)
print("Training with shield:")
create_shield_overlay_image(image_env, shield_handlers[value_for_training].create_shield())
elif shielding == ShieldingConfig.Disabled:
env = ActionMasker(env, nomask_fn)
else:
assert(False)
model = MaskablePPO("CnnPolicy", env, verbose=1, device="auto")
model.set_logger(logger)
steps = 20_000
model.learn(steps,callback=[InfoCallback()])
if __name__ == '__main__':
print("Starting the training")
main()
# In[ ]:

365
notebooks/ProbabilisticShielding.ipynb
File diff suppressed because it is too large
View File

523
notebooks/SlipperyCliff.ipynb
File diff suppressed because it is too large
View File

105
notebooks/SlipperyCliff.py

@ -1,105 +0,0 @@
#!/usr/bin/env python
# coding: utf-8
# ## Example usage of Tempestpy
# In[1]:
from sb3_contrib import MaskablePPO
from sb3_contrib.common.wrappers import ActionMasker
from stable_baselines3.common.logger import Logger, CSVOutputFormat, TensorBoardOutputFormat, HumanOutputFormat
import gymnasium as gym
from minigrid.core.actions import Actions
from minigrid.core.constants import TILE_PIXELS
from minigrid.wrappers import RGBImgObsWrapper, ImgObsWrapper
import tempfile, datetime, shutil
import time
import os
from utils import MiniGridShieldHandler, create_log_dir, ShieldingConfig, MiniWrapper, expname, shield_needed, shielded_evaluation, create_shield_overlay_image
from sb3utils import MiniGridSbShieldingWrapper, parse_sb3_arguments, ImageRecorderCallback, InfoCallback
import os, sys
from copy import deepcopy
from PIL import Image
# In[3]:
GRID_TO_PRISM_BINARY=os.getenv("M2P_BINARY")
def mask_fn(env: gym.Env):
return env.create_action_mask()
def nomask_fn(env: gym.Env):
return [1.0] * 7
def main():
#env = "MiniGrid-LavaSlipperyCliff-16x13-Slip10-Time-v0"
env = "MiniGrid-WindyCity2-v0"
formula = "Pmax=? [G ! AgentIsOnLava]"
value_for_training = 0.99
shield_comparison = "absolute"
shielding = ShieldingConfig.Training
logger = Logger("/tmp", output_formats=[HumanOutputFormat(sys.stdout)])
env = gym.make(env, render_mode="rgb_array")
image_env = RGBImgObsWrapper(env, TILE_PIXELS)
env = RGBImgObsWrapper(env, 8)
env = ImgObsWrapper(env)
env = MiniWrapper(env)
env.reset()
Image.fromarray(env.render()).show()
shield_handlers = dict()
if shield_needed(shielding):
for value in [0.9, 0.95, 0.99, 1.0]:
shield_handler = MiniGridShieldHandler(GRID_TO_PRISM_BINARY, "grid.txt", "grid.prism", formula, shield_value=value, shield_comparison=shield_comparison, nocleanup=True, prism_file=None)
env = MiniGridSbShieldingWrapper(env, shield_handler=shield_handler, create_shield_at_reset=False)
shield_handlers[value] = shield_handler
if shield_needed(shielding):
for value in [0.9, 0.95, 0.99, 1.0]:
create_shield_overlay_image(image_env, shield_handlers[value].create_shield())
print(f"The shield for shield_value = {value}")
if shielding == ShieldingConfig.Training:
env = MiniGridSbShieldingWrapper(env, shield_handler=shield_handlers[value_for_training], create_shield_at_reset=False)
env = ActionMasker(env, mask_fn)
print("Training with shield:")
create_shield_overlay_image(image_env, shield_handlers[value_for_training].create_shield())
elif shielding == ShieldingConfig.Disabled:
env = ActionMasker(env, nomask_fn)
else:
assert(False)
model = MaskablePPO("CnnPolicy", env, verbose=1, device="auto")
model.set_logger(logger)
steps = 20_000
assert(False)
model.learn(steps,callback=[InfoCallback()])
if __name__ == '__main__':
print("Starting the training")
main()
# In[ ]:

BIN
notebooks/__pycache__/sb3utils.cpython-310.pyc

BIN
notebooks/__pycache__/utils.cpython-310.pyc

744
notebooks/environments/Minigrid/minigrid/envs/.ipynb_checkpoints/windycity-checkpoint.py

@ -0,0 +1,744 @@
from __future__ import annotations
from minigrid.core.grid import Grid
from minigrid.core.mission import MissionSpace
from minigrid.core.world_object import (
SlipperyEast,
SlipperySouth,
SlipperyNorth,
SlipperyWest,
SlipperyNorthEast,
Lava,
Goal
)
from minigrid.envs.adversaries_base import AdversaryEnv
from minigrid.core.tasks import FollowAgent, DoRandom, GoTo
from minigrid.minigrid_env import MiniGridEnv, is_slippery
import numpy as np
from itertools import product
class WindyCityEnv(MiniGridEnv):
def __init__(self,
randomize_start=True, size=10,
width=24,
height=22,
probability_intended=8/9,
probability_turn_intended=8/9,
obstacle_type=Lava,
goal_reward=1,
failure_penalty=-1,
per_step_penalty=0,
dense_rewards=False,
**kwargs):
self.obstacle_type = obstacle_type
self.size = size
self.probability_intended = probability_intended
self.probability_turn_intended = probability_turn_intended
if width is not None and height is not None:
self.width = width
self.height = height
elif size is not None:
self.width = size
self.height = size
else:
raise ValueError(f"Please define either width and height or a size for square environments. The set values are width: {width}, height: {height}, size: {size}.")
mission_space = MissionSpace(mission_func=self._gen_mission)
super().__init__(
width=self.width,
height=self.height,
max_steps=200,
# Set this to True for maximum speed
see_through_walls=False,
mission_space = mission_space,
**kwargs
)
self.randomize_start = randomize_start
self.goal_reward = goal_reward
self.failure_penalty = failure_penalty
self.dense_rewards = dense_rewards
self.per_step_penalty = per_step_penalty
self.trajectory = list()
@staticmethod
def _gen_mission():
return "Finish your task while avoiding the adversaries"
def disable_random_start(self):
self.randomize_start = False
def place_agent(self, spawn_on_slippery=False, agent_pos=None, agent_dir=0):
max_tries = 10_000
num_tries = 0
if self.randomize_start == True:
while True:
num_tries += 1
if num_tries > max_tries:
raise RecursionError("rejection sampling failed in place_obj")
x = np.random.randint(0, self.width)
y = np.random.randint(0, self.height)
cell = self.grid.get(*(x,y))
if ( cell is None or
(cell.can_overlap() and
not isinstance(cell, Lava) and
not isinstance(cell, Goal) and
(spawn_on_slippery or not is_slippery(cell)) and
not (x in [7, 8, 9, 10] and y in [9, 10]))
):
self.agent_pos = np.array((x, y))
self.agent_dir = np.random.randint(0, 4)
break
elif agent_dir is None:
self.agent_pos = np.array((1, 1))
self.agent_dir = 0
else:
self.agent_pos = agent_pos
self.agent_dir = agent_dir
self.trajectory.append((self.agent_pos, self.agent_dir))
def place_goal(self, goal_pos):
self.goal_pos = goal_pos
self.put_obj(Goal(), *self.goal_pos)
def printGrid(self, init=False):
grid = super().printGrid(init)
properties_str = ""
properties_str += F"ProbTurnIntended:{self.probability_turn_intended}\n"
properties_str += F"ProbForwardIntended:{self.probability_intended}\n"
return grid + properties_str
def step(self, action):
obs, reward, terminated, truncated, info = super().step(action)
self.trajectory.append((action, self.agent_pos, self.agent_dir))
if truncated and info["ran_into_lava"]:
print(self.trajectory)
print("truncated: ", info)
self.trajectory = list()
if truncated and info["reached_goal"]:
print("truncated: ", info)
self.trajectory = list()
elif terminated and info["ran_into_lava"]:
print(self.trajectory)
print("terminated: ", info)
self.trajectory = list()
elif terminated:
print("terminated: ", info)
self.trajectory = list()
elif truncated:
print("truncated: ", info)
self.trajectory = list()
return obs, reward - self.per_step_penalty, terminated, truncated, info
def reset(self, **kwargs) -> tuple[ObsType, dict[str, Any]]:
return super().reset(**kwargs)
def _place_building(self, col, row, width, height, obj_type=Lava):
for i in range(col, width + col):
self.grid.vert_wall(i, row, height, obj_type=obj_type)
def _gen_grid(self, width, height):
super()._gen_grid(width, height)
self.grid = Grid(width, height)
# Generate the surrounding walls
self.grid.horz_wall(0, 0)
self.grid.horz_wall(0, height - 1)
self.grid.vert_wall(0, 0)
self.grid.vert_wall(width - 1, 0)
for i in range(1, height - 1):
self.grid.horz_wall(1, i, width-2, obj_type=SlipperyNorthEast("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self._place_building(13, 1, 4, 2)
self.grid.vert_wall(12, 1, 2, obj_type=SlipperyNorth("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self.grid.horz_wall(13, 3, 4, obj_type=SlipperyEast("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self.grid.vert_wall(17, 1, 2, obj_type=SlipperyNorth("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self._place_building(7, 3, 3, 4)
self.grid.vert_wall(6, 3, 4, obj_type=SlipperyNorth("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self.grid.vert_wall(10, 3, 4, obj_type=SlipperyNorth("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self.grid.horz_wall(7, 2, 3, obj_type=SlipperyEast("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self.grid.horz_wall(7, 7, 3, obj_type=SlipperyEast("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self._place_building(15, 7, 6, 4)
self.grid.vert_wall(14, 7, 4, obj_type=SlipperyNorth("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self.grid.vert_wall(14, 9, 2, obj_type=Lava)
self.grid.vert_wall(20, 7, 4, obj_type=SlipperyNorth("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self.grid.vert_wall(13, 9, 2, obj_type=SlipperyNorth("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self.grid.horz_wall(15, 6, 5, obj_type=SlipperyEast("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self.grid.horz_wall(14, 11, 6, obj_type=SlipperyEast("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self._place_building(5, 11, 5, 6)
self.grid.vert_wall(4, 11, 6, obj_type=SlipperyNorth("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self.grid.vert_wall(10, 11, 6, obj_type=SlipperyNorth("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self.grid.horz_wall(5, 17, 5, obj_type=SlipperyEast("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self.grid.horz_wall(5, 10, 5, obj_type=SlipperyWest("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self.grid.horz_wall(6, 9, 4, obj_type=SlipperyWest("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self.grid.vert_wall(9, 7, 4, obj_type=SlipperySouth("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self._place_building(21, 13, 2, 5)
self.grid.vert_wall(20, 13, 5, obj_type=SlipperyNorth("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self.grid.horz_wall(21, 12, 2, obj_type=SlipperyEast("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self.grid.horz_wall(21, 18, 2, obj_type=SlipperyEast("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self.place_agent(agent_pos=np.array((1, height -2)), agent_dir=0, spawn_on_slippery=True)
self.place_goal(np.array((width - 2, 1)))
if self.dense_rewards: self.run_bfs()
class WindyCityAdvEnv(AdversaryEnv):
def __init__(self,
randomize_start=True, size=10,
width=15,
height=15,
probability_intended=8/9,
probability_turn_intended=8/9,
obstacle_type=Lava,
goal_reward=1,
failure_penalty=-1,
per_step_penalty=0,
dense_rewards=False,
**kwargs):
self.obstacle_type = obstacle_type
self.size = size
self.probability_intended = probability_intended
self.probability_turn_intended = probability_turn_intended
if width is not None and height is not None:
self.width = width
self.height = height
elif size is not None:
self.width = size
self.height = size
else:
raise ValueError(f"Please define either width and height or a size for square environments. The set values are width: {width}, height: {height}, size: {size}.")
super().__init__(
width=self.width,
height=self.height,
max_steps=200,
# Set this to True for maximum speed
see_through_walls=False,
**kwargs
)
self.randomize_start = randomize_start
self.goal_reward = goal_reward
self.failure_penalty = failure_penalty
self.dense_rewards = dense_rewards
self.per_step_penalty = per_step_penalty
self.trajectory = list()
def disable_random_start(self):
self.randomize_start = False
def place_agent(self, spawn_on_slippery=False, agent_pos=None, agent_dir=0):
max_tries = 10_000
num_tries = 0
if self.randomize_start == True:
while True:
num_tries += 1
if num_tries > max_tries:
raise RecursionError("rejection sampling failed in place_obj")
x = np.random.randint(0, self.width)
y = np.random.randint(0, self.height)
cell = self.grid.get(*(x,y))
if ( cell is None or
(cell.can_overlap() and
not isinstance(cell, Lava) and
not isinstance(cell, Goal) and
(spawn_on_slippery or not is_slippery(cell)) and
not (x in [7, 8, 9, 10] and y in [9, 10]))
):
self.agent_pos = np.array((x, y))
self.agent_dir = np.random.randint(0, 4)
break
elif agent_dir is None:
self.agent_pos = np.array((1, 1))
self.agent_dir = 0
else:
self.agent_pos = agent_pos
self.agent_dir = agent_dir
self.trajectory.append((self.agent_pos, self.agent_dir))
def place_goal(self, goal_pos):
self.goal_pos = goal_pos
self.put_obj(Goal(), *self.goal_pos)
def printGrid(self, init=False):
grid = super().printGrid(init)
properties_str = ""
properties_str += F"ProbTurnIntended:{self.probability_turn_intended}\n"
properties_str += F"ProbForwardIntended:{self.probability_intended}\n"
return grid + properties_str
def step(self, action):
obs, reward, terminated, truncated, info = super().step(action)
self.trajectory.append((action, self.agent_pos, self.agent_dir, str(self.adversaries["blue"])))
if truncated and info["ran_into_lava"]:
print(self.trajectory)
print("truncated: ", info)
self.trajectory = list()
if truncated and info["reached_goal"]:
print("truncated: ", info)
self.trajectory = list()
elif terminated and info["ran_into_lava"]:
print(self.trajectory)
print("terminated: ", info)
self.trajectory = list()
elif terminated:
print("terminated: ", info)
self.trajectory = list()
elif truncated:
print("truncated: ", info)
self.trajectory = list()
return obs, reward - self.per_step_penalty, terminated, truncated, info
def reset(self, **kwargs) -> tuple[ObsType, dict[str, Any]]:
return super().reset(**kwargs)
def _place_building(self, col, row, width, height, obj_type=Lava):
for i in range(col, width + col):
self.grid.vert_wall(i, row, height, obj_type=obj_type)
def _gen_grid(self, width, height):
super()._gen_grid(width, height)
self.grid = Grid(width, height)
# Generate the surrounding walls
self.grid.horz_wall(0, 0)
self.grid.horz_wall(0, height - 1)
self.grid.vert_wall(0, 0)
self.grid.vert_wall(width - 1, 0)
for i in range(1, height - 1):
self.grid.horz_wall(1, i, width-2, obj_type=SlipperyNorthEast("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self._place_building(7, 1, 4, 1)
self.grid.vert_wall(6, 1, 1, obj_type=SlipperyNorth("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self.grid.horz_wall(7, 2, 4, obj_type=SlipperyEast("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self.grid.vert_wall(11, 1, 1, obj_type=SlipperyNorth("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self._place_building(4, 5, 2, 1)
self.grid.vert_wall(3, 5, 1, obj_type=SlipperyNorth("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self.grid.vert_wall(6, 5, 1, obj_type=SlipperyNorth("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self.grid.horz_wall(4, 4, 2, obj_type=SlipperyEast("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self.grid.horz_wall(4, 6, 2, obj_type=SlipperyEast("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self._place_building(12, 7, 2, 3)
self.grid.vert_wall(11, 7, 3, obj_type=SlipperyNorth("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self.grid.horz_wall(11, 6, 3, obj_type=SlipperyEast("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self.grid.horz_wall(11, 10, 3, obj_type=SlipperyEast("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self._place_building(4, 10, 2, 2)
self.grid.vert_wall(3, 10, 2, obj_type=SlipperyNorth("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self.grid.vert_wall(6, 10, 2, obj_type=SlipperyNorth("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self.grid.horz_wall(4, 12, 2, obj_type=SlipperyEast("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self.grid.horz_wall(4, 9, 2, obj_type=SlipperyWest("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self.grid.vert_wall(5, 7, 3, obj_type=SlipperySouth("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
#should spawn randomly
x = np.random.choice([1,2,3,6,7,8,9])
y = np.random.choice([6,7,8])
self.add_adversary(x, y, "blue", direction=1, tasks=[FollowAgent("red", duration=2), DoRandom(duration=2)], repeating=True)
self.place_agent(agent_pos=np.array((1, height -2)), agent_dir=0, spawn_on_slippery=True)
self.place_goal(np.array((width - 2, 1)))
if self.dense_rewards: self.run_bfs()
class WindyCity2Env(MiniGridEnv):
def __init__(self,
randomize_start=True, size=10,
width=27,
height=22,
probability_intended=8/9,
probability_turn_intended=8/9,
obstacle_type=Lava,
goal_reward=1,
failure_penalty=-1,
per_step_penalty=0,
dense_rewards=False,
two_player_winning_region_start=False,
**kwargs):
self.obstacle_type = obstacle_type
self.size = size
self.probability_intended = probability_intended
self.probability_turn_intended = probability_turn_intended
if width is not None and height is not None:
self.width = width
self.height = height
elif size is not None:
self.width = size
self.height = size
else:
raise ValueError(f"Please define either width and height or a size for square environments. The set values are width: {width}, height: {height}, size: {size}.")
mission_space = MissionSpace(mission_func=self._gen_mission)
super().__init__(
width=self.width,
height=self.height,
max_steps=200,
# Set this to True for maximum speed
see_through_walls=False,
mission_space = mission_space,
**kwargs
)
self.randomize_start = randomize_start
self.two_player_winning_region_start = two_player_winning_region_start
self.goal_reward = goal_reward
self.failure_penalty = failure_penalty
self.dense_rewards = dense_rewards
self.per_step_penalty = per_step_penalty
self.trajectory = list()
@staticmethod
def _gen_mission():
return "Finish your task while avoiding the adversaries"
def disable_random_start(self):
self.randomize_start = False
def place_agent(self, spawn_on_slippery=False, agent_pos=None, agent_dir=0):
max_tries = 10_000
num_tries = 0
if self.two_player_winning_region_start == True:
winning_region = list()
winning_region += product([1,2,3,4], [y for y in range(1, self.height-1)])
winning_region += product([x for x in range(1,12)], [1])
winning_region += product([x for x in range(1,self.width-10)], [self.height-2])
winning_region += product([x for x in range(self.width-6, self.width-1)], [1,2,3,4])
winning_region += product([x for x in range(self.width-11, self.width-1)], [5])
x, y= winning_region[np.random.choice(len(winning_region), 1)[0]]
self.agent_pos = np.array((x,y))
self.agent_dir = np.random.randint(0, 4)
self.trajectory.append((self.agent_pos, self.agent_dir))
return
if self.randomize_start == True:
while True:
num_tries += 1
if num_tries > max_tries:
raise RecursionError("rejection sampling failed in place_obj")
x = np.random.randint(0, self.width)
y = np.random.randint(0, self.height)
cell = self.grid.get(*(x,y))
if ( cell is None or
(cell.can_overlap() and
not isinstance(cell, Lava) and
not isinstance(cell, Goal) and
(spawn_on_slippery or not is_slippery(cell)) and
not (x in [7, 8, 9, 10] and y in [9, 10]))
):
self.agent_pos = np.array((x, y))
self.agent_dir = np.random.randint(0, 4)
break
elif agent_dir is None:
self.agent_pos = np.array((1, 1))
self.agent_dir = 0
else:
self.agent_pos = agent_pos
self.agent_dir = agent_dir
self.trajectory.append((self.agent_pos, self.agent_dir))
def place_goal(self, goal_pos):
self.goal_pos = goal_pos
self.put_obj(Goal(), *self.goal_pos)
def printGrid(self, init=False):
grid = super().printGrid(init)
properties_str = ""
properties_str += F"ProbTurnIntended:{self.probability_turn_intended}\n"
properties_str += F"ProbForwardIntended:{self.probability_intended}\n"
return grid + properties_str
def step(self, action):
obs, reward, terminated, truncated, info = super().step(action)
self.trajectory.append((action, self.agent_pos, self.agent_dir))
if truncated and info["ran_into_lava"]:
print(self.trajectory)
print("truncated: ", info)
self.trajectory = list()
if truncated and info["reached_goal"]:
print("truncated: ", info)
self.trajectory = list()
elif terminated and info["ran_into_lava"]:
print(self.trajectory)
print("terminated: ", info)
self.trajectory = list()
elif terminated:
print("terminated: ", info)
self.trajectory = list()
elif truncated:
print("truncated: ", info)
self.trajectory = list()
return obs, reward - self.per_step_penalty, terminated, truncated, info
def reset(self, **kwargs) -> tuple[ObsType, dict[str, Any]]:
return super().reset(**kwargs)
def _place_building(self, col, row, width, height, obj_type=Lava):
for i in range(col, width + col):
self.grid.vert_wall(i, row, height, obj_type=obj_type)
def _gen_grid(self, width, height):
super()._gen_grid(width, height)
self.grid = Grid(width, height)
# Generate the surrounding walls
self.grid.horz_wall(0, 0)
self.grid.horz_wall(0, height - 1)
self.grid.vert_wall(0, 0)
self.grid.vert_wall(width - 1, 0)
for i in range(1, height - 1):
self.grid.horz_wall(1, i, width-2, obj_type=SlipperyNorthEast("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self.grid.horz_wall(1, 17, 15, obj_type=SlipperyEast("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self.grid.horz_wall(1, 18, 16, obj_type=SlipperyEast("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self.grid.horz_wall(1, 19, 17, obj_type=SlipperyEast("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self.grid.horz_wall(1, 20, 18, obj_type=SlipperyEast("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self.grid.horz_wall(1, 7, 9, obj_type=SlipperyEast("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self.grid.horz_wall(1, 8, 8, obj_type=SlipperyEast("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self.grid.horz_wall(1, 9, 8, obj_type=SlipperyEast("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self.grid.horz_wall(1, 10, 7, obj_type=SlipperyEast("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self._place_building(16, 1, 4, 2)
self.grid.vert_wall(15, 1, 2, obj_type=SlipperyNorth("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self.grid.horz_wall(16, 3, 4, obj_type=SlipperyEast("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self.grid.vert_wall(20, 1, 2, obj_type=SlipperyNorth("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self._place_building(10, 3, 3, 4)
#self.grid.vert_wall(9, 3, 4, obj_type=SlipperyNorth("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self.grid.vert_wall(13, 3, 4, obj_type=SlipperyNorth("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self.grid.horz_wall(10, 2, 3, obj_type=SlipperyEast("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self.grid.horz_wall(10, 7, 3, obj_type=SlipperyEast("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self._place_building(16, 7, 8, 5)
self.grid.vert_wall(15, 7, 4, obj_type=SlipperyNorth("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
#self.grid.vert_wall(17, 9, 3, obj_type=Lava)
self.grid.vert_wall(24, 7, 5, obj_type=SlipperyNorth("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self.grid.vert_wall(15, 9, 3, obj_type=SlipperyNorth("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self.grid.horz_wall(16, 6, 7, obj_type=SlipperyEast("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self.grid.horz_wall(16, 12, 7, obj_type=SlipperyEast("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self.grid.vert_wall(22, 12, 1, obj_type=SlipperyNorthEast("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self.grid.vert_wall(23, 13, 1, obj_type=SlipperyNorthEast("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self._place_building(8, 11, 5, 6)
#self.grid.vert_wall(7, 11, 6, obj_type=SlipperyNorth("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self.grid.vert_wall(13, 11, 6, obj_type=SlipperyNorth("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self.grid.horz_wall(8, 17, 5, obj_type=SlipperyEast("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self.grid.horz_wall(9, 10, 4, obj_type=SlipperyWest("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self.grid.horz_wall(10, 9, 3, obj_type=SlipperyWest("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self.grid.vert_wall(12, 7, 4, obj_type=SlipperySouth("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self._place_building(22, 14, 4, 4)
self.grid.vert_wall(21, 14, 4, obj_type=SlipperyNorth("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self.grid.horz_wall(22, 13, 4, obj_type=SlipperyEast("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self.grid.horz_wall(22, 18, 4, obj_type=SlipperyEast("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
#self.grid.vert_wall(22, 13, 1, obj_type=SlipperyNorthEast("white", probability_intended=self.probability_intended, probability_turn_intended=self.probability_turn_intended))
self.place_agent(agent_pos=np.array((18, height - 4)), agent_dir=3, spawn_on_slippery=True)
self.place_goal(np.array((width - 2, 10)))
if self.dense_rewards: self.run_bfs()
class WindyCitySmallAdv(AdversaryEnv):
def __init__(self,
randomize_start=True, size=10,
width=11,
height=9,
probability_intended=1,
probability_turn_intended=1,
obstacle_type=Lava,
goal_reward=1,
failure_penalty=-1,
per_step_penalty=0,
dense_rewards=False,
two_player_winning_region_start=False,
**kwargs):
self.obstacle_type = obstacle_type
self.size = size
self.probability_intended = probability_intended
self.probability_turn_intended = probability_turn_intended
if width is not None and height is not None:
self.width = width
self.height = height
elif size is not None:
self.width = size
self.height = size
else:
raise ValueError(f"Please define either width and height or a size for square environments. The set values are width: {width}, height: {height}, size: {size}.")
mission_space = MissionSpace(mission_func=self._gen_mission)
super().__init__(
width=self.width,
height=self.height,
max_steps=50,
# Set this to True for maximum speed
see_through_walls=False,
#mission_space = mission_space,
**kwargs
)
self.randomize_start = randomize_start
self.two_player_winning_region_start = two_player_winning_region_start
self.goal_reward = goal_reward
self.failure_penalty = failure_penalty
self.dense_rewards = dense_rewards
self.per_step_penalty = per_step_penalty
self.trajectory = list()
@staticmethod
def _gen_mission():
return "Finish your task while avoiding the adversaries"
def disable_random_start(self):
self.randomize_start = False
def place_agent(self, spawn_on_slippery=False, agent_pos=None, agent_dir=0):
max_tries = 10_000
num_tries = 0
if self.randomize_start == True:
while True:
num_tries += 1
if num_tries > max_tries:
raise RecursionError("rejection sampling failed in place_obj")
x = np.random.randint(0, self.width)
y = np.random.randint(5, self.height)
cell = self.grid.get(*(x,y))
if ( cell is None or
(cell.can_overlap() and
not isinstance(cell, Lava) and
not isinstance(cell, Goal) and
(spawn_on_slippery or not is_slippery(cell)) and
not (x in [7, 8, 9, 10] and y in [9, 10]))
):
self.agent_pos = np.array((x, y))
self.agent_dir = np.random.randint(0, 4)
break
elif agent_dir is None:
self.agent_pos = np.array((1, 1))
self.agent_dir = 0
else:
self.agent_pos = agent_pos
self.agent_dir = agent_dir
self.trajectory.append((self.agent_pos, self.agent_dir))
def place_goal(self, goal_pos):
self.goal_pos = goal_pos
self.put_obj(Goal(), *self.goal_pos)
def printGrid(self, init=False):
grid = super().printGrid(init)
properties_str = ""
properties_str += F"ProbTurnIntended:{self.probability_turn_intended}\n"
properties_str += F"ProbForwardIntended:{self.probability_intended}\n"
return grid + properties_str
def step(self, action):
obs, reward, terminated, truncated, info = super().step(action)
self.trajectory.append((action, self.agent_pos, self.agent_dir))
if truncated and info["ran_into_lava"]:
print(self.trajectory)
print("truncated: ", info)
self.trajectory = list()
if truncated and info["reached_goal"]:
print("truncated: ", info)
self.trajectory = list()
elif terminated and info["ran_into_lava"]:
print(self.trajectory)
print("terminated: ", info)
self.trajectory = list()
elif terminated and info["collision"]:
print(self.trajectory)
print("terminated: ", info)
self.trajectory = list()
elif terminated:
print("terminated: ", info)
self.trajectory = list()
elif truncated:
print("truncated: ", info)
self.trajectory = list()
return obs, reward - self.per_step_penalty, terminated, truncated, info
def reset(self, **kwargs) -> tuple[ObsType, dict[str, Any]]:
return super().reset(**kwargs)
def _place_building(self, col, row, width, height, obj_type=Lava):
for i in range(col, width + col):
self.grid.vert_wall(i, row, height, obj_type=obj_type)
def _gen_grid(self, width, height):
super()._gen_grid(width, height)
self.grid = Grid(width, height)
# Generate the surrounding walls
self.grid.horz_wall(0, 0)
self.grid.horz_wall(0, height - 1)
self.grid.vert_wall(0, 0)
self.grid.vert_wall(width - 1, 0)
self._place_building(3, 3, 5, 2)
blue_adv = self.add_adversary(2, 4, "blue", direction=3, tasks=
[GoTo((2,2)), GoTo((8,2)), GoTo((8,4)), GoTo((8,2)), GoTo((2,2)), GoTo((2,4))], repeating=True)
self.place_agent(agent_pos=np.array((5, 5)), agent_dir=3, spawn_on_slippery=True)
self.place_goal(np.array((width//2, 1)))
if self.dense_rewards: self.run_bfs()

183
notebooks/shielding_files_20241129T122425_0tlvpkoj/grid.prism
File diff suppressed because it is too large
View File

49
notebooks/shielding_files_20241129T122425_0tlvpkoj/grid.txt

@ -0,0 +1,49 @@
WGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWG
WGbWbWbWbWbWbWbWbWbWbWbWbWbWbWnWVRVRVRVRnWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbWeWeWeWbWbWnWVRVRVRVRnWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbWVRVRVRnWbWbWeWeWeWeWbWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbWVRVRVRnWbWbWbWbWbWbWbWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbWVRVRVRnWbWbWbWbWbWbWbWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbWVRVRVRnWbWbWeWeWeWeWeWeWeWbWbWbWWG
WGeWeWeWeWeWeWeWeWeWeWeWsWbWbWnWVRVRVRVRVRVRVRVRnWbWWG
WGeWeWeWeWeWeWeWeWbWbWbWsWbWbWnWVRVRVRVRVRVRVRVRnWbWWG
WGeWeWeWeWeWeWeWeWbWwWwWsWbWbWnWVRVRVRVRVRVRVRVRnWbWWG
WGeWeWeWeWeWeWeWbWwWwWwWsWbWbWnWVRVRVRVRVRVRVRVRnWGGWG
WGbWbWbWbWbWbWbWVRVRVRVRVRnWbWnWVRVRVRVRVRVRVRVRnWbWWG
WGbWbWbWbWbWbWbWVRVRVRVRVRnWbWbWeWeWeWeWeWeWbWbWbWbWWG
WGbWbWbWbWbWbWbWVRVRVRVRVRnWbWbWbWbWbWbWbWbWeWeWeWeWWG
WGbWbWbWbWbWbWbWVRVRVRVRVRnWbWbWbWbWbWbWbWnWVRVRVRVRWG
WGbWbWbWbWbWbWbWVRVRVRVRVRnWbWbWbWbWbWbWbWnWVRVRVRVRWG
WGbWbWbWbWbWbWbWVRVRVRVRVRnWbWbWbWbWbWbWbWnWVRVRVRVRWG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWXReWbWbWbWbWbWnWVRVRVRVRWG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWeWeWeWeWWG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWbWbWbWWG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWbWbWWG
WGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWG
------------------------------------------------------
WGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWG
WGbWbWbWbWbWbWbWbWbWbWbWbWbWbWnW nWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbWeWeWeWbWbWnW nWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbW nWbWbWeWeWeWeWbWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbW nWbWbWbWbWbWbWbWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbW nWbWbWbWbWbWbWbWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbW nWbWbWeWeWeWeWeWeWeWbWbWbWWG
WGeWeWeWeWeWeWeWeWeWeWeWsWbWbWnW nWbWWG
WGeWeWeWeWeWeWeWeWbWbWbWsWbWbWnW nWbWWG
WGeWeWeWeWeWeWeWeWbWwWwWsWbWbWnW nWbWWG
WGeWeWeWeWeWeWeWbWwWwWwWsWbWbWnW nW WG
WGbWbWbWbWbWbWbW nWbWnW nWbWWG
WGbWbWbWbWbWbWbW nWbWbWeWeWeWeWeWeWbWbWbWbWWG
WGbWbWbWbWbWbWbW nWbWbWbWbWbWbWbWbWeWeWeWeWWG
WGbWbWbWbWbWbWbW nWbWbWbWbWbWbWbWnW WG
WGbWbWbWbWbWbWbW nWbWbWbWbWbWbWbWnW WG
WGbWbWbWbWbWbWbW nWbWbWbWbWbWbWbWnW WG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWnW WG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWeWeWeWeWWG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWbWbWbWWG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWbWbWWG
WGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWG
------------------------------------------------------
------------------------------------------------------
ProbTurnIntended:0.95
ProbForwardIntended:0.95

1580
notebooks/shielding_files_20241129T122425_0tlvpkoj/shield
File diff suppressed because it is too large
View File

183
notebooks/shielding_files_20241129T122427_qaabh7px/grid.prism
File diff suppressed because it is too large
View File

49
notebooks/shielding_files_20241129T122427_qaabh7px/grid.txt

@ -0,0 +1,49 @@
WGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWG
WGbWbWbWbWbWbWbWbWbWbWbWbWbWbWnWVRVRVRVRnWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbWeWeWeWbWbWnWVRVRVRVRnWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbWVRVRVRnWbWbWeWeWeWeWbWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbWVRVRVRnWbWbWbWbWbWbWbWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbWVRVRVRnWbWbWbWbWbWbWbWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbWVRVRVRnWbWbWeWeWeWeWeWeWeWbWbWbWWG
WGeWeWeWeWeWeWeWeWXReWeWsWbWbWnWVRVRVRVRVRVRVRVRnWbWWG
WGeWeWeWeWeWeWeWeWbWbWbWsWbWbWnWVRVRVRVRVRVRVRVRnWbWWG
WGeWeWeWeWeWeWeWeWbWwWwWsWbWbWnWVRVRVRVRVRVRVRVRnWbWWG
WGeWeWeWeWeWeWeWbWwWwWwWsWbWbWnWVRVRVRVRVRVRVRVRnWGGWG
WGbWbWbWbWbWbWbWVRVRVRVRVRnWbWnWVRVRVRVRVRVRVRVRnWbWWG
WGbWbWbWbWbWbWbWVRVRVRVRVRnWbWbWeWeWeWeWeWeWbWbWbWbWWG
WGbWbWbWbWbWbWbWVRVRVRVRVRnWbWbWbWbWbWbWbWbWeWeWeWeWWG
WGbWbWbWbWbWbWbWVRVRVRVRVRnWbWbWbWbWbWbWbWnWVRVRVRVRWG
WGbWbWbWbWbWbWbWVRVRVRVRVRnWbWbWbWbWbWbWbWnWVRVRVRVRWG
WGbWbWbWbWbWbWbWVRVRVRVRVRnWbWbWbWbWbWbWbWnWVRVRVRVRWG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWnWVRVRVRVRWG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWeWeWeWeWWG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWbWbWbWWG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWbWbWWG
WGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWG
------------------------------------------------------
WGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWG
WGbWbWbWbWbWbWbWbWbWbWbWbWbWbWnW nWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbWeWeWeWbWbWnW nWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbW nWbWbWeWeWeWeWbWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbW nWbWbWbWbWbWbWbWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbW nWbWbWbWbWbWbWbWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbW nWbWbWeWeWeWeWeWeWeWbWbWbWWG
WGeWeWeWeWeWeWeWeWeWeWeWsWbWbWnW nWbWWG
WGeWeWeWeWeWeWeWeWbWbWbWsWbWbWnW nWbWWG
WGeWeWeWeWeWeWeWeWbWwWwWsWbWbWnW nWbWWG
WGeWeWeWeWeWeWeWbWwWwWwWsWbWbWnW nW WG
WGbWbWbWbWbWbWbW nWbWnW nWbWWG
WGbWbWbWbWbWbWbW nWbWbWeWeWeWeWeWeWbWbWbWbWWG
WGbWbWbWbWbWbWbW nWbWbWbWbWbWbWbWbWeWeWeWeWWG
WGbWbWbWbWbWbWbW nWbWbWbWbWbWbWbWnW WG
WGbWbWbWbWbWbWbW nWbWbWbWbWbWbWbWnW WG
WGbWbWbWbWbWbWbW nWbWbWbWbWbWbWbWnW WG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWnW WG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWeWeWeWeWWG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWbWbWbWWG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWbWbWWG
WGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWG
------------------------------------------------------
------------------------------------------------------
ProbTurnIntended:0.95
ProbForwardIntended:0.95

1580
notebooks/shielding_files_20241129T122427_qaabh7px/shield
File diff suppressed because it is too large
View File

183
notebooks/shielding_files_20241129T122429_qyepifjg/grid.prism
File diff suppressed because it is too large
View File

49
notebooks/shielding_files_20241129T122429_qyepifjg/grid.txt

@ -0,0 +1,49 @@
WGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWG
WGbWbWbWbWbWbWbWbWbWbWbWbWbWbWnWVRVRVRVRnWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbWeWeWeWbWbWnWVRVRVRVRnWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbWVRVRVRnWbWbWeWeWeWeWbWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbWVRVRVRnWbWbWbWbWbWbWbWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbWVRVRVRnWbWbWbWbWbWbWbWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbWVRVRVRnWbWbWeWeWeWeWeWeWeWbWbWbWWG
WGeWeWeWeWeWeWeWeWeWeWeWsWbWbWnWVRVRVRVRVRVRVRVRnWbWWG
WGeWeWeWeWeWeWeWeWbWbWbWsWbWbWnWVRVRVRVRVRVRVRVRnWbWWG
WGeWeWeWeWeWeWeWeWbWwWwWsWbWbWnWVRVRVRVRVRVRVRVRnWbWWG
WGeWeWeWeWeWeWeWbWwWwWwWsWbWbWnWVRVRVRVRVRVRVRVRnWGGWG
WGbWbWbWbWbWbWbWVRVRVRVRVRnWbWnWVRVRVRVRVRVRVRVRnWbWWG
WGbWbWbWbWbWbWbWVRVRVRVRVRnWbWbWeWeWeWeWeWeWbWbWbWbWWG
WGbWbWbWbWbWbWbWVRVRVRVRVRnWbWbWbWbWbWbWbWbWeWeWeWeWWG
WGbWbWbWbWbWbWbWVRVRVRVRVRnWbWbWbWbWbWbWbWnWVRVRVRVRWG
WGbWbWbWbWbWbWbWVRVRVRVRVRnWbWbWbWbWbWbWbWnWVRVRVRVRWG
WGbWbWbWbWbWbWbWVRVRVRVRVRnWbWbWbWbWbWbWbWnWVRVRVRVRWG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWnWVRVRVRVRWG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWeWeWeWeWWG
WGeWeWeWeWeWeWeWeWeWeWXReWeWeWeWeWeWbWbWbWbWbWbWbWbWWG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWbWbWWG
WGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWG
------------------------------------------------------
WGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWG
WGbWbWbWbWbWbWbWbWbWbWbWbWbWbWnW nWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbWeWeWeWbWbWnW nWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbW nWbWbWeWeWeWeWbWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbW nWbWbWbWbWbWbWbWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbW nWbWbWbWbWbWbWbWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbW nWbWbWeWeWeWeWeWeWeWbWbWbWWG
WGeWeWeWeWeWeWeWeWeWeWeWsWbWbWnW nWbWWG
WGeWeWeWeWeWeWeWeWbWbWbWsWbWbWnW nWbWWG
WGeWeWeWeWeWeWeWeWbWwWwWsWbWbWnW nWbWWG
WGeWeWeWeWeWeWeWbWwWwWwWsWbWbWnW nW WG
WGbWbWbWbWbWbWbW nWbWnW nWbWWG
WGbWbWbWbWbWbWbW nWbWbWeWeWeWeWeWeWbWbWbWbWWG
WGbWbWbWbWbWbWbW nWbWbWbWbWbWbWbWbWeWeWeWeWWG
WGbWbWbWbWbWbWbW nWbWbWbWbWbWbWbWnW WG
WGbWbWbWbWbWbWbW nWbWbWbWbWbWbWbWnW WG
WGbWbWbWbWbWbWbW nWbWbWbWbWbWbWbWnW WG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWnW WG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWeWeWeWeWWG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWbWbWbWWG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWbWbWWG
WGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWG
------------------------------------------------------
------------------------------------------------------
ProbTurnIntended:0.95
ProbForwardIntended:0.95

1578
notebooks/shielding_files_20241129T122429_qyepifjg/shield
File diff suppressed because it is too large
View File

183
notebooks/shielding_files_20241129T122432_3ui3yv2s/grid.prism
File diff suppressed because it is too large
View File

49
notebooks/shielding_files_20241129T122432_3ui3yv2s/grid.txt

@ -0,0 +1,49 @@
WGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWG
WGbWbWbWbWbWbWbWbWbWbWbWbWbWbWnWVRVRVRVRnWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbWeWeWeWbWbWnWVRVRVRVRnWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbWVRVRVRnWbWbWeWeWeWeWbWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbWVRVRVRnWbWbWbWbWbWbWbWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbWVRVRVRnWbWbWbWbWbWbWbWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbWVRVRVRnWbWbWeWeWeWeWeWeWeWbWbWbWWG
WGeWeWeWeWeWeWeWeWeWeWeWsWbWbWnWVRVRVRVRVRVRVRVRnWbWWG
WGeWeWeWeWeWeWeWeWbWbWbWsWbWbWnWVRVRVRVRVRVRVRVRnWbWWG
WGeWeWeWeWeWeWeWeWbWwWwWsWbWbWnWVRVRVRVRVRVRVRVRnWbWWG
WGeWeWeWeWeWeWeWbWwWwWwWsWbWbWnWVRVRVRVRVRVRVRVRnWGGWG
WGbWbWbWbWbWbWbWVRVRVRVRVRnWbWnWVRVRVRVRVRVRVRVRnWbWWG
WGbWbWbWbWbWbWbWVRVRVRVRVRnWbWbWeWeWeWeWeWeWbWbWbWbWWG
WGbWbWbWbWbWbWbWVRVRVRVRVRnWbWbWbWbWbWbWbWbWeWeWeWeWWG
WGbWbWbWbWbWbWbWVRVRVRVRVRnWbWbWbWbWbWbWXRnWVRVRVRVRWG
WGbWbWbWbWbWbWbWVRVRVRVRVRnWbWbWbWbWbWbWbWnWVRVRVRVRWG
WGbWbWbWbWbWbWbWVRVRVRVRVRnWbWbWbWbWbWbWbWnWVRVRVRVRWG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWnWVRVRVRVRWG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWeWeWeWeWWG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWbWbWbWWG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWbWbWWG
WGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWG
------------------------------------------------------
WGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWG
WGbWbWbWbWbWbWbWbWbWbWbWbWbWbWnW nWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbWeWeWeWbWbWnW nWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbW nWbWbWeWeWeWeWbWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbW nWbWbWbWbWbWbWbWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbW nWbWbWbWbWbWbWbWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbW nWbWbWeWeWeWeWeWeWeWbWbWbWWG
WGeWeWeWeWeWeWeWeWeWeWeWsWbWbWnW nWbWWG
WGeWeWeWeWeWeWeWeWbWbWbWsWbWbWnW nWbWWG
WGeWeWeWeWeWeWeWeWbWwWwWsWbWbWnW nWbWWG
WGeWeWeWeWeWeWeWbWwWwWwWsWbWbWnW nW WG
WGbWbWbWbWbWbWbW nWbWnW nWbWWG
WGbWbWbWbWbWbWbW nWbWbWeWeWeWeWeWeWbWbWbWbWWG
WGbWbWbWbWbWbWbW nWbWbWbWbWbWbWbWbWeWeWeWeWWG
WGbWbWbWbWbWbWbW nWbWbWbWbWbWbWbWnW WG
WGbWbWbWbWbWbWbW nWbWbWbWbWbWbWbWnW WG
WGbWbWbWbWbWbWbW nWbWbWbWbWbWbWbWnW WG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWnW WG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWeWeWeWeWWG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWbWbWbWWG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWbWbWWG
WGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWG
------------------------------------------------------
------------------------------------------------------
ProbTurnIntended:0.95
ProbForwardIntended:0.95

1574
notebooks/shielding_files_20241129T122432_3ui3yv2s/shield
File diff suppressed because it is too large
View File

183
notebooks/shielding_files_20241129T122454_58hszne6/grid.prism
File diff suppressed because it is too large
View File

49
notebooks/shielding_files_20241129T122454_58hszne6/grid.txt

@ -0,0 +1,49 @@
WGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWG
WGbWbWbWbWbWbWbWbWbWbWbWbWbWbWnWVRVRVRVRnWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbWeWeWeWbWbWnWVRVRVRVRnWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbWVRVRVRnWbWbWeWeWeWeWbWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbWVRVRVRnWbWbWbWbWbWbWbWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbWVRVRVRnWbWbWbWbWbWbWbWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbWVRVRVRnWbWbWeWeWeWeWeWeWeWbWbWbWWG
WGXReWeWeWeWeWeWeWeWeWeWsWbWbWnWVRVRVRVRVRVRVRVRnWbWWG
WGeWeWeWeWeWeWeWeWbWbWbWsWbWbWnWVRVRVRVRVRVRVRVRnWbWWG
WGeWeWeWeWeWeWeWeWbWwWwWsWbWbWnWVRVRVRVRVRVRVRVRnWbWWG
WGeWeWeWeWeWeWeWbWwWwWwWsWbWbWnWVRVRVRVRVRVRVRVRnWGGWG
WGbWbWbWbWbWbWbWVRVRVRVRVRnWbWnWVRVRVRVRVRVRVRVRnWbWWG
WGbWbWbWbWbWbWbWVRVRVRVRVRnWbWbWeWeWeWeWeWeWbWbWbWbWWG
WGbWbWbWbWbWbWbWVRVRVRVRVRnWbWbWbWbWbWbWbWbWeWeWeWeWWG
WGbWbWbWbWbWbWbWVRVRVRVRVRnWbWbWbWbWbWbWbWnWVRVRVRVRWG
WGbWbWbWbWbWbWbWVRVRVRVRVRnWbWbWbWbWbWbWbWnWVRVRVRVRWG
WGbWbWbWbWbWbWbWVRVRVRVRVRnWbWbWbWbWbWbWbWnWVRVRVRVRWG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWnWVRVRVRVRWG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWeWeWeWeWWG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWbWbWbWWG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWbWbWWG
WGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWG
------------------------------------------------------
WGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWG
WGbWbWbWbWbWbWbWbWbWbWbWbWbWbWnW nWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbWeWeWeWbWbWnW nWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbW nWbWbWeWeWeWeWbWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbW nWbWbWbWbWbWbWbWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbW nWbWbWbWbWbWbWbWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbW nWbWbWeWeWeWeWeWeWeWbWbWbWWG
WGeWeWeWeWeWeWeWeWeWeWeWsWbWbWnW nWbWWG
WGeWeWeWeWeWeWeWeWbWbWbWsWbWbWnW nWbWWG
WGeWeWeWeWeWeWeWeWbWwWwWsWbWbWnW nWbWWG
WGeWeWeWeWeWeWeWbWwWwWwWsWbWbWnW nW WG
WGbWbWbWbWbWbWbW nWbWnW nWbWWG
WGbWbWbWbWbWbWbW nWbWbWeWeWeWeWeWeWbWbWbWbWWG
WGbWbWbWbWbWbWbW nWbWbWbWbWbWbWbWbWeWeWeWeWWG
WGbWbWbWbWbWbWbW nWbWbWbWbWbWbWbWnW WG
WGbWbWbWbWbWbWbW nWbWbWbWbWbWbWbWnW WG
WGbWbWbWbWbWbWbW nWbWbWbWbWbWbWbWnW WG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWnW WG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWeWeWeWeWWG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWbWbWbWWG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWbWbWWG
WGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWG
------------------------------------------------------
------------------------------------------------------
ProbTurnIntended:0.95
ProbForwardIntended:0.95

1580
notebooks/shielding_files_20241129T122454_58hszne6/shield
File diff suppressed because it is too large
View File

183
notebooks/shielding_files_20241129T122456_wtrsvp2x/grid.prism
File diff suppressed because it is too large
View File

49
notebooks/shielding_files_20241129T122456_wtrsvp2x/grid.txt

@ -0,0 +1,49 @@
WGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWG
WGbWbWbWbWbWbWbWbWbWbWbWbWbWbWnWVRVRVRVRnWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbWeWeWeWbWbWnWVRVRVRVRnWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbWVRVRVRnWbWbWeWeWeWeWbWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbWVRVRVRnWbWbWbWbWbWbWbWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbWVRVRVRnWbWbWbWbWbWbWbWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWXRbWVRVRVRnWbWbWeWeWeWeWeWeWeWbWbWbWWG
WGeWeWeWeWeWeWeWeWeWeWeWsWbWbWnWVRVRVRVRVRVRVRVRnWbWWG
WGeWeWeWeWeWeWeWeWbWbWbWsWbWbWnWVRVRVRVRVRVRVRVRnWbWWG
WGeWeWeWeWeWeWeWeWbWwWwWsWbWbWnWVRVRVRVRVRVRVRVRnWbWWG
WGeWeWeWeWeWeWeWbWwWwWwWsWbWbWnWVRVRVRVRVRVRVRVRnWGGWG
WGbWbWbWbWbWbWbWVRVRVRVRVRnWbWnWVRVRVRVRVRVRVRVRnWbWWG
WGbWbWbWbWbWbWbWVRVRVRVRVRnWbWbWeWeWeWeWeWeWbWbWbWbWWG
WGbWbWbWbWbWbWbWVRVRVRVRVRnWbWbWbWbWbWbWbWbWeWeWeWeWWG
WGbWbWbWbWbWbWbWVRVRVRVRVRnWbWbWbWbWbWbWbWnWVRVRVRVRWG
WGbWbWbWbWbWbWbWVRVRVRVRVRnWbWbWbWbWbWbWbWnWVRVRVRVRWG
WGbWbWbWbWbWbWbWVRVRVRVRVRnWbWbWbWbWbWbWbWnWVRVRVRVRWG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWnWVRVRVRVRWG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWeWeWeWeWWG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWbWbWbWWG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWbWbWWG
WGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWG
------------------------------------------------------
WGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWG
WGbWbWbWbWbWbWbWbWbWbWbWbWbWbWnW nWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbWeWeWeWbWbWnW nWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbW nWbWbWeWeWeWeWbWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbW nWbWbWbWbWbWbWbWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbW nWbWbWbWbWbWbWbWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbW nWbWbWeWeWeWeWeWeWeWbWbWbWWG
WGeWeWeWeWeWeWeWeWeWeWeWsWbWbWnW nWbWWG
WGeWeWeWeWeWeWeWeWbWbWbWsWbWbWnW nWbWWG
WGeWeWeWeWeWeWeWeWbWwWwWsWbWbWnW nWbWWG
WGeWeWeWeWeWeWeWbWwWwWwWsWbWbWnW nW WG
WGbWbWbWbWbWbWbW nWbWnW nWbWWG
WGbWbWbWbWbWbWbW nWbWbWeWeWeWeWeWeWbWbWbWbWWG
WGbWbWbWbWbWbWbW nWbWbWbWbWbWbWbWbWeWeWeWeWWG
WGbWbWbWbWbWbWbW nWbWbWbWbWbWbWbWnW WG
WGbWbWbWbWbWbWbW nWbWbWbWbWbWbWbWnW WG
WGbWbWbWbWbWbWbW nWbWbWbWbWbWbWbWnW WG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWnW WG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWeWeWeWeWWG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWbWbWbWWG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWbWbWWG
WGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWG
------------------------------------------------------
------------------------------------------------------
ProbTurnIntended:0.95
ProbForwardIntended:0.95

1580
notebooks/shielding_files_20241129T122456_wtrsvp2x/shield
File diff suppressed because it is too large
View File

183
notebooks/shielding_files_20241129T122458_wavsk47p/grid.prism
File diff suppressed because it is too large
View File

49
notebooks/shielding_files_20241129T122458_wavsk47p/grid.txt

@ -0,0 +1,49 @@
WGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWG
WGbWbWbWbWbWbWbWbWbWbWbWbWbWbWnWVRVRVRVRnWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbWeWeWeWbWbWnWVRVRVRVRnWbWbWXRbWbWWG
WGbWbWbWbWbWbWbWbWbWVRVRVRnWbWbWeWeWeWeWbWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbWVRVRVRnWbWbWbWbWbWbWbWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbWVRVRVRnWbWbWbWbWbWbWbWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbWVRVRVRnWbWbWeWeWeWeWeWeWeWbWbWbWWG
WGeWeWeWeWeWeWeWeWeWeWeWsWbWbWnWVRVRVRVRVRVRVRVRnWbWWG
WGeWeWeWeWeWeWeWeWbWbWbWsWbWbWnWVRVRVRVRVRVRVRVRnWbWWG
WGeWeWeWeWeWeWeWeWbWwWwWsWbWbWnWVRVRVRVRVRVRVRVRnWbWWG
WGeWeWeWeWeWeWeWbWwWwWwWsWbWbWnWVRVRVRVRVRVRVRVRnWGGWG
WGbWbWbWbWbWbWbWVRVRVRVRVRnWbWnWVRVRVRVRVRVRVRVRnWbWWG
WGbWbWbWbWbWbWbWVRVRVRVRVRnWbWbWeWeWeWeWeWeWbWbWbWbWWG
WGbWbWbWbWbWbWbWVRVRVRVRVRnWbWbWbWbWbWbWbWbWeWeWeWeWWG
WGbWbWbWbWbWbWbWVRVRVRVRVRnWbWbWbWbWbWbWbWnWVRVRVRVRWG
WGbWbWbWbWbWbWbWVRVRVRVRVRnWbWbWbWbWbWbWbWnWVRVRVRVRWG
WGbWbWbWbWbWbWbWVRVRVRVRVRnWbWbWbWbWbWbWbWnWVRVRVRVRWG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWnWVRVRVRVRWG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWeWeWeWeWWG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWbWbWbWWG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWbWbWWG
WGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWG
------------------------------------------------------
WGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWG
WGbWbWbWbWbWbWbWbWbWbWbWbWbWbWnW nWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbWeWeWeWbWbWnW nWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbW nWbWbWeWeWeWeWbWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbW nWbWbWbWbWbWbWbWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbW nWbWbWbWbWbWbWbWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbW nWbWbWeWeWeWeWeWeWeWbWbWbWWG
WGeWeWeWeWeWeWeWeWeWeWeWsWbWbWnW nWbWWG
WGeWeWeWeWeWeWeWeWbWbWbWsWbWbWnW nWbWWG
WGeWeWeWeWeWeWeWeWbWwWwWsWbWbWnW nWbWWG
WGeWeWeWeWeWeWeWbWwWwWwWsWbWbWnW nW WG
WGbWbWbWbWbWbWbW nWbWnW nWbWWG
WGbWbWbWbWbWbWbW nWbWbWeWeWeWeWeWeWbWbWbWbWWG
WGbWbWbWbWbWbWbW nWbWbWbWbWbWbWbWbWeWeWeWeWWG
WGbWbWbWbWbWbWbW nWbWbWbWbWbWbWbWnW WG
WGbWbWbWbWbWbWbW nWbWbWbWbWbWbWbWnW WG
WGbWbWbWbWbWbWbW nWbWbWbWbWbWbWbWnW WG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWnW WG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWeWeWeWeWWG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWbWbWbWWG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWbWbWWG
WGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWG
------------------------------------------------------
------------------------------------------------------
ProbTurnIntended:0.95
ProbForwardIntended:0.95

1578
notebooks/shielding_files_20241129T122458_wavsk47p/shield
File diff suppressed because it is too large
View File

183
notebooks/shielding_files_20241129T122500_n10bceo8/grid.prism
File diff suppressed because it is too large
View File

49
notebooks/shielding_files_20241129T122500_n10bceo8/grid.txt

@ -0,0 +1,49 @@
WGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWG
WGbWbWbWbWbWbWbWbWbWbWbWbWbWbWnWVRVRVRVRnWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbWeWeWeWbWbWnWVRVRVRVRnWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbWVRVRVRnWbWbWeWeWeWeWbWbWbWbWbWbWWG
WGXRbWbWbWbWbWbWbWbWVRVRVRnWbWbWbWbWbWbWbWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbWVRVRVRnWbWbWbWbWbWbWbWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbWVRVRVRnWbWbWeWeWeWeWeWeWeWbWbWbWWG
WGeWeWeWeWeWeWeWeWeWeWeWsWbWbWnWVRVRVRVRVRVRVRVRnWbWWG
WGeWeWeWeWeWeWeWeWbWbWbWsWbWbWnWVRVRVRVRVRVRVRVRnWbWWG
WGeWeWeWeWeWeWeWeWbWwWwWsWbWbWnWVRVRVRVRVRVRVRVRnWbWWG
WGeWeWeWeWeWeWeWbWwWwWwWsWbWbWnWVRVRVRVRVRVRVRVRnWGGWG
WGbWbWbWbWbWbWbWVRVRVRVRVRnWbWnWVRVRVRVRVRVRVRVRnWbWWG
WGbWbWbWbWbWbWbWVRVRVRVRVRnWbWbWeWeWeWeWeWeWbWbWbWbWWG
WGbWbWbWbWbWbWbWVRVRVRVRVRnWbWbWbWbWbWbWbWbWeWeWeWeWWG
WGbWbWbWbWbWbWbWVRVRVRVRVRnWbWbWbWbWbWbWbWnWVRVRVRVRWG
WGbWbWbWbWbWbWbWVRVRVRVRVRnWbWbWbWbWbWbWbWnWVRVRVRVRWG
WGbWbWbWbWbWbWbWVRVRVRVRVRnWbWbWbWbWbWbWbWnWVRVRVRVRWG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWnWVRVRVRVRWG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWeWeWeWeWWG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWbWbWbWWG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWbWbWWG
WGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWG
------------------------------------------------------
WGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWG
WGbWbWbWbWbWbWbWbWbWbWbWbWbWbWnW nWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbWeWeWeWbWbWnW nWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbW nWbWbWeWeWeWeWbWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbW nWbWbWbWbWbWbWbWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbW nWbWbWbWbWbWbWbWbWbWbWbWbWWG
WGbWbWbWbWbWbWbWbWbW nWbWbWeWeWeWeWeWeWeWbWbWbWWG
WGeWeWeWeWeWeWeWeWeWeWeWsWbWbWnW nWbWWG
WGeWeWeWeWeWeWeWeWbWbWbWsWbWbWnW nWbWWG
WGeWeWeWeWeWeWeWeWbWwWwWsWbWbWnW nWbWWG
WGeWeWeWeWeWeWeWbWwWwWwWsWbWbWnW nW WG
WGbWbWbWbWbWbWbW nWbWnW nWbWWG
WGbWbWbWbWbWbWbW nWbWbWeWeWeWeWeWeWbWbWbWbWWG
WGbWbWbWbWbWbWbW nWbWbWbWbWbWbWbWbWeWeWeWeWWG
WGbWbWbWbWbWbWbW nWbWbWbWbWbWbWbWnW WG
WGbWbWbWbWbWbWbW nWbWbWbWbWbWbWbWnW WG
WGbWbWbWbWbWbWbW nWbWbWbWbWbWbWbWnW WG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWnW WG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWeWeWeWeWWG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWbWbWbWWG
WGeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWeWbWbWbWbWbWbWbWWG
WGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWGWG
------------------------------------------------------
------------------------------------------------------
ProbTurnIntended:0.95
ProbForwardIntended:0.95

1574
notebooks/shielding_files_20241129T122500_n10bceo8/shield
File diff suppressed because it is too large
View File

|||||||
100:0
Loading…
Cancel
Save