44 changed files with 16255 additions and 2142 deletions
-
2docker_build.sh
-
22docker_run_experiment.sh
-
2docker_run_jupyter.sh
-
11dockerfile
-
199notebooks/.ipynb_checkpoints/DeterministicShielding-checkpoint.ipynb
-
0notebooks/.ipynb_checkpoints/HelloLavaGap-checkpoint.ipynb
-
0notebooks/.ipynb_checkpoints/Playground-checkpoint.ipynb
-
147notebooks/.ipynb_checkpoints/ProbabilisticShielding-checkpoint.ipynb
-
557notebooks/.ipynb_checkpoints/SlipperyCliff-checkpoint.ipynb
-
199notebooks/DeterministicShielding.ipynb
-
719notebooks/FaultyActions.ipynb
-
105notebooks/FaultyActions.py
-
110notebooks/HelloLavaGap.py
-
107notebooks/Playground.py
-
365notebooks/ProbabilisticShielding.ipynb
-
523notebooks/SlipperyCliff.ipynb
-
105notebooks/SlipperyCliff.py
-
BINnotebooks/__pycache__/sb3utils.cpython-310.pyc
-
BINnotebooks/__pycache__/utils.cpython-310.pyc
-
744notebooks/environments/Minigrid/minigrid/envs/.ipynb_checkpoints/windycity-checkpoint.py
-
183notebooks/shielding_files_20241129T122425_0tlvpkoj/grid.prism
-
49notebooks/shielding_files_20241129T122425_0tlvpkoj/grid.txt
-
1580notebooks/shielding_files_20241129T122425_0tlvpkoj/shield
-
183notebooks/shielding_files_20241129T122427_qaabh7px/grid.prism
-
49notebooks/shielding_files_20241129T122427_qaabh7px/grid.txt
-
1580notebooks/shielding_files_20241129T122427_qaabh7px/shield
-
183notebooks/shielding_files_20241129T122429_qyepifjg/grid.prism
-
49notebooks/shielding_files_20241129T122429_qyepifjg/grid.txt
-
1578notebooks/shielding_files_20241129T122429_qyepifjg/shield
-
183notebooks/shielding_files_20241129T122432_3ui3yv2s/grid.prism
-
49notebooks/shielding_files_20241129T122432_3ui3yv2s/grid.txt
-
1574notebooks/shielding_files_20241129T122432_3ui3yv2s/shield
-
183notebooks/shielding_files_20241129T122454_58hszne6/grid.prism
-
49notebooks/shielding_files_20241129T122454_58hszne6/grid.txt
-
1580notebooks/shielding_files_20241129T122454_58hszne6/shield
-
183notebooks/shielding_files_20241129T122456_wtrsvp2x/grid.prism
-
49notebooks/shielding_files_20241129T122456_wtrsvp2x/grid.txt
-
1580notebooks/shielding_files_20241129T122456_wtrsvp2x/shield
-
183notebooks/shielding_files_20241129T122458_wavsk47p/grid.prism
-
49notebooks/shielding_files_20241129T122458_wavsk47p/grid.txt
-
1578notebooks/shielding_files_20241129T122458_wavsk47p/shield
-
183notebooks/shielding_files_20241129T122500_n10bceo8/grid.prism
-
49notebooks/shielding_files_20241129T122500_n10bceo8/grid.txt
-
1574notebooks/shielding_files_20241129T122500_n10bceo8/shield
@ -1 +1 @@ |
|||
sudo docker build -t tempest_in_action . |
|||
sudo docker build -t cacm_shielding_framework . |
@ -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" |
199
notebooks/.ipynb_checkpoints/DeterministicShielding-checkpoint.ipynb
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -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
File diff suppressed because it is too large
View File
199
notebooks/DeterministicShielding.ipynb
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
719
notebooks/FaultyActions.ipynb
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -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[ ]: |
|||
|
|||
|
|||
|
|||
|
@ -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[ ]: |
|||
|
|||
|
|||
|
|||
|
@ -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
File diff suppressed because it is too large
View File
523
notebooks/SlipperyCliff.ipynb
File diff suppressed because it is too large
View File
File diff suppressed because it is too large
View File
@ -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[ ]: |
|||
|
|||
|
|||
|
|||
|
@ -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
File diff suppressed because it is too large
View File
@ -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
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
File diff suppressed because it is too large
View File
@ -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
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
File diff suppressed because it is too large
View File
@ -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
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
File diff suppressed because it is too large
View File
@ -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
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
File diff suppressed because it is too large
View File
@ -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
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
File diff suppressed because it is too large
View File
@ -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
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
File diff suppressed because it is too large
View File
@ -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
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
File diff suppressed because it is too large
View File
@ -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
File diff suppressed because it is too large
View File
Reference in new issue
xxxxxxxxxx