IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Julia Discussion :

JuMP.jl : la longue voie vers la 1.0 pour la couche de modélisation mathématique


Sujet :

Julia

  1. #1
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 609
    Points : 188 584
    Points
    188 584
    Par défaut JuMP.jl : la longue voie vers la 1.0 pour la couche de modélisation mathématique
    Avec la sortie de Julia 1.0, c’est tout un écosystème qui doit se mettre à jour — notamment JuMP, un langage dédié (DSL) à l’optimisation mathématique totalement intégré à Julia. Il permet de transformer un modèle mathématique en un code extrêmement compact et proche des notations mathématiques (d’une manière similaire à AMPL, par exemple), tout en profitant de l’intégration à Julia et d’une excellente performance (contrairement à Pyomo, en Python).

    Le projet a débuté au MIT, tout comme le langage Julia, en tant que collaboration entre la Sloan School of Management et le Operations Research Center. Il n’était qu’une petite expérience pour voir les améliorations possibles dans le domaine des langages dédiés à l’optimisation mathématique, mais a fini par grandir au point de générer un écosystème à part entière (JuliaOpt), avec le développement d’autres paquets pour faciliter la modélisation, ainsi que de solveurs complets. Désormais, JuMP est utilisé de manière industrielle, par exemple pour organiser le ramassage scolaire à Boston (États-Unis), les horaires en entreprise ou encore les trains au Canada ; il a aussi gagné bon nombre de cours dans le domaine. Un signe de son utilité à la communauté, la fondation NumFOCUS (qui se concentre sur le calcul numérique au sens large) servira de sponsor fiscal à JuMP et à JuliaOpt : cette fondation (reconnue 501(c)3 aux États-Unis, c’est-à-dire sans but lucratif) gérera la réception des dons et l’émission des reçus, par exemple.

    En peu de mots : la version 0.18 (l’actuelle) ne fonctionne qu’avec Julia 0.6, mais sera encore maintenue un certain temps ; la version 0.19 (la suivante) inclut des modifications très profondes dans la structure de JuMP et ne sera pas prête de suite. Cette dernière sera compatible tant avec Julia 0.6 que 0.7, afin de faciliter la migration du code. La version 0.18 devrait être rendue compatible avec Julia 0.7, mais les développeurs de JuMP n’estiment pas cet effort et n’envisagent pas d’y investir beaucoup de temps.

    Les changements prévus consistent en un changement complet de la couche de communication avec les solveurs d’optimisation mathématique (comme CPLEX, Gurobi ou Mosek). Ainsi, MathProgBase (MPB) cédera la place à MathOptInterface (MOI). Les contraintes y sont spécifiées de manière beaucoup plus générique : la valeur d’une certaine fonction doit appartenir à un certain ensemble (quand MathProgBase utilisait des objets spécifiques pour chaque type de contrainte, sans réelle possibilité d’extensibilité : les contraintes linéaires, quadratiques, etc.). Le système de récupération du statut du solveur à la fin de son exécution a complètement changé, afin de représenter les possibilités aussi finement que possible (pour indiquer, par exemple, la raison pour laquelle le solveur s’est arrêté avant d’obtenir une solution optimale : a-t-il atteint la limite de temps ?). Tous les paramètres sont aussi passés sous la forme d’attributs, ce qui facilite l’ajout de nouveaux paramètres pour les solveurs sans toucher au code existant. Une fonctionnalité était attendue depuis longtemps : la modification de contraintes.

    En pratique, cela veut dire que toutes les extensions de JuMP devront être complètement réécrites (et repensées). Pour l’utilisateur, cependant, les changements seront plus limités : la récupération du code de statut, l’accès aux valeurs duales, les fonctions de rappel (qui ne seront plus du tout implémentées par JuMP, de par la disparité entre les types de fonctions implémentées par chaque solveur — ce point sera le plus problématique). Cependant, les changements ne seront pas finis : les modèles purement non linéaires (c’est-à-dire sans structure supplémentaire, pour lesquels JuMP doit calculer par exemple des gradients à partir du code fourni par l’utilisateur) sont presque entièrement repris de MathProgBase.

    Sources : JuMP and Julia 0.7/1.0, MathOptInterface and upcoming breaking changes in JuMP 0.19, Optimization modeling language JuMP joins NumFOCUS Sponsored Projects.
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  2. #2
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 609
    Points : 188 584
    Points
    188 584
    Par défaut Sortie de JuMP 0.19, la couche de modélisation mathématique pour Julia
    Julia a une longue histoire avec les applications scientifiques, y compris l’optimisation mathématique. En effet, une couche de modélisation existe depuis des années — JuMP (Julia Mathematical Optimisation). Ce projet est d’ailleurs l’un des plus utilisés dans l’écosystème Julia, JuMP étant actuellement le neuvième paquet ayant le plus d’étoiles sur GitHub.

    La version 0.19 de JuMP vient de sortir. Elle marque un nouveau tournant dans l’histoire du projet, puisque presque tout le code a été réécrit — même si peu de choses sont visibles du côté utilisateur. Cette version est en cours de développement depuis plus d’un an. Le principal changement concerne la couche de communication entre JuMP et les solveurs d’optimisation : MathProgBase est remplacé par MathOptInterface. Cette nouvelle interface corrige bon nombre de défauts de conception mis au jour au fil du temps et permet, notamment, de supprimer des variables et des contraintes (chose impossible avec MathProgBase), entre autres. Cela signifie que le lien avec les solveurs doit être réécrit, ce qui n’a pas encore été fait pour tous les solveurs.

    Le principal changement de syntaxe par rapport aux versions précédentes se montre ici : au lieu de créer un modèle d’optimisation avec Gurobi (par exemple) comme solveur, avec une ligne comme Model(solver=GurobiSolver()), il faudra préférer Model(with_optimizer(Gurobi.Optimizer)). Les codes de retour des solveurs ont aussi changé, pour mieux rendre compte de la diversité des informations disponibles.

    Ce changement d’interface sert notamment à mieux gérer différents types de contraintes, coniques notamment. JuMP peut maintenant gérer n’importe quel type de contrainte sans besoin d’une syntaxe spécifique : de manière générale, une contrainte indique qu’une certaine expression doit prendre une valeur dans un certain ensemble. Cela signifie notamment la fin de certains raccourcis dans l’écriture : norm() n’est plus disponible, il faudra maintenant utiliser directement un cône de Lorentz avec SecondOrderCone. De manière générale, JuMP effectue aussi peu de conversions que possible, de telle sorte que le modèle entré par l’utilisateur soit exposé assez directement au solveur.

    Bon nombre de nouvelles fonctionnalités font aussi leur apparition, principalement grâce à cette nouvelle interface : la suppression de contraintes et de variables, les modèles coniques mélangeant différents types de cônes (y compris puissance et exponentielle), la possibilité de donner des valeurs duales initiales, l’accès grandement étendu aux attributs offerts par le solveur (sans devoir utiliser l’API de bas niveau).

    Les types des conteneurs ont été entièrement repensés, en favorisant la performance ou la possibilité de l’améliorer dans les versions à venir. La source principale d’inspiration a été AxisArrays. JuMP définit maintenant les types SparseAxisArray et DenseAxisArray, selon le type d’indexation possible (ces types correspondent respectivement à JuMPDict et à JuMPArray).

    Cette version 0.19 n’est certes pas loin d’une première version finale pour JuMP, mais n’est pas non plus finie. Il manque une série de fonctionnalités, plus ou moins importantes selon les utilisateurs (et qui étaient disponibles auparavant), comme la génération de colonnes, l’accès direct au relâchement continu ou aux fonctions de rappel des solveurs (un mécanisme qui n’est plus générique, mais bien spécifique à chaque solveur) ou encore la réoptimisation rapide de programmes non linéaires. La performance lors de la génération des modèles peut être en deçà des possibilités des versions précédentes de JuMP, mais les développeurs sont au courant.

    Source : les notes de version.
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

  3. #3
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    Août 2008
    Messages
    26 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur de recherche
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 26 609
    Points : 188 584
    Points
    188 584
    Par défaut Sortie de JuMP 0.20
    Sortie de JuMP 0.20,
    la couche de modélisation mathématique pour Julia s'approche d'une implémentation générique des fonctions de rappe

    Julia est un langage de programmation orienté performance et calcul scientifique, mais ce faisant il a créé un environnement très productif pour la création de langages spécifiques (DSL) : Julia s'est ainsi créé une niche en optimisation mathématique, JuMP étant une couche de modélisation intégrée au langage de programmation (comme Pyomo en Python), mais avec une performance digne des meilleurs outils (comme AMPL).

    La version 0.20 de JuMP vient de sortir, avec une série d'améliorations mineures, comme des corrections de défauts (tous assez mineurs), une documentation améliorée et des messages d'erreur plus précis.

    En sus, JuMP dispose de fonctions pour créer un rapport de sensibilité du programme linéaire résolu (en exploitant la solution duale) : lp_objective_perturbation_range permet de récupérer la plage de variation des coefficients de l'objectif telle que la base courante reste optimale, lp_rhs_perturbation_range fait de même pour les membres de droite des contraintes. Ces fonctions ont des limites théoriques : si la base est dégénérée (plusieurs bases pour représenter la même solution), les intervalles indiqués seront bien plus petits qu'attendus. Voir la documentation.

    D'autres fonctions font leur apparition, d'utilité plus spécifique. dual_objective_value permet de récupérer la valeur duale de l'objectif (souvent égale à la valeur primale, mais pas toujours, notamment quand l'optimalité n'est pas atteinte). raw_status renvoie le code de retour du solveur directement, sans traduction de la part de JuMP. set_parameter permet de changer les paramètres du solveur. set_objective_coefficient autorise les changements de coefficients de variables dans l'objectif, lors de la résolution d'une séquence de problèmes, avec un impact sur la performance moindre qu'un changement complet de fonction objectif. set_normalized_rhs, normalized_rhs et add_to_function_constant s'occupent de la partie constante des contraintes.

    JuMP 0.20 s'appuie également sur la couche d'abstraction des solveurs MathOptInterface 0.9, qui apporte son lot de nouveautés, certaines étant nécessaires aux apports de JuMP 0.20 (comme l'attribut DualObjectiveValue). Les plus anciennes versions de Julia ne sont plus gérées, MOI ne fonctionne qu'avec Julia 1.0 au minimum. La fonction submit a fait son apparition pour soumettre des attributs au solveur, comme des solutions heuristiques ou des contraintes retardées, des notions très utiles pour l'implémentation d'algorithmes d'optimisation avancés et très efficaces (mais pas encore entièrement disponibles dans MOI). La fonction dual_set renvoie l'ensemble dual associé à un domaine, ce qui sert à dualiser efficacement des problèmes d'optimisation (notamment avec Dualization). En outre, l'infrastructure de test a été enrichie pour les dernières nouveautés, elle comporte aussi un module de test de performance des solveurs.

    Sources : notes de version de JuMP et MOI.
    Vous souhaitez participer aux rubriques Qt (tutoriels, FAQ, traductions) ou HPC ? Contactez-moi par MP.

    Créer des applications graphiques en Python avec PyQt5
    Créer des applications avec Qt 5.

    Pas de question d'ordre technique par MP !

Discussions similaires

  1. procédure trop longue - bookmarks vers word
    Par momoram dans le forum VBA Access
    Réponses: 4
    Dernier message: 15/12/2013, 16h25
  2. Réponses: 2
    Dernier message: 24/06/2009, 17h34
  3. Réponses: 3
    Dernier message: 20/10/2008, 20h52
  4. Réponses: 12
    Dernier message: 24/10/2007, 13h00
  5. transmission de longue chaine vers une page HTML
    Par sneb5757 dans le forum Applets
    Réponses: 1
    Dernier message: 27/08/2007, 14h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo