Optimisation de la gestion de stockage de l'énergie
Fermé
Victor_20GC
Messages postés
7
Date d'inscription
jeudi 30 avril 2020
Statut
Membre
Dernière intervention
30 avril 2020
-
30 avril 2020 à 12:23
yg_be Messages postés 22625 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 mars 2024 - 30 avril 2020 à 18:22
yg_be Messages postés 22625 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 29 mars 2024 - 30 avril 2020 à 18:22
A voir également:
- Optimisation de la gestion de stockage de l'énergie
- Optimisation pc - Guide
- Espace de stockage gmail plein - Guide
- Espace de stockage google - Guide
- Comment libérer de l'espace de stockage sans rien supprimer - Guide
- Logiciel gestion photos - Guide
5 réponses
yg_be
Messages postés
22625
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
29 mars 2024
1 461
30 avril 2020 à 13:00
30 avril 2020 à 13:00
bonjour,
Je suppose que tu fais ce stage dans le contexte d'études, et que tu as suivi une formation en optimisation et en programmation. https://www.commentcamarche.net/infos/25899-demander-de-l-aide-pour-vos-exercices-sur-ccm/
Je suis surpris de lire "les contraintes dépendes du temps": je ne vois pas ce que le temps vient faire dans ce contexte.
Quel algorithme d'optimisation choisirais-tu si les contraintes ne dépendaient pas du temps?
Je suppose que tu fais ce stage dans le contexte d'études, et que tu as suivi une formation en optimisation et en programmation. https://www.commentcamarche.net/infos/25899-demander-de-l-aide-pour-vos-exercices-sur-ccm/
Je suis surpris de lire "les contraintes dépendes du temps": je ne vois pas ce que le temps vient faire dans ce contexte.
Quel algorithme d'optimisation choisirais-tu si les contraintes ne dépendaient pas du temps?
Victor_20GC
Messages postés
7
Date d'inscription
jeudi 30 avril 2020
Statut
Membre
Dernière intervention
30 avril 2020
30 avril 2020 à 15:24
30 avril 2020 à 15:24
Pardon si je ne suis pas claire, je vais essayer de l'être le plus possible.
Les données de départ sont la consommation, la production, ainsi que les tarifs d'achat et de revente d'électricité sur les 24 prochaines heures. On considérera dans un premier temps que tarif d'achat est toujours supérieur au tarif de revente pour éviter un achat d'électricité dans le seul but de la revendre.
Le but est de minimiser le coût pour le gérant de l'installation.
Ce coût, lorsque la consommation est plus grande que la production est défini par :
Dans le cas où la production est plus grande que la consommation, on peut parler de bénéfice qui s'écrirait comme tel :
Mon objectif est donc de minimiser ce coût (ou de maximiser le bénéfice), en stockant/déstockant plus ou moins à chaque pas de temps. Mon seul degré de liberté et donc mon paramètre à optimiser est cette puissance de stockage, toutes les autres données (consommation, production, tarifs) étant des données.
Ma seule contrainte pour l'instant sur le stockage est la suivante :
dans le cas d'un surplus de consommation :
dans le cas d'un surplus de production :
Et le stock s'actualise à chaque tour de boucle (donc à chaque pas horaire) comme suit :
J'espère avoir été plus claire... n'hésitez pas à me redemander des précisions si nécessaire, et encore une fois merci de votre aide.
Les données de départ sont la consommation, la production, ainsi que les tarifs d'achat et de revente d'électricité sur les 24 prochaines heures. On considérera dans un premier temps que tarif d'achat est toujours supérieur au tarif de revente pour éviter un achat d'électricité dans le seul but de la revendre.
Le but est de minimiser le coût pour le gérant de l'installation.
Ce coût, lorsque la consommation est plus grande que la production est défini par :
coût[k]=bk*diff[k] + (ak-bk)Pdst[k]en reprenant les notations précédentes.
Dans le cas où la production est plus grande que la consommation, on peut parler de bénéfice qui s'écrirait comme tel :
benef[k]=ak(Pst[k]-diff[k]). La différence entre la puissance stockée et le surplus de production (diff), est égal à la puissance réinjectée dans le réseau, vendu au tarif ak, d'où l'expression précédente du bénéfice. Le coût, que l'on peut considérer comme l'opposé du bénéfice, serait égal à -bénéfice, on aurait donc un 'coût négatif'.
Mon objectif est donc de minimiser ce coût (ou de maximiser le bénéfice), en stockant/déstockant plus ou moins à chaque pas de temps. Mon seul degré de liberté et donc mon paramètre à optimiser est cette puissance de stockage, toutes les autres données (consommation, production, tarifs) étant des données.
Ma seule contrainte pour l'instant sur le stockage est la suivante :
dans le cas d'un surplus de consommation :
Pmin<Pdst[k]<min(Pmax,stock[k-1]/pas)
dans le cas d'un surplus de production :
Pmin<Pst[k]<min(Pmax,(capacité-stock[k-1])/pas)
Et le stock s'actualise à chaque tour de boucle (donc à chaque pas horaire) comme suit :
stock[k]=stock[k-1]-P(d)st[k]*pas(la puissance étant négative quand on stock et positive quand on déstocke, on a bien une augmentation du stock lorsque l'on stock et une diminution lorsque l'on déstocke).
J'espère avoir été plus claire... n'hésitez pas à me redemander des précisions si nécessaire, et encore une fois merci de votre aide.
yg_be
Messages postés
22625
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
29 mars 2024
1 461
30 avril 2020 à 16:00
30 avril 2020 à 16:00
Je te demande d'expliquer plus clairement afin que toi, tu comprennes le problème, ce qui te permettra de le résoudre.
J'ai l'impression que tu cherches quelqu'un pour faire le travail à ta place. Ce n'est certainement pas ainsi que tu progresseras.
As-tu lu et compris le lien que je t'ai proposé à propos de la programmation linéaire?
Tu écris "Les données de départ sont la consommation, la production, ainsi que les tarifs d'achat et de revente d'électricité sur les 24 prochaines heures. On considérera dans un premier temps que tarif d'achat est toujours supérieur au tarif de revente pour éviter un achat d'électricité dans le seul but de la revendre." Représente donc tout cela sous une forme algébrique, en utilisant une notation que tu utiliseras pas la suite. Il n'y a pas d'autres données de départ?
Ensuite, quand tu auras fini cette partie, décris ce que tu recherches, et représente cela sous une forme algébrique.
Bien entendu, explique chaque nouvelle notation que tu introduis.
Ensuite, décris ce que tu veux optimiser.
Finalement, décris les contraintes, toujours sous forme algébrique.
J'ai l'impression que tu cherches quelqu'un pour faire le travail à ta place. Ce n'est certainement pas ainsi que tu progresseras.
As-tu lu et compris le lien que je t'ai proposé à propos de la programmation linéaire?
Tu écris "Les données de départ sont la consommation, la production, ainsi que les tarifs d'achat et de revente d'électricité sur les 24 prochaines heures. On considérera dans un premier temps que tarif d'achat est toujours supérieur au tarif de revente pour éviter un achat d'électricité dans le seul but de la revendre." Représente donc tout cela sous une forme algébrique, en utilisant une notation que tu utiliseras pas la suite. Il n'y a pas d'autres données de départ?
Ensuite, quand tu auras fini cette partie, décris ce que tu recherches, et représente cela sous une forme algébrique.
Bien entendu, explique chaque nouvelle notation que tu introduis.
Ensuite, décris ce que tu veux optimiser.
Finalement, décris les contraintes, toujours sous forme algébrique.
Victor_20GC
Messages postés
7
Date d'inscription
jeudi 30 avril 2020
Statut
Membre
Dernière intervention
30 avril 2020
30 avril 2020 à 16:32
30 avril 2020 à 16:32
Bien entendu je ne souhaite pas que l'on résolve le problème à ma place, j'aimerais juste quelques petits conseils pour appréhender ce types de problèmes, car je ne m'y connais pas du tout et j'ai du mal à voir par où commencer.
J'ai déjà écrit sur papier le problème sous forme algébrique, je peux essayer de le retranscrire ici.
Je recherche à minimiser le coût sur 24h, qui s'écrit:
La puissance de stockage serait soumise aux contraintes suivantes :
Et il y aurait le stock à réactualiser à chaque pas de temps, mais je ne sais si je dois le considérer comme une contrainte :
Sur le papier je comprends ce qu'il faut faire : lorsque la consommation est excédentaire, il faut soutirer lorsque le prix d'achat de l'énergie est bas, et il vaut mieux déstocker quand il est haut.
Et lorsque l'on produit plus, il vaut mieux réinjecter lorsque le prix de revente est élevé et stocker lorsqu'il est bas.
Donc honnêtement, je pense avoir compris le problème, je n'ai juste aucune idée de comment le mettre en place en Python.
J'ai regardé le lien que vous m'avez conseillé, mais pour moi ce qui diffère dans mon problème, c'est que le stock n'est pas une contrainte, mais ce n'est pas non plus le vecteur à optimiser, je ne sais pas comment le gérer.
C'est pourquoi si vous avez une idée pour débuter, où un module qui pourrait m'aider, je pense que ça pourrait me débloquer.
J'ai déjà écrit sur papier le problème sous forme algébrique, je peux essayer de le retranscrire ici.
Données:
conso=[conso[0],conso[1],...,conso[23]]
prod=[prod[0],prod[1],...prod[23]]
prix_rev=[a[0],a[1],...,a[23]]
prix_ach=[b[0],b[1],...,b[23]]
diff=conso-prod
P=[P[0],P[1],...P[23]]vecteur dont il faut trouver les valeurs pour maximiser le coût
cout=[cout[0],cout[1],...,cout[23]]vecteurs dont les coordonnées découlent de celles de P
stock=[stock[0],stock[1],...,stock[23]]
Je recherche à minimiser le coût sur 24h, qui s'écrit:
cout_tot= somme(cout[k]) pour k appartenant à [0,23](je n'arrive pas à faire d'indentation ici)...
for k in range(24):
if diff[k]<0:
cout[k]=-a[k]*(P[k]-diff[k])
else :
cout[k]= b[k]*diff[k]+(a[k]-b[k])*P[k]
La puissance de stockage serait soumise aux contraintes suivantes :
Pmin<P[k]<min(Pmax,stock[k-1]/pas)selon que l'on stock ou déstocke.
Pmin<P<min(Pmax,(capacité-stock[k-1])/pas)
Et il y aurait le stock à réactualiser à chaque pas de temps, mais je ne sais si je dois le considérer comme une contrainte :
stock[k]=stock[k-1]-P[k]*pas
Sur le papier je comprends ce qu'il faut faire : lorsque la consommation est excédentaire, il faut soutirer lorsque le prix d'achat de l'énergie est bas, et il vaut mieux déstocker quand il est haut.
Et lorsque l'on produit plus, il vaut mieux réinjecter lorsque le prix de revente est élevé et stocker lorsqu'il est bas.
Donc honnêtement, je pense avoir compris le problème, je n'ai juste aucune idée de comment le mettre en place en Python.
J'ai regardé le lien que vous m'avez conseillé, mais pour moi ce qui diffère dans mon problème, c'est que le stock n'est pas une contrainte, mais ce n'est pas non plus le vecteur à optimiser, je ne sais pas comment le gérer.
C'est pourquoi si vous avez une idée pour débuter, où un module qui pourrait m'aider, je pense que ça pourrait me débloquer.
yg_be
Messages postés
22625
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
29 mars 2024
1 461
30 avril 2020 à 17:07
30 avril 2020 à 17:07
Tu n'as pas expliqué ce qu'était P.
Pourquoi écris-tu que que le stock n'est pas une contrainte?
N'as-tu pas d'autre contraintes, par exemple sur la capacité de la batterie?
Tu n'as pas exprimé la fonction à optimiser comme une équation linéaire de tes inconnues. Je pense que c'est un point de blocage.
Avant de mettre en place en Python, tu dois décider comment exprimer ton problème comme une programmation linéaire.
Pourquoi écris-tu que que le stock n'est pas une contrainte?
N'as-tu pas d'autre contraintes, par exemple sur la capacité de la batterie?
Tu n'as pas exprimé la fonction à optimiser comme une équation linéaire de tes inconnues. Je pense que c'est un point de blocage.
Avant de mettre en place en Python, tu dois décider comment exprimer ton problème comme une programmation linéaire.
Victor_20GC
Messages postés
7
Date d'inscription
jeudi 30 avril 2020
Statut
Membre
Dernière intervention
30 avril 2020
30 avril 2020 à 17:19
30 avril 2020 à 17:19
ah excusez moi oui P est la puissance de stockage ou de déstockage.
Hum disons que l'expression du stock à l'instant k dépend de P[k], mais ce n'est pas une contrainte. En revanche le stock à l'instant k-1 peut être une contrainte sur P[k].
Et oui il y a d'autres contraintes mais celle sur la capacité de la batterie est englobée dans la contrainte sur la puissance de stockage (on ne peut pas stocker plus que (capacité-stock[k-1]/pas soit la place disponible dans la batterie).
Et ensuite, il me semble avoir exprimé ma fonction à optimiser (coût), lorsque j'écris :
C'est cette somme que je dois minimiser avec les cout[k] qui varient selon que l'excédentaire soit de la production ou de la consommation.
Hum disons que l'expression du stock à l'instant k dépend de P[k], mais ce n'est pas une contrainte. En revanche le stock à l'instant k-1 peut être une contrainte sur P[k].
Et oui il y a d'autres contraintes mais celle sur la capacité de la batterie est englobée dans la contrainte sur la puissance de stockage (on ne peut pas stocker plus que (capacité-stock[k-1]/pas soit la place disponible dans la batterie).
Et ensuite, il me semble avoir exprimé ma fonction à optimiser (coût), lorsque j'écris :
cout_tot= somme(cout[k]) pour k appartenant à [0,23]
for k in range(24):
if diff[k]<0:
cout[k]=-a[k]*(P[k]-diff[k])
else :
cout[k]= b[k]*diff[k]+(a[k]-b[k])*P[k]
C'est cette somme que je dois minimiser avec les cout[k] qui varient selon que l'excédentaire soit de la production ou de la consommation.
yg_be
Messages postés
22625
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
29 mars 2024
1 461
30 avril 2020 à 17:33
30 avril 2020 à 17:33
le problème de la fonction à optimiser, c'est qu'elle n'est pas linéaire.
yg_be
Messages postés
22625
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
29 mars 2024
1 461
>
yg_be
Messages postés
22625
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
29 mars 2024
30 avril 2020 à 17:51
30 avril 2020 à 17:51
quand tu auras exprimé ton problème comme une programmation linéaire, tu pourras utiliser, par exemple, scipy.optimize.linprog pour programmer ton algorithme d'optimisation.
Victor_20GC
Messages postés
7
Date d'inscription
jeudi 30 avril 2020
Statut
Membre
Dernière intervention
30 avril 2020
>
yg_be
Messages postés
22625
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
29 mars 2024
30 avril 2020 à 17:53
30 avril 2020 à 17:53
mais je répète ma question, n'est-ce pas déjà un problème linéaire ? puisque c'est la fonction coût est une somme de fonctions linéaires par rapport à la puissance de stockage, il me semble.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Victor_20GC
Messages postés
7
Date d'inscription
jeudi 30 avril 2020
Statut
Membre
Dernière intervention
30 avril 2020
30 avril 2020 à 17:35
30 avril 2020 à 17:35
Mais du coup, il est quand même possible de l'optimiser non ? Est je vois pas trop en quoi elle n'est pas linéaire puisque c'est une somme de sous fonctions linéaire non ? les cout[k] sont des fonctions linéaires par rapport à la puissance de stockage il me semble.
yg_be
Messages postés
22625
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
29 mars 2024
1 461
30 avril 2020 à 17:55
30 avril 2020 à 17:55
c'est le if qui fait que ce n'est pas une fonction linéaire.
yg_be
Messages postés
22625
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
29 mars 2024
1 461
>
yg_be
Messages postés
22625
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
29 mars 2024
30 avril 2020 à 18:22
30 avril 2020 à 18:22
par ailleurs, je pense que ton calcul des coûts n'est pas correct.
ton choix des noms diff, a, b et P n'aident pas à s'y retrouver.
ton choix des noms diff, a, b et P n'aident pas à s'y retrouver.
30 avril 2020 à 14:32
Alors malheureusement je n'ai jamais fait d'optimisation algorithmique, seulement mathématiques et encore c'était des cas assez simples avec des fonctions convexes (méthodes de la descente du gradient principalement), et je n'ai pas réussi à appliquer le peu que je savais à mon problème.
Quand je dis que les contraintes dépendent du temps, je veux dire que la puissance de déstockage peut être limité par le stock à l'heure k-1.
Dans les quelques exemples assez simples d'optimisation linéaire que j'ai vu, les contraintes étaient fixes, moi mes Pdst[k] n'ont pas les mêmes contraintes car le stock évolue. Est-ce que c'est plus clair comme ça ?
J'ai regardé les modules osqp (methode prédictive mais je ne pense pas que je puisse l'appliquer dans mon cas), cvxopt, cvxpy... aucun ne semble correspondre à mon problème, du moins je n'arrive pas à faire le lien. Peut être avez vous une idée de module qui pourrait m'aider ? Peut ête dois-je faire du machine learning mais je ne m'y connais pas du tout.
Merci de votre aide
30 avril 2020 à 15:05
Je ne vois aucune description complète et concise de ce que tu connais, des données de départ.
Tu écris des formules en mélangeant les représentations, en mélangeant les données de départ et ce que tu recherches, et en introduisant un nombre important de variables inutiles.
Je ne vois aucune tentative de représenter le problème sous forme d'un programme linéaire, ni sous une autre forme aidant à la compréhension ou à la résolution.