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

  1. #1
    Responsable Qt & Livres


    Avatar de dourouc05
    Homme Profil pro
    Ingénieur de recherche
    Inscrit en
    août 2008
    Messages
    24 140
    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 : 24 140
    Points : 157 849
    Points
    157 849

    Par défaut JuMP.jl : la longue voie vers Julia 1.0

    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 indique,r 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 ou PyQt (tutoriels, FAQ, traductions), 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
    24 140
    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 : 24 140
    Points : 157 849
    Points
    157 849

    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 ou PyQt (tutoriels, FAQ, traductions), 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. Requete de excel vers Access très longue
    Par jojo86 dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 17/10/2017, 10h33
  2. procédure trop longue - bookmarks vers word
    Par momoram dans le forum VBA Access
    Réponses: 4
    Dernier message: 15/12/2013, 16h25
  3. transmission de longue chaine vers une page HTML
    Par sneb5757 dans le forum Applets
    Réponses: 1
    Dernier message: 27/08/2007, 14h29
  4. Réponses: 4
    Dernier message: 03/01/2007, 22h25
  5. Réponses: 1
    Dernier message: 13/05/2002, 10h19

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