Skip to content

distribution

paplessix edited this page Jun 27, 2020 · 2 revisions

How to use bundle.py

  • changer OUTPUT PATH pour mettre lien vers son fichier de données, sachant que les identificateurs valables sont PA , YOU et SEB. Il faut juste changer les 3 dernières lettres du nom du fichier.
  • changer INDEX avec le même identificateur
  • vérifier que SIZE = 100
  • vérifier que V_INIT = 40
  • Ajuster N_EXECUTIONS suivant le temps que l'on a devant soi.
  • lancer python strat_gaz/storage_optimisation/bundle.py

Présentation de la procédure de distribution des calculs

Pourquoi un tel script ?

Lorsque nous en sommes arrivés à la question de traiter massivement nos données, nous nous sommes heurté à la relativement longue durée de l'optimisation. Nous estimions à une centaine de secondes pour une optimisation, ce qui aurait pour effet de demander plusieurs heures de calculs pour exécuter un millier d'optimisations. Nous avons donc du distribuer le calcul entre nos machines. Cependant les temps d’exécution était encore assez long, et nous pouvions pouvoir modifier le nombre d’exécutions pour pouvoir les calculs en fonction du temps dont nous disposions au moment où nous lancions notre ordinateur pour faire une autre tâche parallèle.

Par ailleurs nous devions fournir une sortie lisible par les algorithmes de la Web_app, nous devions séparer d'un coté les profits des différents scénarios qui serviront à tracer un histogramme, d'un autre coté nous devions enregistrer les stratégies pour pouvoir à chaque sélection d'un scénario afficher la meilleure optimisation.

Nous avons donc décidé de mettre en place un script bundle.py, qui initialise la base de donnée, optimise sur un nombre donné de scénarios, puis rend la main. Cet algorithme devait avoir la capacité de reprendre le travail où il avait été laissé lorsque un nouveau batch d'optimisation était lancé.

Aspects Techniques

Le script est encapsulé dans une classe Simulation, qui contient une méthode qui charge les données au format csv data_loader_csv, une méthode qui initialise la database de sortie si elle n'existe pas encore, une méthode Simulation.execute qui contrôle les batchs d'optimisation et qui envoie les résultats vers la sortie en utilisant les méthodes Simulation_add_line_csv. Dans ce processus on appelle aussi une autre méthode Simulation.optimize, qui assure l'optimisation et calcule les profits réalisés.

Avant de lancer l'optimisation ils faut fixer certains paramètres :

  • INDEX : le trigrame de l'utilisateur dans le cadre d'un calcul distribué
  • SIZE: la taille du stockage
  • V_INIT : le volume initial
  • STOCKAGE: Le type de stockage à considérer
  • INPUT_PATH : le chemin vers les scénarios de prix
  • OUTPUT_PATH : le dossier dans lequel enregistrer les données
  • N_EXECUTIONS : the number of optimizations in the batch

Cette implémentation à la main est très artisanale. Si l'on devenait démultiplier les machines et le nombre de données, il serait intéressant de mettre en place un orchestrateur qui réparti le calcul entre les données.