emmademareywilliams / stage

0 stars 0 forks source link

Tests sur la fonction récompense #12

Open emmademareywilliams opened 3 years ago

emmademareywilliams commented 3 years ago

Premier test : on divise la récompense en non occupation par 15 au lieu de 10 :

def reward(self, datas, i):
        reward = - abs( datas[i,2] - Tc )
                if datas[i,3] == 0:
                    if datas[i,0] != 0:
                        reward -= datas[i,4] / 15
                return reward

Avec gamma = 0.8 et sur 400 épisodes, on obtient une belle convergence au niveau de la température intérieure (mais pas vraiment au niveau de la récompense) :

reward_divisepar15

Le comportement de l'agent est très satisfaisant, d'autant plus que sur une bonne majorité des épisodes joués, il consommait moins que le modèle.

Un exemple ci-dessous :

comportement_divisepar15

J'ai aussi essayé de diviser la récompense par 5 : on observe également une convergence de la température, même s'il semblerait que l'écart type dans ce cas-là soit légèrement supérieur au cas "divisé par 15" :

reward_divisepar5

Pour comparer les deux méthodes, on fait jouer les réseaux un certain nombre de fois (18 tests en mode play) et on note le pourcentage d'écart entre le modèle et l'agent en terme de consommation pour chaque expérience. Les résultats moyens obtenus sont comme suit :

Méthode Divisé par 5 Divisé par 15
Pourcentage d'écart moyen 1.37 % 4.46 %
Nombre de fois où l'agent est meilleur que le modèle 6 6
emmademareywilliams commented 3 years ago

Deuxième test : on divise la récompense de l'hystérésis par le "time of flight", toutes choses égales par ailleurs (gamma = 0.9, nb épisodes = 400)

def reward(self, datas, i):
        reward = - abs( datas[i,2] - Tc ) / datas[i,4]
        if datas[i,3] == 0:
            if datas[i,0] != 0:
                reward -= datas[i,4] / 15
        return reward

Pour ce cas-là, des résultats beaucoup moins satisfaisants : pas de convergence de la température, beaucoup de bruit, un comportement de l'agent qui ne correspond pas à ce qu'on cherche (il semble suivre le modèle de loin, sans réussir à rester dans la zone de confort)...

reward_hystdivise

comportement_hystdivise

emmademareywilliams commented 3 years ago

Troisième test : on observe comment le modèle gère un long weekend :

Pour ce faire, on programme l'agenda hebdomadaire de manière à ce qu'il y ait 4 jours de non occupation (cas d'un long weekend avec jours fériés). La durée de simulation a été ralongée à 10 jours au lieu de 8 afin de bien rendre compte du phénomène (surtout de la remontée de température après le weekend) :

schedule = np.array([ [7,17], [7,17], [7,17], [-1,-1], [-1,-1], [-1,-1], [-1,-1] ])

wsize = 1 + 10*24*3600//interval

Le réseau utilisé pour faire les tests est le réseau occupationdivisepar5_gamma9_26_08.h5 entraîné avec les paramètres suivants :

De manière générale, le réseau gère plutôt bien les longs weekend et suit grosso modo le modèle ; par contre, il a du mal à remonter en température à la fin de la période de non occupation et se retrouve à la traîne par rapport au modèle. La plupart du temps, il arrive à remonter dans la zone de confort mais cela se fait après l'horaire d'ouverture post long weekend.

Un exemple typique ci-dessous :

comportement_longWE

emmademareywilliams commented 3 years ago

Quatrième test : comment le réseau gère le changement des valeurs de R et de C

Un autre test pour mettre à l'épreuve la robustesse du réseau occupationdivisepar5_gamma9_26_08.h5 est de changer les valeurs de R et de C et de lancer le code en mode play. Les différentes expériences sont effectuées avec les paramètres suivants :

Dans le tableau ci-dessous, les résultats des différents test :

R C Id expérience Modèle Agent Commentaire
3.09e-4 8.63e+8 20j_20/02 OK OK Valeurs sur lesquelles le réseau a été entraîné
2.99e-4 7.57e+8 10j_27/02 OK OK
1.38e-5 1.08e+11 20j_20/03 NON NON Valeurs aberrantes de R et C (?)
3.43e-4 1.06e+9 10j_05/03 OK OK L'agent et le modèle se suivent moins (sur la remontée de température, l'agent est soit en avance soit en retard)

Par exemple, pour des valeurs de R et de C de l'expérience 10j_27/02 :

comportement_newRC1

De manière générale, le modèle et l'agent répondent bien aux changements de valeurs et continuent d'avoir des comportements acceptables, sauf dans un cas (mais celui-ci correspond à des valeurs de R et C quelque peu aberrantes...).

À noter toutefois que les valeurs utilisées sont restées assez proches des valeurs initiales utilisées pour entraîner le réseau.

emmademareywilliams commented 3 years ago

Influence des valeurs de R et C sur le comportement du modèle :

Les tests ont été réalisés avec les paramètres suivants :

Dans un premier temps, on fait jouer le modèle à R fixée :

comparatif_C

Puis pour C fixée :

comparatif_R

emmademareywilliams commented 3 years ago

Ci-dessous les 4 courbes juxtaposées qui correspondent aux couples (R, C) étudiés plus haut :

comparatif_RetC