Simulation de l'automatisation d'une serre avec un reseau de neurone artificiel

Nous allons "tenter" de simuler l'automatisation d'une serre de jardin à l'aide d'un RNA.

Il y aura plusieurs entrées, les capteurs : lumière, température, hydrologie....

Et plusieurs sorties : ventilation, pompe à eau, moteur de verrière, chauffage, arrosage...

Tout cela est de la simulation, il ne faudra pas l'utiliser en vrai car je n'ai aucune compétence en la matière, c'est juste encore une fois l'utilisation des RNA dans la vie concrète qui nous intéresse ici.

Nous allons définir les règles suivante :

  • nuit + < 20° = fermeture verrière
  • nuit + > 20° = ouverture verrière
  • jour + >20° = ouverture verrière
  • jour + <20° = fermeture verrière
  • sec + >20° = arrosage
  • humide >50 % = ventilation
  • <10° = chauffage
  • >10 = pas de chauffage

Codage des entrées pour mise à l’échelle (monde réel → entrée de neurone) :

  • lumière (nuit à jour): -1 à 1 (Lech=2/100*L %-1)
  • température (-20 à 60) : -1 à 1 ( Tech=2/80*(T°+20)-1)
  • hygrométrie (0 % - 100%) : 0 à 1 (Hech=1/100*H %-1

 

Codage des sorties pour mise à l'echelle (sortie de neurone → monde reel):

  • ventilation à 3 positions (0,1,2) : -1 ,0, 1 Vech=arrondi(Vs+1)
  • verrière (0 à 100%): -1 à 1 VERech=(VERs+1)/2*100
  • arrosage à 3 positions (0,1,2): -1,0,1 Aech=arrondi(As+1)
  • chauffage pré réglé off/on : -1 / 1 Cech= arrondi((Cs+1)/2)   

 

Diagramme de notre RNA à n neurone cachées 3 / n / 4 

3 Entrées , 4 sorties, et n cachées

Tableau des données d'entrée/sortie pour l'apprentissage

Lumière

jour/nuit

Température

°c

Hygrométrie

%

Verrière

pos 1,2,ou3

Ventillation

​pos 1,2,ou3

Chauffage

Eteint

Arrosage

Allumé

0 -10 0 0 0 1 0
0 0 0 0 0 1 0
0 10 0 0 0 1 1
0 20 0 0 0 0 1
0 30 0 1 1 0 1
0 40 0 2 1 0 2
0 50 0 2 2 0 2
1 -10 0 0 0 1 0
1 0 0 0 0 1 0
1 10 0 0 0 1 0
1 20 0 0 0 0 1
1 30 0 1 1 0 1
1 40 0 1 1 0 2
1 50 0 1 1 0 2
0 -10 50 0 0 1 0
0 0 50 0 0 1 0
0 10 50 0 0 1 0
0 20 50 0 0 0 0
0 30 50 1 1 0 0
0 40 50 2 2 0 0
0 50 50 2 2 0 0
1 -10 50 0 0 1 0
1 0 50 0 0 1 0
1 10 50 0 0 1 0
1 20 50 0 1 0 0
1 30 50 1 1 0 0
1 40 50 1 2 0 0
1 50 50 1 2 0 0

Bon c'est un peu au filling! mais très bien pour nous. Si on devez programmer ceci en classique, ça donnerai pas mal de conditions "if" avec des tranches.. même si d'après le tableau on pourrait réduire et faire des groupements. On peut parfois tomber des des données très hétérogène avec plus d'entrées et plus de sorties,et la ça devient la pagaille.

Voici le resultat, avec un réseau de neurones à 32 couches cachées.

Fichier de donnée d'apprentissage + fichier de RNA (pour FANN) -> téléchargement https://www.pollen-multimedia.com/images/files/reseau-de-neurone-serre-jardin-fann.zip

  

////////////////// C O D E   P H P  /////////////////////

$ann = fann_create_from_file(dirname(__FILE__) . "/serre.net");

// lumiere, temperature, hygrometrie

$entree[0]=1;  // jour
$entree[1]=2/80*($temperature_en_degree +20)-1;
$entree[2]=-1;  // 0° humidité
$resultat=fann_run ( $ann ,$entree); 

$ventilation=round($resutat[0]+1);  //ventilation à 3 positions (0,1,2) : -1 ,0, 1 Vech=arrondi(Vs+1)

$verriere=(($resutat[1]+1)/2)*100;  //verrière (0 à 100%): -1 à 1 VERech=(VERs+1)/2*100

$chauffage=round($resutat[2]+1);  //arrosage à 3 positions (0,1,2): -1,0,1 Aech=arrondi(As+1)

$arrosage=round(($resutat[3]+1)/2);  //chauffage pré réglé off/on : -1 / 1 Cech= arrondi((Cs+1)/2) 

////////////////// C O D E   P H P  /////////////////////