Ray RLlib¶
from netforge_rl.bridges.rllib_bridge import NetForgeRLlibEnv
env = NetForgeRLlibEnv({'scenario_type': 'ransomware', 'max_ticks': 100})
Reference: python benchmarks/rllib_rmappo.py — shared LSTM PPO, red + blue,
train_batch_size=1024, legacy API stack.
import ray
from ray.tune.registry import register_env
from ray.rllib.algorithms.ppo import PPOConfig
from netforge_rl.bridges.rllib_bridge import NetForgeRLlibEnv
ray.init()
register_env('netforge-v0', lambda cfg: NetForgeRLlibEnv(cfg))
config = (
PPOConfig()
.environment('netforge-v0', env_config={'scenario_type': 'ransomware'})
.api_stack(
enable_rl_module_and_learner=False,
enable_env_runner_and_connector_v2=False,
)
.multi_agent(
policies={
'red_rmappo': (None, None, None, {'model': {'use_lstm': True}}),
'blue_rmappo': (None, None, None, {'model': {'use_lstm': True}}),
},
policy_mapping_fn=lambda agent_id, *a, **kw: (
'red_rmappo' if 'red' in agent_id else 'blue_rmappo'
),
)
.training(train_batch_size=1024)
)
algo = config.build()
Curriculum: Curriculum.