J'utilise GEKKO pour étudier l'effet du MPC et du MHE sur la consommation d'énergie des bâtiments. Pour obtenir une augmentation des performances, je suis passé à un serveur de résolution dédié en configurant m.GEKKO(remote=True, server='http://10.0.0.10')
. Ce serveur est une machine Ubuntu 20.04.1 fraîchement installée qui héberge uniquement le serveur linux APmonitor. Tout fonctionne bien jusqu'à présent, sauf que mes temps de cycle de contrôle et d'estimation augmentent linéairement avec chaque résolution supplémentaire pour l'option de résolution à distance. J'utilise mon modèle de construction avec IMODE=6
pour les PPM et IMODE=5
pour MHE et les deux montrent le même comportement.
La figure suivante montre les temps de cycle et les temps de résolution pour la résolution locale et la résolution à distance. Ces tests ont été effectués avec le solveur IPOPT MA57, mais d'autres montrent le même comportement. Mon programme ne change pas, sauf pour passer de remote=False
sur mon serveur de résolution remote=True, server='http://10.0.0.10'
.
En outre, j'ai ajouté la sortie du diagnostic temporel du solveur après quelques étapes (à gauche) et après quelques centaines d'étapes (à droite). Elle montre clairement un temps système beaucoup plus élevé mais un temps de résolution très similaire, mais je n'ai pas pu trouver le coupable ici non plus. À l'exception de ce test, j'ai toujours défini DIAGLEVEL=0
y m.solve(disp=False)
pour réduire la sortie de la console.
Cependant, la réinitialisation du modèle GEKKO et le redémarrage immédiat font chuter les temps de cycle. Cela montre qu'il ne s'agit pas d'un problème de réduction de la capacité de calcul du serveur au fil du temps. Pour moi, il semble qu'un fichier que le processus lit et/ou écrit gonfle avec le nombre d'itérations, mais je n'ai rien trouvé d'important dans le répertoire du modèle actuel. Peut-être que quelqu'un connaît le problème et peut m'aider.
Editer 1 :
En essayant l'exemple script fourni par John Hedengren dans sa réponse, j'ai obtenu un résultat différent. L'image suivante montre à nouveau le même comportement d'augmentation linéaire. J'ai effectué ce test avec une machine physique différente, en utilisant également un adaptateur réseau physique différent au niveau du serveur de résolution. Auparavant, j'avais même changé la machine physique du serveur de résolution. Testé avec les versions 2.7.16, 3.7.7 et 3.8.5 de Python.
Pour moi, cela conduit à la conclusion que cette situation n'est pas due à mon application MPC. Elle ne semble pas non plus liée à un problème matériel au niveau du client, du réseau ou du serveur. J'ai l'impression qu'il s'agit d'un problème logiciel au niveau du serveur.
Quelques spécifications ici :
- Ubuntu 20.04.1
- Apache 2.4.41
- PHP 7.4.3
- APMonitor, version 0.9.2
Editer 2 :
Après avoir utilisé l'exemple de problème de John Hedengrens pour tester plusieurs serveurs de résolution, j'en suis venu à la conclusion que le comportement des temps de cycle croissants n'est pas propre à ma configuration Ubuntu linux. Voici quelques exemples :
-
Serveur APMonitor personnalisé sur CentOS7 avec MA97Solver (LAN)
-
Serveur officiel de résolution d'APMonitor (Web)
Pour que cela soit plus évident, j'ai supprimé les oulierers dans la suite de l'article. image
Dans mon cas, une augmentation du temps de cycle d'environ 1 seconde pour 1000 cycles (pour cet exemple de problème) se produit indépendamment du solveur à distance utilisé (la résolution locale est toujours correcte). L'effet de cette augmentation régulière du temps de cycle n'est pas aussi important si les temps de résolution/cycle sont de toute façon plus longs ou si le nombre de cycles n'est pas assez élevé. Pour mon application, c'est cependant très problématique car je dois exécuter environ 40k cycles aussi vite que possible.
Editer 3 :
Mise en œuvre des modifications apportées à la gekko.py
y apm_line.php
John Hedengren a suggéré dans sa réponse de résoudre le problème en partie, mais pas entièrement. Il y a toujours une augmentation du temps de cycle. Une fois de plus, un examen plus approfondi et plus long révèle le problème. L'image suivante montre la sortie du test habituel script, cette fois pour les versions mises à jour de gekko.py
y apm_line.php
un serveur APM linux (Windows a le même comportement) et les étapes 5k. En regardant de très près, vous pouvez même voir cet effet dans le diagramme (1k runs) que John a posté dans son édition de réponse.