|
from dataclasses import dataclass |
|
|
|
import param_ |
|
import streamlit as st |
|
import numpy as np |
|
|
|
|
|
@dataclass |
|
class Settings: |
|
|
|
perimeter: int = param_.PERIMETER |
|
perimeter_z: int = param_.PERIMETER_Z |
|
groundzone: int = param_.GROUNDZONE |
|
|
|
latlon = param_.LATLON['Paris']['lat'], param_.LATLON['Paris']['lon'] |
|
|
|
blues: int = param_.BLUES |
|
|
|
blues_per_circle = np.array(param_.BLUES_PER_CIRCLE) |
|
blue_circles_rho = param_.BLUE_CIRCLES_RHO |
|
blue_circles_theta = param_.BLUE_CIRCLES_THETA |
|
blue_circles_zed = param_.BLUE_CIRCLES_ZED |
|
blue_distance_factor: float = param_.BLUE_DISTANCE_FACTOR |
|
|
|
is_unkillable: bool = param_.BLUE_IS_UNKILLABLE |
|
|
|
blue_speed_init: int = param_.BLUE_SPEED_INIT |
|
|
|
reds: int = param_.REDS |
|
|
|
red_squads = param_.RED_SQUADS |
|
red_squads_rho = np.array(param_.RED_SQUADS_RHO) |
|
red_squads_theta = param_.RED_SQUADS_THETA |
|
red_squads_zed = param_.RED_SQUADS_ZED |
|
red_distance_factor: float = param_.RED_DISTANCE_FACTOR |
|
|
|
red_rho_noise = np.array(param_.RED_RHO_NOISE) |
|
red_theta_noise = np.array(param_.RED_THETA_NOISE) |
|
red_zed_noise = np.array(param_.RED_ZED_NOISE) |
|
|
|
red_speed_init: int = param_.RED_SPEED_INIT |
|
|
|
policy_folder: str = param_.POLICY_FOLDER |
|
|
|
|
|
def define_(with_streamlit: bool = True, blues: int = Settings.blues, reds: int = Settings.reds): |
|
"""" |
|
shows the blue and red swarms in Streamlit |
|
:return: |
|
""" |
|
blues = blues |
|
reds = reds |
|
|
|
if with_streamlit: |
|
st.title('Blues against Reds by hexamind.ai') |
|
st.write('controlled by Reinforcement Learning.') |
|
st.text('<- Set parameters') |
|
|
|
st.sidebar.subheader("Define the battlefield") |
|
blues = st.sidebar.slider("how many blues on defense?", 1, 20, 6) |
|
Settings.blues = blues |
|
blue_dispersion = st.sidebar.slider("set the average blue dispersion", 0.3, 1.0, 0.8) |
|
Settings.reds = reds |
|
reds = st.sidebar.slider("how many reds are on the attack?", 1, 20, 6) |
|
Settings.reds = reds |
|
red_dispersion = st.sidebar.slider("set the average red dispersion", 0.3, 1.0, 0.7) |
|
|
|
Settings.blue_distance_factor = 3 * blue_dispersion |
|
Settings.red_distance_factor = 3 * red_dispersion |
|
|
|
location = st.sidebar.radio("Location", ['Paris', 'Puilaurens', 'San Francisco']) |
|
|
|
lat_tg = param_.LATLON[location]['lat'] |
|
lon_tg = param_.LATLON[location]['lon'] |
|
|
|
Settings.latlon = lat_tg, lon_tg |
|
|
|
st.sidebar.write( |
|
'you probably need more drones ' |
|
'No worries, we have plenty at www.hexamind.ai ') |
|
|
|
return blues, reds |
|
|