sp
21 hours ago
4 changed files with 427 additions and 0 deletions
-
105notebooks/FaultyActions.py
-
110notebooks/HelloLavaGap.py
-
107notebooks/Playground.py
-
105notebooks/SlipperyCliff.py
@ -0,0 +1,105 @@ |
|||||
|
#!/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[ ]: |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
@ -0,0 +1,110 @@ |
|||||
|
#!/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[ ]: |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
@ -0,0 +1,107 @@ |
|||||
|
#!/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[ ]: |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
@ -0,0 +1,105 @@ |
|||||
|
#!/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[ ]: |
||||
|
|
||||
|
|
||||
|
|
||||
|
|
Write
Preview
Loading…
Cancel
Save
Reference in new issue