Ajout demonstration final

Mesure-preliminaire
LéopoldClement 2 years ago
parent 5002bba5a2
commit 24965b27e7

@ -0,0 +1,35 @@
#! /bin/python3
import socket
import time
import numpy as np
from coapthon.client.helperclient import HelperClient
from coapthon.client.superviseur import (SuperviseurGlobal,
SuperviseurLocalFiltre)
from coapthon.utils import parse_uri
from utils_learning import RequettePeriodique
host, port, path = parse_uri("coap://polaris.kokarde.fr/basic")
try:
tmp = socket.gethostbyname(host)
host = tmp
except socket.gaierror:
pass
nombreCapteur = 25
periodeRequette = 1
periodeControl = 15
clients = [HelperClient(server=(host, port)) for _ in range(nombreCapteur)]
super_g = SuperviseurGlobal(clients, SuperviseurLocalFiltre)
requests = [RequettePeriodique(client, periodeRequette, path, name="Spamer {}".format(
n)) for n, client in enumerate(clients)]
[request.start() for request in requests]
for _ in range(10):
super_g.reset()
time.sleep(periodeControl)
print(super_g.state)

@ -7,11 +7,7 @@ import time
from typing import Any, Callable, Iterable, Mapping, Optional from typing import Any, Callable, Iterable, Mapping, Optional
import numpy as np import numpy as np
import tensorflow as tf
from tf_agents.environments import (py_environment, tf_environment,
tf_py_environment, utils, wrappers)
from tf_agents.specs import array_spec
from tf_agents.trajectories import time_step as ts
from coapthon.client.helperclient import HelperClient from coapthon.client.helperclient import HelperClient
from coapthon.client.superviseur import (SuperviseurGlobal, from coapthon.client.superviseur import (SuperviseurGlobal,
@ -46,62 +42,70 @@ class RequettePeriodique(threading.Thread):
else: else:
raise ValueError raise ValueError
try :
class MaquetteCoapEnv(py_environment.PyEnvironment): import tensorflow as tf
def __init__(self, clients: Iterable[HelperClient], superviseur_local_type: type, superviseur_global_type: type, request_path: str, args_reward: Iterable[Any] = (), from tf_agents.environments import (py_environment, tf_environment,
control_period: float = 30, request_period: Iterable[float] = None) -> None: tf_py_environment, utils, wrappers)
from tf_agents.specs import array_spec
self.clients = clients from tf_agents.trajectories import time_step as ts
self.super_g = superviseur_global_type(clients, superviseur_local_type) class MaquetteCoapEnv(py_environment.PyEnvironment):
def __init__(self, clients: Iterable[HelperClient], superviseur_local_type: type, superviseur_global_type: type, request_path: str, args_reward: Iterable[Any] = (),
self._action_spec = array_spec.BoundedArraySpec( control_period: float = 30, request_period: Iterable[float] = None) -> None:
shape=(len(clients),), dtype=np.float32, minimum=-10, maximum=10, name='action')
self._observation_spec = array_spec.BoundedArraySpec( self.clients = clients
shape=(superviseur_global_type.nombre_mesure, len(clients)), dtype=np.float32, minimum=0, name='observation') self.super_g = superviseur_global_type(clients, superviseur_local_type)
self._episode_ended = False
self._current_time_step = np.zeros( self._action_spec = array_spec.BoundedArraySpec(
(3, len(self.clients)), dtype=np.float32) shape=(len(clients),), dtype=np.float32, minimum=-10, maximum=10, name='action')
self.control_period = control_period self._observation_spec = array_spec.BoundedArraySpec(
shape=(superviseur_global_type.nombre_mesure, len(clients)), dtype=np.float32, minimum=0, name='observation')
self._args_reward = args_reward self._episode_ended = False
self._current_time_step = np.zeros(
if request_period is None: (3, len(self.clients)), dtype=np.float32)
request_period = [5 for client in clients] self.control_period = control_period
self.requests = [RequettePeriodique(client, request_period[n], request_path, name="Spamer {}".format( self._args_reward = args_reward
n)) for n, client in enumerate(clients)]
[request.start() for request in self.requests] if request_period is None:
request_period = [5 for client in clients]
@property
def request_period(self): self.requests = [RequettePeriodique(client, request_period[n], request_path, name="Spamer {}".format(
return [request.period for request in self.requests] n)) for n, client in enumerate(clients)]
[request.start() for request in self.requests]
def action_spec(self) -> array_spec.BoundedArraySpec:
return self._action_spec @property
def request_period(self):
def observation_spec(self) -> array_spec.BoundedArraySpec: return [request.period for request in self.requests]
return self._observation_spec
def action_spec(self) -> array_spec.BoundedArraySpec:
def _reset(self) -> None: return self._action_spec
etat = np.zeros(
(3, len(self.clients)), dtype=np.float32) def observation_spec(self) -> array_spec.BoundedArraySpec:
self._current_time_step = etat return self._observation_spec
self.super_g.reset_rto()
return ts.transition(etat, reward=0) def _reset(self) -> None:
etat = np.zeros(
def _step(self, action: Iterable[float]): (3, len(self.clients)), dtype=np.float32)
self.super_g.application_action(action) self._current_time_step = etat
self.super_g.reset() self.super_g.reset_rto()
return ts.transition(etat, reward=0)
time.sleep(self.control_period)
def _step(self, action: Iterable[float]):
etat = self.super_g.state self.super_g.application_action(action)
if self._args_reward == (): self.super_g.reset()
recompense = self.super_g.qualite(5*[1], 1000, 1, 1)
else: time.sleep(self.control_period)
recompense = self.super_g.qualite(5*[1], *self._args_reward)
self._current_time_step = etat etat = self.super_g.state
if self.super_g.failed: if self._args_reward == ():
return ts.termination(etat, -10000) recompense = self.super_g.qualite(5*[1], 1000, 1, 1)
else: else:
return ts.transition(etat, reward=recompense) recompense = self.super_g.qualite(5*[1], *self._args_reward)
self._current_time_step = etat
if self.super_g.failed:
return ts.termination(etat, -10000)
else:
return ts.transition(etat, reward=recompense)
except ImportError :
print("Pas de fonctionalité d'apprentissage")
Loading…
Cancel
Save