https://wiki.hevs.ch/agreflex/index.php5?title=ModelisationOptimisationPr%C3%A9visonnelleControleurLocal&feed=atom&action=historyModelisationOptimisationPrévisonnelleControleurLocal - Revision history2024-03-28T13:51:50ZRevision history for this page on the wikiMediaWiki 1.18.1https://wiki.hevs.ch/agreflex/index.php5?title=ModelisationOptimisationPr%C3%A9visonnelleControleurLocal&diff=297&oldid=prevJoel.cavat: /* Modélisation de l'optimisation prévisionnelle du contrôleur local */2014-05-15T06:21:17Z<p><span class="autocomment">Modélisation de l'optimisation prévisionnelle du contrôleur local</span></p>
<table class='diff diff-contentalign-left'>
<col class='diff-marker' />
<col class='diff-content' />
<col class='diff-marker' />
<col class='diff-content' />
<tr valign='top'>
<td colspan='2' style="background-color: white; color:black;">← Older revision</td>
<td colspan='2' style="background-color: white; color:black;">Revision as of 06:21, 15 May 2014</td>
</tr><tr><td colspan="2" class="diff-lineno">Line 3:</td>
<td colspan="2" class="diff-lineno">Line 3:</td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>= Modélisation de l'optimisation prévisionnelle du contrôleur local =  </div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>= Modélisation de l'optimisation prévisionnelle du contrôleur local =  </div></td></tr>
<tr><td class='diff-marker'>−</td><td style="background: #ffa; color:black; font-size: smaller;"><div>Le but de l'optimisation prévisionnelle du contrôleur local est d'optimiser la planification des appareils par rapport à un vecteur de coûts. Ce dernier est fourni par le contrôleur <del class="diffchange diffchange-inline">local</del>.  </div></td><td class='diff-marker'>+</td><td style="background: #cfc; color:black; font-size: smaller;"><div>Le but de l'optimisation prévisionnelle du contrôleur local est d'optimiser la planification des appareils par rapport à un vecteur de coûts. Ce dernier est fourni par le contrôleur <ins class="diffchange diffchange-inline">central</ins>.  </div></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>== Classification des appareils ==</div></td><td class='diff-marker'> </td><td style="background: #eee; color:black; font-size: smaller;"><div>== Classification des appareils ==</div></td></tr>
</table>Joel.cavathttps://wiki.hevs.ch/agreflex/index.php5?title=ModelisationOptimisationPr%C3%A9visonnelleControleurLocal&diff=288&oldid=prevGad: Created page with "{{private}} {{TOC right}} = Modélisation de l'optimisation prévisionnelle du contrôleur local = Le but de l'optimisation prévisionnelle du contrôleur local est d'optimi..."2014-05-14T19:12:16Z<p>Created page with "{{private}} {{TOC right}} = Modélisation de l'optimisation prévisionnelle du contrôleur local = Le but de l'optimisation prévisionnelle du contrôleur local est d'optimi..."</p>
<p><b>New page</b></p><div>{{private}}<br />
{{TOC right}}<br />
<br />
= Modélisation de l'optimisation prévisionnelle du contrôleur local = <br />
Le but de l'optimisation prévisionnelle du contrôleur local est d'optimiser la planification des appareils par rapport à un vecteur de coûts. Ce dernier est fourni par le contrôleur local. <br />
<br />
== Classification des appareils ==<br />
Nous différencions principalement quatre types d'appareils : Les appareils modulables, décalables, interruptibles et accumulables.<br />
<br />
=== Modulables ===<br />
Il s'agit qui ont comme objectif de rester dans une borne, un seuil minimum et un seuil maximum. Pour cela, ils vont consommer de manière imprévisible pour rester dans leur seuil. Il s'agit par exemple d'un radiateur, d'une pompe à chaleur (climatisation ou chauffage) ou d'une batterie de véhicule.<br />
<br />
=== Décalables ===<br />
Une fois l'appareil enclenché, le profil énergétique est prévisible. Il est possible d'avancer ou de retarder l'enclenchement de l'appareil. Une fois l'appareil enclenché, il est impossible de stopper l'appareil. Il s'agit par exemple d'une machine à laver ou d'une lave vaisselle.<br />
<br />
=== Interruptibles ===<br />
L'appareil est identique au profil décalable à la différence qu'il est possible de stopper l'appareil pour le réenclencher ultérieurement.<br />
<br />
=== Accumulables ===<br />
Il s'agit ici de batteries qui peuvent stocker ou fournir de l'énergie.<br />
<br />
<br />
Dans le modèle d'optimisation [[day-ahead]], nous utilisons que les deux premières catégories d'appareils. Pour les appareils décalables et, afin de simplifier le modèle, nous prenons l'hypothèse que l'énergie consommée à travers le temps est constante.<br />
<br />
<br />
<br />
== Modèle mathématique ==<br />
Dans le modèle d'optimisation day-ahead, nous n'utilisons que les deux premières catégories d'appareils. L'optimisation de la planification des appareils peut se faire à l'aide d'un modèle mathématique :<br />
<br />
[[File:formule_base.gif]]<br />
<br />
La variable de décision <math>d_{ijt}</math> est vraie si la tranche horaire <math>j</math> de l'appareil <math>i</math> fonctionne durant la plage horaire <math>t</math>. Le vecteur <math>c_{t}</math> est le coût par tranche horaire reçu par le contrôleur central et <math>p_{ij}</math> est la consommation d'un appareil <math>i</math> durant la tranche horaire <math>j</math>. Les indices <math>i</math>, <math>j</math> et <math>t</math> sont des entiers plus grands ou égaux à zéro. L'ensemble <math>I_{dec}</math> contient les appareils décalables et l'ensemble <math>I_{int}</math> contient les appareils interruptibles. La seconde variable de décision <math>d^a_t</math>, calculé à la ligne (3) permet de répartir la consommation. Enfin, <math>J_i</math> est le vecteur de consommation d'un appareil <math>i</math>.<br />
Le but est de placer les tranches horaires des appareils en minimisant les coûts (1). Pour éviter de concentrer tous les appareils sur la suite de tranches horaires de plus faible coût, nous donnons plus d'importance à la consommation totale pour chaque tranche d'heure. Nous utilisons un facteur polynomial a. Le but est de déterminer la valeur de a tel que discuté dans le chapitre « Preliminary comments on the action of local controllers » pour garder une solution optimale et une bonne performance de résolution. Malheureusement, les résolveurs permettent de résoudre des programmes linéaires ou quadratiques. Si nous utilisons un facteur quadratique alors il sera nécessaire de déterminer un diviseur permettant d'atténuer ce facteur.<br />
La ligne (2) nous permet de contraindre chaque tranche horaire d'un appareil à fonctionner. Nous calculons la consommation maximum des appareils pour chaque tranche à la ligne (3). Nous gardons l'ordre de consommation des appareils interruptibles (4) et décalables (5). Enfin, certaines tranches horaires d'un appareil ne peuvent pas être placée dans les « bords » du vecteur horaire. <br />
Par la suite, il sera nécessaire d'ajouter les contraintes supplémentaires comme la préférence de l'utilisateur ou la fenêtre de temps où l'appareil doit fonctionner.<br />
<br />
== Un premier prototype ==<br />
Un premier script python permet de valider le modèle actuel. Le fichier appareils.json est un document JSON qui énumère les appareils et leurs spécificités. Puis, le fichier modele.py exécutable avec Python2.7 utilise la librairie gurobipy pour parser les données, créer le modèle, l'optimiser et afficher le résultat. Nous utilisons une licence académique de Gurobi 5.6.2.<br />
<br />
== Sources du prototype ==<br />
Les sources sont disponibles à l'adresse suivante : https://bitbucket.org/godsend/agreflex/src<br />
<br />
=== Résultats ===<br />
La première ligne représente le vecteur de coût. Puis, chaque ligne représente la consommation planifiée et optimisée d'un appareil décalable ou interruptible.<br />
<br />
[[File:resultat_1.png]]<br />
<br />
<br />
== Amélioration du modèle ==<br />
<br />
Nous ajoutons dans ce modèle les appareils modulables dont les mesures doivent se situer entre un seuil minimum et un seuil maximum ainsi que les appareils accumulables. Ces derniers peuvent être modéliséscomme des appareils modulables qui ont la particularité d'accumuler ou de fournir de l'énergie.<br />
Pour ces appareils, les mesures peuvent être d'une unité différente et il est nécessaire d'avoir un facteur de conversion. Par exemple <math>x</math> kwh permet de réduire la température d'un frigo de <math>y</math> degré. Pour modéliser un appareil modulable, il est nécessaire de connaître son profil de gain/perte durant la journée. Pour le frigo, il s'agit par exemple les gains de température durant chaque instant <math>t</math>. Un appareil accumulable peut avoir des gains nuls mais il est important de modéliser son rendement. Un appareil modulable ou accumulable a un objectif final. Une batterie de voiture a comme objectif d'être chargée à 100 % à un moment donné. <br />
Il existe le seuil de la mesure, pour un frigo par exemple, le seuil se situe entre 4 et 6 degré. Il existe également une borne de consommation. Un appareil ne peut consommer plus de <math>x</math> kwh à chaque instant <math>t</math>. <br />
Il faut être prudent quant à la modélisation du seuil de la mesure. Il peut être impossible, compte tenu d'une borne maximum de consommation, de rester dans un seuil. Il est nécessaire de prendre en compte cette considération pour ne pas avoir de solution irréalisable. Par exemple, un utilisateur souhaite avoir la batterie de sa voiture chargée entre 60 et 100 % mais lorsqu'il branche sa batterie, celle-ci est chargée en dessous des 60 %. Il est donc nécessaire de charger la batterie à son seuil minimum le plus rapide possible. Un exemple est donné ci-dessous :<br />
<br />
[[File:Batterie_voiture.png|800px]]<br />
<br />
La zone jaune correspond au seuil de flexibilité de l'utilisateur. La zone bleu aux bornes de consommation minimum et maximum de l'appareil. Ci-dessous, nous présentons un exemple d'une batterie qui a comme objectif d'accumuler de l'énergie quand le prix est faible pour le restituer lorsque le prix est élevé :<br />
<br />
[[File:Batterie_appoint.png|800px]]<br />
<br />
Nous corrigeons et améliorons le modèle (cliquer pour agrandir) :<br />
<br />
[[File:formule_2.gif|800px]]<br />
<br />
<br />
Nous apportons de nouvelles variables de décision. Un appareil modulable ou accumulable contient un vecteur de consommation pour chaque instant t. Dès lors, l'indice j est inutile. Ces appareils ont besoin d'une mesure <math>m_{it}</math> (température, énergie stockée,...) qui doit si possible rester entre deux bornes. Le dépassement est multiplié dans la fonction objectif par une constante D élevée pour garantir une solution réalisable tout en utilisant des dépassements uniquement s'il est impossible de faire autrement. Pour calculer <math>m_{it}</math>, nous prenons la mesure initiale de l'appareil et avons comme objectif d'avoir une mesure finale (lignes 6 à 10). Pour les appareils qui pourraient stocker et fournir de l'énergie, le rendement est pris en compte par le facteur d'importation et d'exportation de l'énergie (ligne 6 et 7). Les gains du système sont également fournis pour chaque instant <math>t</math>. Les variables de décision de ces appareils sont la quantité d'énergie importée ou exportée à un instant t, ces variables sont bornées (lignes 12 à 15). A la ligne 11, la variable <math>d_t</math> est mise à jour avec la différence d'important et d'exportation des appareils modulables.<br />
La fonction objectif prend en compte la minimisation de la consommation de l'énergie par rapport au coût. La variable <math>d_t</math> doit avoir un degré > 1, mais les résolveurs ne permettent qu'un programme linéaire ou quadratique. Pour atténuer le degré de <math>d_t</math>, nous utilisons une constante <math>B < 1</math>. Celle-ci est à configurer en fonction du nombre d'appareils, du degré de flexibilité que l'on souhaite atteindre et permet de modéliser la flexibilité que les utilisateurs peuvent offrir. Si <math>B</math> tend vers 1, alors la solution ne sera pas flexible. Si <math>B</math> tend vers 0, au contraire, la solution sera flexible.</div>Gad