FR 3145999 A1 20240823 FR 2301503 A 20230217 Un procédé de programmation de tâches à exécuter par plusieurs unités de traitement. Chaque unité de traitement comprend des unités fonctionnelles, chaque unité fonctionnelle est adaptée à exécuter un type de fonctions de traitement. Le procédé comprend une obtention (310) de tâches et pour chaque tâche d’une estimation d’un temps d’exécution restant et d’au moins un type de fonction de traitement adapté pour l’exécution de cette tâche; une obtention (300) d’une information de disponibilité par unité fonctionnelle pour l’exécution de tâches ; une détermination (320), pour au moins une unité de traitement, d’une liste ordonnée de tâches à exécuter par des unités fonctionnelles de l’unité de traitement, le calcul étant effectué de sorte à optimiser des critères sur l’ensemble des tâches et en prenant en compte les types de fonctions de traitements adaptées pour l’exécution des tâches et les informations de disponibilité par unité fonctionnelle. Figure à publier avec l’abrégé : Fig. 3 dispositif et procédé de programmation pour l’exécution de tâches La présente invention concerne une méthode et un dispositif de programmation de tâches à exécuter par des unités de traitement. Etat de la technique Dans un contexte industriel, l’automatisation de tâches exécutées par tout type de ressources physiques renouvelables (par exemple, des robots, imprimantes 3D, systèmes de cloud computing, serveurs informatiques, ressources logicielles exécutées par des composants matériels, machines présentant des fonctions d’automatisation, etc) de différentes natures est un problème complexe, notamment quand les ressources sont adaptées pour exécuter différents types de fonctions, qui peuvent être ou non adaptés à l’exécution de certaines tâches. L’affectation de tâches aux ressources et l’ordonnancement des tâches doit en effet pouvoir être fait en prenant en compte les types de fonctions disponibles dans les différentes ressources et de sorte à optimiser l’allocation des tâches aux ressources, selon un ou plusieurs critères d’optimisation, usuellement en rapport avec le temps d’exécution des tâches. En outre, l’affectation de tâches aux ressources doit pouvoir être modifié dynamiquement lorsque de nouvelles tâches sont à exécuter. Résumé Selon un premier aspect, la présente description concerne un procédé de programmation de tâches à exécuter par plusieurs unités de traitement d’un système d’exécution de tâches, chaque unité de traitement comprenant une ou plusieurs unités fonctionnelles, chaque unité fonctionnelle étant adaptée à exécuter un ou plusieurs types de fonctions de traitement, le procédé étant mis en œuvre par ordinateur, le procédé comprenant : - une obtention, via une interface de communication avec un système source, d’un ensemble de tâches à exécuter et pour chaque tâche d’une estimation d’un temps d’exécution restant pour l’exécution de cette tâche et d’au moins un type de fonction de traitement adapté pour l’exécution de cette tâche; - une obtention, via une interface de communication d’un système de contrôle d’exécution de tâches, d’une information de disponibilité par unité fonctionnelle pour l’exécution de tâches ; - une détermination, pour au moins une unité de traitement, d’une liste ordonnée de tâches à exécuter par une ou des unités fonctionnelles de l’unité de traitement concernée, le calcul étant effectué de sorte à optimiser des critères sur l’ensemble des tâches et en prenant en compte les types de fonctions de traitements adaptées pour l’exécution des tâches et les informations de disponibilité par unité fonctionnelle ; - une transmission, via l’interface de communication du système de contrôle d’exécution de tâche, d’au moins une liste ordonnée de tâches à exécuter par une unité de traitement concernée ; - une réception, via l’interface de communication d’un système de feedback, d’un feedback sur l’exécution de tâches, le feedback sur l’exécution d’une tâche comprenant un temps d’exécution effectif passé pour l’exécution de la tâche concernée et/ou un taux d’accomplissement de la tâche ; - une mise à jour, pour au moins une tâche, de l’estimation du temps d’exécution restant pour l’exécution de la tâche concernée sur la base du feedback pour la tâche concernée ; - une mise à jour, pour au moins une unité de traitement, de la liste ordonnée de tâches à exécuter par l’unité de traitement concernée sur la base de l’estimation du temps d’exécution restant mis à jour, le calcul étant effectué de sorte à optimiser les critères sur l’ensemble des tâches restant à exécuter; - une transmission, via l’interface de communication du système de contrôle d’exécution de tâche, d’au moins une liste ordonnée mise à jour de tâches à exécuter par l’unité de traitement concernée. Dans un ou plusieurs modes de réalisation, le procédé comprend pour chaque type de fonction parmi des types de fonction à évaluer: une simulation de l’ajout dans une unité de traitement d’une unité fonctionnelle exécutant le type de fonction considéré par modification des informations de disponibilités pour le type de fonction considéré ; une allocation des tâches d’un ensemble de tâches à une ou plusieurs unités de traitement et un calcul d’une liste ordonnée de tâches à exécuter par les unités fonctionnelles de chaque unité de traitement concernée, le calcul étant effectué de sorte à optimiser les critères sur l’ensemble des tâches à exécuter et en prenant en compte les informations de disponibilités modifiées ; une mémorisation d’une valeur de fonction objectif sur l’ensemble des tâches sur la base des critères associé au type de fonction considéré ; et une identification, parmi les types de fonction à évaluer, d’un type de fonction à ajouter sur la base des valeurs de la fonction objectif obtenues pour les types de fonction à évaluer, le type de fonction à ajouter étant celui qui a l’impact le plus important sur la valeur de la fonction objectif. Dans un ou plusieurs modes de réalisation, le procédé comprend pour chaque type de fonction parmi des types de fonction à évaluer: une simulation de la suppression dans une unité de traitement d’une unité fonctionnelle exécutant le type de fonction considéré par modification des informations de disponibilités pour le type de fonction considéré; une allocation des tâches d’un ensemble de tâches à une ou plusieurs unités de traitement et un calcul d’une liste ordonnée de tâches à exécuter par les unités fonctionnelles de chaque unité de traitement concernée, le calcul étant effectué de sorte à optimiser les critères sur l’ensemble des tâches à exécuter et en prenant en compte les informations de disponibilités modifiées ; une mémorisation d’une valeur de fonction objectif sur l’ensemble des tâches sur la base des critères associé au type de fonction considéré ; et une identification, parmi les types de fonction à évaluer, d’un type de fonction à supprimer sur la base des valeurs de la fonction objectif obtenues pour les types de fonction à évaluer, le type de fonction à supprimer étant celui qui a l’impact le moins important sur la valeur de la fonction objectif. Dans un ou plusieurs modes de réalisation du procédé, les critères comprenant un premier critère de minimisation d’un écart de temps total, l’écart de temps total étant calculé sur la base d’une somme pondérée par un niveau de priorité des écarts calculés respectivement pour des groupes de tâches, l’écart pour un groupe de tâches étant calculé comme différence entre une date cible pour l’achèvement de l’exécution du groupe de tâches et la date effective d’achèvement de l’exécution du groupe de tâches. Dans un ou plusieurs modes de réalisation du procédé, les critères comprenant au moins critère parmi : un deuxième critère de minimisation du temps d’inactivité des unités de traitement et/ou des unités fonctionnelles ; un troisième critère de maximisation de vitesse d’augmentation de valeur lors de l’exécution de tâches sur la base d’un niveau de valeurs associées aux tâches ; un quatrième critère de minimisation d’un coût d’exécution des tâches sur la base de coûts associés aux unités de traitement utilisées pour l’exécution de tâches; et un cinquième critère de minimisation d’un délai d’exécution des tâches sur la base de délais associés aux unités de traitement. Dans un ou plusieurs modes de réalisation du procédé, dans lequel les informations de disponibilités d’au moins une unité fonctionnelle sont obtenues pour différents niveaux de capacité de traitement de l’unité fonctionnelle concernée, ces différents niveaux de capacité de traitement prenant en compte une fonction principale de l’unité fonctionnelle et au moins une fonction secondaire de l’unité fonctionnelle, la détermination ou mise à jour d’une liste ordonnée de tâche pour l’unité de traitement comprenant l’unité fonctionnelle concernée étant effectuée pour l’un des niveaux de capacité de traitement. Selon un deuxième aspect, la présente description concerne un dispositif de programmation comprenant des moyens de mise en œuvre des étapes d’un procédé selon le premier aspect. Selon un troisième aspect, la présente description concerne un programme d'ordinateur comportant des instructions de programme pour l'exécution des étapes d’un procédé selon le premier aspect. Selon un quatrième aspect, la présente description concerne un support d'enregistrement lisible par un ordinateur sur lequel est enregistré un programme d'ordinateur comprenant des instructions de programme pour l'exécution des étapes d’un procédé selon le premier aspect. Présentation des figures D’autres avantages et exemples de réalisations sont décrits ci-après par référence aux figures dans lesquelles : représente de manière schématique un exemple de système informatique pour la mise en œuvre d’un procédé de programmation selon un exemple de réalisation. est un modèle de données utilisable pour une procédé de programmation selon un exemple de réalisation. est un organigramme d’un procédé de programmation selon un exemple de réalisation. est un organigramme d’un algorithme génétique selon un exemple de réalisation. est un organigramme d’un procédé de génération de listes ordonnées de tâches selon un exemple de réalisation. est un organigramme d’un procédé de simulation de suppression ou ajout de ressources selon un exemple de réalisation. représente de manière schématique un exemple de dispositif informatique pour la mise en œuvre d’un procédé de programmation selon un exemple de réalisation. Description détaillée La représente de manière schématique un exemple de système 100 pour la mise en œuvre d’un procédé de programmation selon un exemple de réalisation. Ce système 100 comprend un dispositif 110 de programmation configuré pour communiquer via une ou plusieurs liaisons de transmission de données (via un réseau de télécommunication, par exemple un réseau local ou un réseau étendu ou tout type de réseau) avec un système 120 d’exécution de tâches. Les tâches sont exécutées par des ressources physiques décomposées fonctionnellement en une ou plusieurs unités de traitement UT1, UT2. Chaque unité de traitement comprend une ou plusieurs unités fonctionnelles, chaque unité fonctionnelle étant adaptée à exécuter un ou plusieurs types de fonctions. Dans l’exemple de la , l’unité de traitement UT1 comprend trois unités fonctionnelles UF11, UF12, UF13 et l’unité de traitement UT2 comprend deux unités fonctionnelles UF21, UF22. Dans le contexte du procédé de programmation du temps de traitement des tâches, la nature des ressources physiques (unités de traitement et unités fonctionnelles) importe peu, le procédé de programmation étant générique, de sorte qu’il est applicable indépendamment de la nature de ces ressources physiques et indépendamment des différentes fonctions considérées pour ces ressources physiques. Ainsi la solution peut s’appliquer à d’autres types de ressources que celles mentionnées à titre d’exemple. Tout type de groupement de ressources associées à des fonctions pour définir une unité de traitement peut être envisagé, dès lors que l’unité de traitement est capable d’affecter les tâches à ses ressources. Le système 120 d’exécution de tâches peut être divisé fonctionnellement en trois systèmes ou sous-systèmes : un système 121 source, un système 122 de contrôle d’exécution et un système 123 de feedback. Le système 121 source est configuré pour générer des paramètres de tâches pour de nouvelles tâches à exécuter. Le système 122 de contrôle d’exécution est configuré pour recevoir des listes ordonnées de tâches du dispositif 110 de programmation et déclencher l’exécution, par une ou plusieurs unités de traitement, de ces tâches sur la base des listes ordonnées de tâches. Le déclenchement de l’exécution d’une tâche ou liste de tâches peut comprendre l’envoi d’au moins un signal (signal de commande, message, requête, etc) à destination de l’unité de traitement à laquelle la liste de tâches est affectée. Le signal est adapté à l’unité de traitement destinataire et peut comprendre des informations et/ou paramètres sur la ou les tâches à exécuter. Le signal peut être codé conformément à tout type de protocole de communication, propriétaire ou standard. Le système 123 de feedback est configuré pour obtenir des informations de feedback sur les tâches exécutées par les unités de traitement. Selon la nature ou la conception des unités de traitement, les informations de feedback peuvent être fournies par les unités de traitement elles-mêmes ou être générées (par mesure, analyse, détection d’événement, etc) par le système 123 de feedback ou un autre système de supervision spécifique à une ou plusieurs unités de traitement. Le système 120 d’exécution de tâches peut être réalisé par une seule entité physique (système informatique) ou par plusieurs entités physiquement distinctes et interconnectées entre elles. Le dispositif 110 de programmation peut être mis en œuvre par une entité physique (système informatique) distincte du système 120 d’exécution de tâches ou être intégré dans le système 120 d’exécution de tâches. Chaque système informatique présente globalement l'architecture d'un ordinateur, incluant des constituants d'une telle architecture : mémoire(s) de données, processeur(s), bus de communication, interface(s) utilisateur, interface(s) matérielle(s) pour la connexion de ce système informatique à un réseau ou un autre équipement, etc. Selon un mode de réalisation, le dispositif 110 de programmation est configuré pour communiquer avec le système 121 source, le système 122 de contrôle d’exécution et le système 123 de feedback respectivement via une interface de communication du système cible concerné de manière à pouvoir échanger des données avec chacun de ces systèmes. Cette interface de communication peut être par exemple une interface de programmation (par exemple API, Application Program Interface) ou une autre interface adaptée pour l’échange de données. Le dispositif 110 de programmation présente globalement l'architecture d'un ordinateur, incluant des constituants d'une telle architecture : mémoire(s) de données, processeur(s), bus de communication, interface(s) utilisateur, interface(s) matérielle(s) pour la connexion de ce dispositif informatique à un réseau ou un autre équipement, etc. Le système 100 peut comprendre en outre une base de données 115 pour le stockage de paramètres de tâches, d’informations de disponibilité et de listes ordonnées de tâches. Selon un mode de réalisation, le dispositif 110 de programmation reçoit en temps réel des paramètres de tâches pour de nouvelles tâches à exécuter, directement du système source 121 ou via la base de données 115. Ainsi le système source 121 et/ou la base de données 115 peuvent servir de dispositif source pour les paramètres de tâches. Le dispositif 110 de programmation comprend des moyens de mise en œuvre d’un procédé de programmation selon la présente description. Le dispositif 110 de programmation comprend par exemple des moyens d’obtention de paramètres de tâches générés par le système 121 source, des moyens de transmission au système 122 de contrôle d’exécution de listes ordonnées de tâches à exécuter et des moyens de réception du système 123 de feedback d’informations de feedback sur les tâches exécutées. Le dispositif 110 de programmation comprend des moyens d’analyse et traitement des paramètres de tâches et des moyens de génération de listes ordonnées de tâches sur la base des paramètres de tâches. La illustre un modèle de données utilisable pour le procédé de programmation selon un exemple de réalisation. Le procédé de programmation décrit ici est applicable à tout type de ressource et distingue différents types de ressources physiques en définissant différents types d’unités de traitement et différents types de fonction exécutables respectivement par les unités fonctionnelles d’une unité de traitement. Une unité de traitement peut être vue comme un groupe particulier de fonctions. A une unité de traitement UT i (i = 1 à NU, NU étant le nombre d’unité de traitement) est associé un type TU i d’unité de traitement parmi un ensemble de types d’unité de traitement. Le type d’unité de traitement sert à désigner le type de groupe de fonctions mises en œuvre par l’unité de traitement. L’ensemble de types d’unité de traitement peut être évolutif pour s’adapter à des nouvelles unités de traitement ajoutées aux unités de traitement existantes ou à des modifications des unités de traitement existantes. A une unité fonctionnelle UF i,j (i = 1 à NT, j=1 à NF) est associé un type de fonction qui est susceptible d’être exécutée par l’unité fonctionnelle. Le type de fonction sert à déterminer si une tâche peut ou non être exécutée par cette unité fonctionnelle. L’ensemble de types d’unité de fonction peut être évolutif pour s’adapter aux évolutions fonctionnelles au cours du temps des unités de traitement ou prendre en compte de nouvelles fonctions présentes dans de nouvelles unités de traitement. Une unité de traitement est par exemple un matériel spécifique d’exécution de tâches, un circuit électronique, un logiciel, un ordinateur, un robot, un composant matériel et/ou logiciel d’une chaîne de production, une imprimante 3D, une fraiseuse 3D ou une machine d’usinage, un serveur informatique, etc. A chacune de ces unités de traitement est affecté un type d’unité de traitement, par exemple : « robot », « logiciel », « imprimante 3D », « circuit », etc. Les unités fonctionnelles faisant partie d’une unité de traitement de type « imprimante 3D » correspondent par exemple aux différents modes d’impression 3D disponibles dans cette imprimante 3D : par exemple : une impression 3D avec sélection d’un ou plusieurs matériaux à déposer, deux imprimantes pouvant avoir ou pas la même liste de matériaux. Selon un autre exemple, une fraiseuses 3D ou une machine d’usinage peut être dotée de têtes d’usinages avec des précisions distinctes permettant de générer différents états de surface et deux machines d’usinage peuvent avoir des précisions différentes, avec éventuellement un recouvrement entre les précisions disponibles dans les deux machines d’usinage. Dans un tel exemple, une unité fonctionnelle peut correspondre à mode de fraisage / usinage avec un grain / état de surface particulier ou une tête d’usinage particulière. Le procédé de programmation est appliqué à un ensemble de tâches E qui sont à affecter aux unités de traitement et à ordonner pour chaque unité de traitement. Pour chaque tâche T x (x = 1 à NT, NT étant le nombre de tâches de l’ensemble E) de l’ensemble des tâches des données, des paramètres 200 de tâches sont utilisés. Les paramètres 200 d’une tâche peuvent comprendre un temps d’exécution restant pour la tâche. Pour une nouvelle tâche à exécuter, le temps d’exécution restant peut être basé sur une estimation du temps nécessaire pour l’exécution de la tâche. Pour une tâche en cours d’exécution, le temps d’exécution restant peut être basé sur une estimation du temps restant pour l’exécution de la tâche, cette estimation étant générée par exemple sur la base d’un feedback reçu du système 123 de feedback pour cette tâche. Le feedback pour une tâche peut comprendre un temps d’exécution effectif passé pour l’exécution de la tâche concernée et/ou un taux d’accomplissement de la tâche. Les paramètres 200 d’une tâche peuvent comprendre un taux d’exécution pour la tâche. Ce taux d’exécution peut être codé comme un pourcentage ou une valeur entre 0 et 1. Pour une nouvelle tâche, le taux d’exécution peut être de 0 par défaut. Pour une tâche en cours d’exécution, le taux d’exécution peut être de 0,5 pour une tâche exécutée à moitié. Par exemple, pour une tâche d’impression 3D, le taux d’exécution à un instant donné peut correspondre au pourcentage de l’objet ayant été imprimé à cet instant. Pour une machine d’usinage, le taux d’exécution à un instant donné peut correspondre au taux de matière enlevé. Selon la nature de la tâche, la méthode de mesure ou de quantification du taux d’exécution peut être différente. Par exemple, une imprimante 3D dispose d’une information du volume total de matière à déposer et est adaptée pour calculer un taux d’accomplissement de l’impression sur la base du taux de matière consommé pour une tâche d’impression. Les paramètres 200 d’une tâche peuvent comprendre un type de fonction adapté pur l’exécution de la tâche. Le type de fonction peut être codé par un identifiant numérique ou alphanumérique ou mot clef. Les paramètres 200 d’une tâche peuvent comprendre les précédences, c’est-à-dire un ensemble de tâches (appelées ici prédécesseurs) qui doivent être réalisées avant que la tâche considérée ne puisse débuter, cet ensemble pouvant être vide. De manière pratique, une tâche ne peut être exécutée que si l’ensemble des tâches (prédécesseurs) dont elle dépend ont déjà été réalisées. Un arbre des dépendances ou hiérarchie entre les tâches peut être utilisé pour représenter ces liens de dépendances. Les paramètres 200 d’une tâche peuvent comprendre un niveau de priorité de la tâche. Ce niveau de priorité peut consister en un indicateur du caractère prioritaire ou non prioritaire de la tâche considérée. Le caractère prioritaire est pris en compte dans l’ordonnancement des tâches. Les paramètres 200 d’une tâche peuvent comprendre un niveau de valeur de la tâche et correspond à un niveau de valeur créé par l’exécution de la tâche. Ce niveau de valeur peut être utilisé pour le calcul d’un critère d’optimisation basé sur la création de valeur lors de l’exécution des tâches de sorte que la vitesse d’accroissement de valeur soit la plus grande possible. Des paramètres 210 sont également associés à chaque unité de traitement. Les paramètres 210 d’une unité de traitement peuvent comprendre un type d’unité de traitement. Le type d’unité de traitement peut ainsi servir à définir des catégories d’unité de traitement, sur la base d’un ensemble de fonctions disponibles pour cette unité de traitement. Le type d’unité de traitement peut être codé par un identifiant numérique ou alphanumérique ou mot clef. Les paramètres 210 d’une unité de traitement peuvent comprendre d’autres informations utilisables dans un ou plusieurs critères d’optimisation : un coût associé à l’unité de traitement et/ou une localisation de l’unité de traitement et/ou un délai (correspondant à un retard lors de l’exécution de tâche(s)) associé à l’utilisation de l’unité de traitement. Ces différents paramètres peuvent être pris en compte dans un ou plusieurs critères d’optimisation de sorte à pénaliser ou favoriser une unité de traitement par rapport à une ou plusieurs autres unités de traitement dotées d’unités fonctionnelles capables d’exécuter une même tâche. A une unité fonctionnelle est associée une information de disponibilité (appelée ici aussi capacité de traitement). Cette disponibilité peut s’exprimer soit par un temps de traitement disponible pour l’exécution de tâche par cette unité fonctionnelle, soit par un taux de disponibilité de l’unité fonctionnelle par rapport à une période de temps de référence (par exemple 1 heure par jour ou 20 heures par jour). Dans certains cas, différents types de fonctions peuvent être disponibles pour une unité fonctionnelle donnée : l’unité fonctionnelle a par exemple une ou plusieurs fonctions principales et une ou plusieurs fonctions secondaires et, éventuellement des fonctions annexes, utilisables en cas de besoin. Par exemple, une machine d’usinage de haute précision peut être utilisée aussi pour des travaux d’usinage dans une gamme de précisions plus faibles. Dans une telle situation, la disponibilité (i.e. capacité de traitement) de cette unité fonctionnelle peut prendre en compte ses fonctions principale(s), secondaire(s) et annexe(s). Soit Np (>=1) le nombre de fonctions principales et Ns (>=1) le nombre de fonctions secondaires d’une unité fonctionnelle. Soit T dispo sa disponibilité maximale, c’est-à-dire le temps de traitement maximal disponible par période de temps de référence pour cette unité fonctionnelle, indépendamment de ces fonctions principales ou secondaires. On peut définir pour cette unité fonctionnelle différents niveaux de capacité de traitement. Selon un exemple, à un premier niveau, correspondant à une capacité dite « nominale » de l’unité fonctionnelle : le taux de disponibilité pour l’exécution d’une fonction principale peut être fixé par rapport à sa disponibilité maximale T dispo à : T1= 2 / ( 2 x Np + Ns) le taux de disponibilité pour l’exécution d’une fonction secondaire peut être fixé par rapport à sa disponibilité maximale T dispo à : T2= 1 / ( 2 x Np + Ns) le taux de disponibilité pour l’exécution d’une fonction annexe peut être fixé par rapport à sa disponibilité maximale T dispo à T3 = 0 % De même, à un deuxième niveau, correspondant à une capacité dite « maximale » de l’unité fonctionnelle : le taux de disponibilité pour l’exécution d’une fonction principale peut être T1= 100% le taux de disponibilité pour l’exécution d’une fonction secondaire peut être T2= 100% le taux de disponibilité pour l’exécution d’une fonction annexe peut être T3 = 0 % De même, à un troisième niveau, correspondant à une capacité dite « étendue » de l’unité fonctionnelle : le taux de disponibilité pour l’exécution d’une fonction principale peut être T1= 100% le taux de disponibilité pour l’exécution d’une fonction secondaire peut être T2= 100% le taux de disponibilité pour l’exécution d’une fonction annexe peut être T3 = 100 % Pour un type de fonction donné, on peut déterminer une disponibilité par type de fonction correspondant à la somme des disponibilités des unités fonctionnelles ayant ce type de fonction. Cette somme peut inclure les taux de disponibilités pour des fonctions principales, secondaires ou annexes des unités fonctionnelles en ce qu’une fonction d’un type donné peut être une fonction principale pour une première unité fonctionnelle et une fonction secondaire ou annexe pour une deuxième unité fonctionnelle. De même pour une unité de traitement donnée, on peut déterminer une disponibilité correspondant à la somme des disponibilités des unités fonctionnelles de cette unité de traitement. Cette somme peut également inclure les taux de disponibilités pour des fonctions principales, secondaires ou annexes des unités fonctionnelles. De même pour un type d’unité de traitement donné, on peut déterminer une disponibilité correspondant à la somme des disponibilités des unités fonctionnelles des unités de traitement ayant ce type d’unité de traitement. Cette somme peut également inclure les taux de disponibilités pour des fonctions principales, secondaires ou annexes des unités fonctionnelles. Toutes les informations de disponibilité (par unité fonctionnelle, par unité de traitement, par type de fonction ou par type d’unité de traitement) peuvent être calculées pour une période de temps donnée selon que les ressources sont disponibles ou non (par exemple dans le cas d’une panne ou dysfonctionnement). La représente un organigramme d'un procédé de programmation selon un exemple de réalisation. Bien que les différentes étapes de l'organigramme soient présentées et décrites de façon séquentielle, certaines ou toutes les étapes peuvent être exécutées dans un ordre différent, peuvent être combinées ou omises, et certaines ou toutes les étapes peuvent être effectuées en parallèle. Les étapes de la méthode peuvent être mises en œuvre par ordinateur, par exemple par un dispositif 110 de programmation tel que décrit dans ce document, notamment par référence à la et/ou 7. Le procédé de programmation vise à optimiser l’ordonnancement des tâches et leur affectation aux unités de traitement du système d’exécution de tâches sur la base d’un ou plusieurs critères d’optimisation. Chaque unité de traitement comprend une ou plusieurs unités fonctionnelles, chaque unité fonctionnelle étant adaptée à exécuter un ou plusieurs types de fonctions de traitement. A l’étape 300, des informations de disponibilité sont obtenues pour les unités fonctionnelles, via une interface de communication d’un système 122 de contrôle d’exécution de tâches ou du système source 121. Les informations de disponibilité comprennent une capacité de traitement pour l’exécution de tâches par unité fonctionnelle. Cette capacité de traitement correspond à ce stade à une capacité maximale de traitement. Cette capacité de traitement peut s’exprimer sous forme d’un temps disponible ou une durée de disponibilité par période de temps de référence et/ou un taux de disponibilité par période de temps de référence. Par exemple, pour un robot ou une imprimante, on peut définir la capacité de traitement comme le temps disponible pour l’exécution de tâches par jour, par exemple 10h par jour. A l’étape 310, un ensemble de nouvelles tâches à exécuter est obtenu via une interface de communication d’un système source 121. Pour chaque tâche, une estimation d’un temps d’exécution restant pour l’exécution de cette tâche et au moins un type de fonction de traitement adapté pour l’exécution de cette tâche sont obtenus. A l’étape 320, pour au moins une unité de traitement, une liste ordonnée de tâches à exécuter par les unités fonctionnelles de l’unité de traitement concernée est déterminée. La détermination de l’affectation des tâches aux unités de traitement et leur ordonnancement est effectuée de sorte à optimiser des critères d’optimisation prédéfinis sur l’ensemble des tâches. A l’étape 330, la ou les listes ordonnées de tâches à exécuter pour la ou les unités de traitement sont transmises, via une interface de communication, au système 122 de contrôle d’exécution de tâche. Suite à l’étape 330, le système 122 de contrôle d’exécution est configuré pour, après réception de ces listes ordonnées de tâches, déclencher l’exécution des tâches dans la ou les listes ordonnées de tâches reçues, par exemple par transmission d’un signal de commande aux unités de traitement concernées. Il n’est pas nécessaire que la liste ordonnée spécifie quelles sont les unités fonctionnelles concernées : on suppose que l’unité de traitement concernée est configurée pour déclencher l’exécution d’une tâche par une unité fonctionnelle adaptée à cette tâche. Par exemple, si une unité de traitement est une imprimante 3D, la tâche d’impression comprend des paramètres d’impression qui déterminent le mode d’impression et donc l’unité fonctionnelle à utiliser. En outre, l’ordonnancement des tâches pour une unité de traitement tient compte du type de fonction de chaque unité fonctionnelle et l’ordonnancement est réalisé de sorte que pour une tâche donnée, il existe toujours au moins une unité fonctionnelle qui soit adaptée à une tâche et disponible à un instant donné si l’ordonnancement est respecté. Les disponibilités de l’unité de traitement ainsi que celles des unités fonctionnelles sont ainsi respectées, le déclenchement des tâches par les unités fonctionnelles adaptées étant réalisé par l’unité de traitement. A l’étape 340, un feedback sur l’exécution de tâches est reçu via l’interface de communication d’un système 123 de feedback d’exécution de tâche. Le feedback peut être reçu périodiquement, par exemple toutes les minutes, toutes les heures, une fois par jour, etc. Le feedback sur l’exécution d’une tâche comprenant un temps d’exécution effectif Te déjà passé pour l’exécution de la tâche concernée et/ou un taux d’accomplissement Ta de la tâche. A l’étape 345, les informations de disponibilité sont mises à jour pour les unités fonctionnelles, via une interface de communication d’un système 122 de contrôle d’exécution. Les informations de disponibilité mises à jour comprennent une capacité de traitement pour l’exécution de tâches pour chaque unité fonctionnelle. Cette capacité de traitement correspond à ce stade à une capacité de traitement restante qui est obtenue à partir de la capacité maximale de traitement obtenue à l’étape 300, déduction faite de la charge correspondant aux tâches en cours de traitement par les unités de traitement. A l’étape 346, de nouvelles tâches à exécuter peuvent être obtenues via une interface de communication d’un système source 121. Pour chaque tâche, une estimation d’un temps d’exécution pour l’exécution de cette tâche et au moins un type de fonction de traitement adapté pour l’exécution de cette tâche sont obtenus. A l’étape 350, une mise à jour, pour au moins une tâche, de l’estimation du temps d’exécution restant pour l’exécution de la tâche concernée est effectuée sur la base du feedback pour la tâche concernée. Par exemple, si le temps d’exécution effectif déjà passé pour l’exécution de la tâche concernée est Te=1 heure et que le taux d’accomplissement de la tâche est de Ta=75%, on peut estimer que le temps d’exécution total sera de Tt=Te/Ta=1/0.75=1,33 heure, soit un temps d’exécution restant Tr=Tt-Te=0.33 heure. Selon les tâches et/ou les unités fonctionnelles considérées, les temps Te, Tr, Tt peuvent être exprimés en seconde(s), heure(s), jour(s), etc. A l’étape 360, une mise à jour, pour au moins une unité de traitement, de la liste ordonnée de tâches à exécuter par l’unité de traitement concernée est effectuée sur la base de l’estimation du temps d’exécution restant mis à jour et des informations de disponibilités mises à jour. La détermination de l’affectation des tâches aux unités de traitement et leur ordonnancement est effectuée de sorte à optimiser des critères d’optimisation prédéfinis sur l’ensemble des tâches. Lorsque de nouvelles tâches à exécuter sont reçues à l’étape 346, les nouvelles tâches sont ajoutées à l’ensemble des tâches à affecter et ordonner, sauf éventuellement les tâches en cours de traitement qui ne peuvent pas être réaffectées. Ainsi une tâche, précédemment affectée à une unité de traitement et non encore initiée, peut être affectée à une autre unité de traitement. A l’étape 370, une transmission, via l’interface de communication, du système de contrôle d’exécution de tâche, d’au moins une liste ordonnée mise à jour de tâches à exécuter par l’unité de traitement concernée. Suite à l’étape 370, le système 122 de contrôle d’exécution est configuré pour, après réception des listes ordonnées de tâches mises à jour, déclencher l’exécution des tâches dans la ou les listes ordonnées de tâches reçues, par exemple par transmission d’un signal de commande aux unités de traitement concernées. Suite à l’étape 370, les étapes 340 à 370 peuvent être répétées de manière itérative afin de prendre en compte de nouvelles informations de feedback. La détermination de l’affectation des tâches et leur ordonnancement lors des étapes 320 et 360 est effectuée de sorte à optimiser des critères d’optimisation prédéfinis sur l’ensemble des tâches à affecter et ordonner (que ce soit des tâches nouvelles ou déjà affectées, voire celles en cours d’exécution) et prenant en compte les types de fonctions de traitements adaptées pour l’exécution des tâches ainsi que les informations de disponibilités par unité fonctionnelle. Différents algorithmes sont utilisables pour cette optimisation, par exemple un algorithme génétique. A titre d’exemple, un algorithme génétique de sélection des solutions possibles peut être utilisé pour trouver une solution d’ordonnancement de tâches proche de l’optimum sur la base d’une fonction objectif dont une valeur est calculée pour chaque individu – représentant une solution d’ordonnancement - dans la population considérée par l’algorithme génétique afin d’évaluer chaque solution d’ordonnancement. Un exemple d’algorithme génétique est décrit par référence à la . La fonction objectif peut reposer sur un ou plusieurs critères d’optimisation. Différents exemples de critères d’optimisation pouvant être utilisés aux étapes 320 et 360 sont décrits en détail ci-dessous. Un premier critère C1 peut servir à minimiser un écart de temps total pondéré par la priorité, calculé sur toutes les tâches, entre une date cible pour l’achèvement de l’exécution des tâches et une date effective d’achèvement de l’exécution des tâches. Pour le calcul de cet écart de temps total, les tâches peuvent être groupées selon leur niveau de priorité et un écart calculé pour chaque groupe de tâche ainsi constitué. L’écart de temps total peut alors être calculé comme somme pondérée par des coefficients de pondération correspondant aux niveaux de priorité (par exemple codés entre 0 et 1) des écarts calculés respectivement pour chaque groupe de tâches. L’écart pour un groupe de tâches peut être calculé comme la différence entre une date cible pour l’achèvement de l’exécution des tâches du groupe de tâches et la date effective d’achèvement de l’exécution des tâches du groupe de tâches. Le principe étant que plus une tâche a un niveau de priorité élevé et plus le coefficient de pondération est élevé. Dans un mode de réalisation, lorsqu'il y a au moins deux unités de traitement de même type mais avec un délai différent, une pénalisation liée aux délais des unités de traitement peut être appliquée pour certaines unités de traitement dans le calcul du critère C1 de sorte à augmenter l’écart de temps calculé pour les tâches affectées aux unités de traitement concernées. Un deuxième critère C2 peut servir à minimiser le temps d’inactivité des unités de traitement et/ou des unités fonctionnelles sur une période de temps donnée. Le temps d’inactivité d’une unité fonctionnelle est calculé comme la différence entre le temps passé sur l’exécution de tâche(s) pendant cette période de temps et la disponibilité (par exemple, le temps de traitement disponible) pour cette unité fonctionnelle pour cette période de temps. Un troisième critère C3 peut servir à maximiser la vitesse d’augmentation de valeur lors de l’exécution de tâches sur la base du niveau de valeur associées aux tâches. Ce troisième critère d’optimisation simule la création de valeur lors de l’exécution des tâches et correspond à une vitesse d’accroissement de valeur sur une période de temps donnée. Cette vitesse d’accroissement de valeur doit être la plus grande possible, l'objectif étant d'accélérer la création de valeur et de prioriser les tâches avec la valeur la plus élevée. Cette vitesse d’accroissement de valeur peut être calculée en additionnant les niveaux de valeur des tâches exécutées sur une période de temps donnée, la somme pouvant être pondérée par le taux d’exécution de la tâche si la tâche n’est que partiellement exécutée sur cette période de temps. Un quatrième critère C4 peut être appliqué lorsqu'il y a au moins deux unités de traitement de même type mais avec un coût différent (par exemple un coût horaire différent) et vise à minimiser le coût d’exécution des tâches sur la base des coûts associés aux unités de traitement. Une pénalisation liée aux coûts des unités de traitement peut ainsi être prise en compte dans la fonction objectif pour certaines unités de traitement. La prise en compte de ce critère peut être effectuée en calculant la somme pondérée sur toutes les tâches du temps d’exécution estimé par tâche multiplié par le coût horaire de l’unité de traitement à laquelle la tâches est allouée. Un cinquième critère C5, similaire au critère C1, peut servir à minimiser un écart de temps total prenant en compte des pénalités de retard par groupe de tâche, calculé sur toutes les tâches, entre une date cible pour l’achèvement de l’exécution des tâches et une date effective d’achèvement de l’exécution des tâches. A titre d’exemple, un algorithme génétique de sélection des solutions possibles peut être utilisé pour trouver une solution d’ordonnancement de tâches proche de l’optimum sur la base d’une fonction objectif dont une valeur est calculée pour chaque individu – représentant une solution d’ordonnancement - dans la population considérée par l’algorithme génétique afin d’évaluer chaque solution d’ordonnancement. La représente un organigramme d'un algorithme génétique selon un exemple de réalisation. Bien que les différentes étapes de l'organigramme soient présentées et décrites de façon séquentielle, certaines ou toutes les étapes peuvent être exécutées dans un ordre différent, peuvent être combinées ou omises. Les étapes de la méthode peuvent être mises en œuvre par ordinateur, par exemple par un dispositif 110 de programmation tel que décrit dans ce document, notamment par référence à la et/ou 7. Lors de l’étape 510, la population à évaluer est générée. Chaque individu de la population correspond à une solution possible d’affectation des tâches aux unités de traitement et d’ordonnancement des tâches pour chaque unité de traitement. Chaque individu de la population peut être codé par un vecteur et correspond à un ordonnancement possible des tâches. Dans ce vecteur, une composante est associée à une tâche et comprend un couple de valeurs dont l’une est le rang de la tâche dans ordonnancement et l’autre est un identifiant de l’unité de traitement à laquelle est affectée la tâche Chacune des solutions examinées par l’algorithme génétique doivent respecter les contraintes suivantes : les éventuelles précédences inter-tâches entre des tâches de l’ensemble des tâches ; les éventuelles précédences inter-phases entre des groupes de tâches correspondant chacun à une phase d’exécution ; la disponibilité par unité fonctionnelle doit être respecté pour chaque unité fonctionnelle, en prenant en compte ou pas les capacités étendues ou maximales des unités fonctionnelles; la disponibilité par type de fonction sur toutes les unités fonctionnelles ayant ce type de fonction doit être respecté pour chaque type de fonction, en prenant en compte ou pas les capacités étendues ou maximales des unités fonctionnelles. Un exemple de procédé pour la génération de listes ordonnées de tâches et l’identification des unités de traitement d’affectation est présenté par référence à la . Ce procédé est utilisable aux étapes 510 et/ou 565 du procédé décrit par référence à la pour générer des solutions d’ordonnancement à évaluer sur la base de la fonction objectif. Lors de l’étape 520, il est vérifié si une ou plusieurs conditions d’arrêt sont vérifiées. Une condition d’arrêt peut être la détection de l’absence d’amélioration de la solution basée sur la fonction objectif. Par exemple, si pendant un temps T on n’améliore pas la valeur optimale de la fonction objectif de plus d’un pourcentage x donné alors on arrête. Une autre condition d’arrêt peut être relative à un temps consommé par l’algorithme génétique et/ou à la taille de la population évaluée pour éviter un temps de traitement excessivement long. Si une ou plusieurs conditions d’arrêt sont vérifiées, l’étape 580 est exécutée suite à l’étape 520. Si une des conditions d’arrêt n’est pas vérifiée, l’étape 530 est exécutée suite à l’étape 520. Lors de l’étape 530, une évaluation de la population est effectuée : une valeur de la fonction objectif est calculée pour chaque individu. Lors de l’étape 540, des individus sont sélectionnés : ceux pour lesquels la valeur de la fonction objectif est optimale, par exemple supérieure ou inférieure à un seuil selon que l’on cherche à minimiser ou maximiser la valeur de la fonction objectif. Lors de l’étape 550, des croisements entre individus sélectionnés sont effectués pour générer de nouveaux individus. Par exemple, on peut générer un nouvel individu par croisement de deux individus sélectionnés (par exemple aléatoirement) et répéter ce croisement pour plusieurs pairs d’individus sélectionnés. Pour effectuer un croisement de deux individus, on examine par exemple les tâches ordonnées en suivant l’ordre des tâches dans les deux ordonnancements. Ainsi on examine d’abord les tâches de rang 1 des deux individus : la tâche de rang 1 de l’un des deux individus est sélectionnée comme tâche de rang 1 dans le nouvel individu et la tâche de rang 1 de l’autre individu est sélectionnée, si elle est distincte, comme tâche de rang 2 dans le nouvel individu. Ensuite on examine les tâches de rang 2 des deux individus : si elles ont distinctes de celles déjà affectée au nouvel individu, l’une de ces tâches est sélectionnée comme tâche de rang 3 pour le nouvel individu et l’autre tâche est sélectionné comme tâche de rang 4. Et ainsi de suite pour les rangs suivants. Dans les croisements réalisés, les tâches ayant des prédécesseurs peuvent être affectées au nouvel individu en bloc, en même temps que la tâche parente sans prédécesseur dont ces tâches dépendent, de sorte à conserver l’ordre de ces tâches après croisement. Lors de l’étape 560, des mutations entre individus sélectionnés (par exemple aléatoirement) sont effectuées. Par exemple, on peut générer un nouvel individu par permutation de deux tâches d’un individu et/ou changement de l’unité de traitement d’affectation vers une autre unité de traitement disposant d’une unité fonctionnelle d’un type de fonction adapté à la tâche permutée et disposant d’une capacité de traitement suffisante pour ce type de fonction. Dans les mutations réalisées, les tâches ayant des prédécesseurs peuvent être permutées en bloc en même temps que la tâche parente sans prédécesseur dont ces tâches dépendent de sorte à conserver l’ordre de ces tâches après permutation. Lors de l’étape 565, de nouveaux individus peuvent être créés selon la méthode décrite pour la génération d’individu à l’étape 510. Lors de l’étape 570, les nouveaux individus obtenus par croisements ou mutations aux étapes 550 et 560, et optionnellement les individus nouvellement créés à l’étape 565, sont ajoutées à la population. Suite à l’étape 570, l’étape 520 est exécutée à nouveau. Lors de l’étape 580 finale, on sélectionne dans la population l’individu pour lequel la valeur de la fonction objectif est optimale (minimale ou maximale selon la formule mathématique retenue pour la fonction objectif). La représente un organigramme d'un procédé de génération de listes ordonnées de tâches selon un exemple de réalisation. Bien que les différentes étapes de l'organigramme soient présentées et décrites de façon séquentielle, certaines ou toutes les étapes peuvent être exécutées dans un ordre différent, peuvent être combinées ou omises, et certaines ou toutes les étapes peuvent être effectuées en parallèle. Les étapes de la méthode peuvent être mises en œuvre par ordinateur, par exemple par un dispositif 110 de programmation tel que décrit dans ce document, notamment par référence à la et/ou 7. Lors de l’étape 400, on initialise les variables R et N à zéro, N étant le niveau courant dans le graphe des dépendances entre tâches et R le rang courant d’une tâche à affecter dans l’ordonnancement courant. Lors de l’étape 410, on obtient pour chaque tâche un temps d’exécution et un type de fonction adapté à exécuter la tâche. Lors de l’étape 420, on calcule un graphe des dépendances entre tâches dans lequel un nœud représente une tâche et les liens de précédence entre les tâches sont représentées par les branches de l’arbre. Lors de l’étape 430, on calcule, sur la base des informations de disponibilité reçues pour les unités fonctionnelles, une capacité de traitement par type de fonction pour chaque unité de traitement. La capacité de traitement par type de fonction peut être calculée par sommation des capacités de traitement des unités fonctionnelles ayant ce type de fonction dans l’unité de traitement considérée. Une capacité de traitement totale par type de fonction peut être calculée pour toutes les unités de traitement sur la base (par exemple, par sommation) des capacités de traitement des unités fonctionnelles ayant ce type de fonction dans toutes les unités de traitement. Par exemple, lorsque deux unités de traitement similaires sont disponibles mais dans deux localisations différentes de sorte à pouvoir affecter les tâches à ces deux unités de traitement. Une capacité de traitement par unité de traitement peut être calculée sur la base (par exemple, par sommation) des capacités de traitement des unités fonctionnelles de cette unité de traitement. Par exemple dans le cas où deux unités de traitement ont des unités fonctionnelles ayant les mêmes capacités (par exemple deux imprimantes identiques ou ayant en partie des capacités identiques). Lors de l’étape 440, la variable N est incrémentée de 1. Lors de l’étape 450, on sélectionne aléatoirement une tâche de niveau N dans le graphe. Lors de l’étape 460, on affecte la tâche sélectionnée à une des unités de traitement adaptées à exécuter cette tâche sur la base d’un type de fonction associée à la tâche considérée et de la capacité de traitement de ce type de fonction pour cette unité de traitement. L’unité de traitement est choisie aléatoirement. Lors de l’étape 470, on affecte à la tâche le rang R dans l’ordonnancement réalisé et on incrémente R : R=R+1. Lors de l’étape 470, on peut en outre calculer une date de fin d’exécution de la tâche sur la base du temps d’exécution restant pour les prédécesseurs et du temps d’exécution restant pour la tâche considérée. Lors de l’étape 480, on met à jour la capacité de traitement (disponibilité restante) par type de fonction pour chaque unité de traitement. La capacité de traitement mise à jour est calculée en déduisant de la capacité de traitement courante le temps d’exécution restant pour la tâche affectée à l’étape 460. Lors de l’étape 490, on détermine si toutes les tâches de niveau N ont été allouées. Dans l’affirmative, l’étape 440 est exécutée suite à l’étape 490. Dans la négative, l’étape 450 est exécutée suite à l’étape 490. Les étapes 440 à 490 sont réitérées jusqu’à ce qu’il n’y ait plus de tâche à affecter et ordonner. La représente un organigramme d'un procédé de simulation d’ajout ou suppression de ressources selon un exemple de réalisation. Bien que les différentes étapes de l'organigramme soient présentées et décrites de façon séquentielle, certaines ou toutes les étapes peuvent être exécutées dans un ordre différent, peuvent être combinées ou omises, et certaines ou toutes les étapes peuvent être effectuées en parallèle. Les étapes de la méthode peuvent être mises en œuvre par ordinateur, par exemple par un dispositif 110 de programmation tel que décrit dans ce document, notamment par référence à la et/ou 7. Les étapes 610 à 640 sont exécutées pour chaque type de fonction parmi un ensemble de type de fonctions à évaluer. Lors de l’étape 610, une simulation de l’ajout (respectivement de la suppression) dans une unité de traitement d’une unité fonctionnelle exécutant le type de fonction considéré est réalisée. Cette simulation s’effectue par modification des informations de disponibilités concernant le type de fonction considéré : on ajoute (respectivement ôte) à la disponibilité totale (i.e. capacité de traitement totale) déterminée pour le type de fonction, une disponibilité (par exemple, un temps de traitement disponible) correspondante à l’unité fonctionnelle pouvant être ajoutée (respectivement supprimée). Lors de l’étape 620, une recherche la meilleure solution d’allocation et d’ordonnancement de tâches en tenant compte pour les ressources de l’unité fonctionnelle ajoutée (respectivement supprimée). Cette recherche s’effectue par allocation des tâches d’un ensemble de tâches à une ou plusieurs unités de traitement et un calcul d’une liste ordonnée de tâches à exécuter par les unités fonctionnelles de chaque unité de traitement concernée, le calcul étant effectué de sorte à optimiser les critères sur l’ensemble des tâches à exécuter et en prenant en compte les informations de disponibilités modifiées. Lors de l’étape 630, la valeur de fonction objectif calculée sur l’ensemble des tâches est mémorisée pour le type de fonction considéré sur la base des critères. Lors de l’étape 640, on détermine si tous les types de fonction à évaluer ont été évaluées. Dans l’affirmative, on exécute l’étape 650 suite à l’étape 640. Dans la négative, on exécute à nouveau les étapes 610 à 630 suite à l’étape 640 de sorte à évaluer un autre type de fonction non encore évalué. Lors de l’étape 650, un type de fonction à ajouter (respectivement supprimer) est identifié parmi les types de fonction à évaluer, sur la base des valeurs de la fonction objectif obtenues pour les types de fonction à évaluer. On recherche pour quel type de fonction, l’ajout d’une unité fonctionnelle a le plus d’impact sur la fonction objectif, ou respectivement, la suppression d’une unité fonctionnelle a le moins d’impact sur la fonction objectif. Si on suppose par exemple que la valeur de la fonction objectif doit être maximisée, le type de fonction à ajouter (respectivement supprimer) est celui qui permet une augmentation maximale (respectivement une réduction minimale) de la valeur de la fonction objectif par rapport à la valeur de la fonction objectif sans l’ajout (respectivement la suppression) de l’unité fonctionnelle du type considéré. La méthode de programmation décrite dans ce document permet un gain de temps par l’automatisation de l’affectation des tâches et l’ordonnancement des tâches et cet ordonnancement peut être calculé en quelques minutes (par exemple, 1 à 5 minutes selon la puissance du processeur) pour un cas d’exemple comprenant 1000 tâches et 10 unités de traitement. La méthode de programmation permet de prendre en compte différents types de contraintes liées aux capacités de traitement, notamment : La prise en compte des capacités de traitement, par unité fonctionnelle, en intégrant la notion de capacité nominale ou capacité étendue; La prise en compte des capacités de traitement par type de fonction, pour toutes les unités de traitement disposant de ce type de fonction. La méthode de programmation permet de prendre en compte différents critères dans le calcul de la fonction objectif. L’algorithme de programmation permet par exemple d’appliquer dans le calcul de la fonction objectif des pénalisations liées aux coûts des unités de traitement et/ou aux délais de traitement pour certaines unités de traitement. La méthode de programmation permet de gérer différents scénarios par l’utilisation de capacités étendues ou maximales afin de gérer des situations de surcharges des unités de traitement. La méthode de programmation permet d’identifier si une unité fonctionnelle est sous-dimensionnée ou sur-dimensionnée par simulation d’ajout ou suppression d’unités fonctionnelles avec différents types de fonction. La méthode de programmation permet d’identifier dans quelle unité de traitement et pour quel type de fonction, l’ajout d’une unité fonctionnelle a le plus d’impact sur la fonction objectif, ou respectivement, dans quelle unité de traitement et pour quel type de fonction, la suppression d’une unité fonctionnelle a le moins d’impact sur la fonction objectif. Les fonctions, étapes et procédés décrits dans ce document peuvent être mises en œuvre par logiciel (par exemple, via un logiciel sur un ou plusieurs processeurs, pour exécution sur un ordinateur à usage général ou à usage spécifique) et/ou être mises en œuvre par du hardware (par exemple un ou plusieurs circuits électroniques, et/ou tout autre composant matériel). La présente description concerne ainsi un logiciel ou programme d'ordinateur, susceptible d’être exécuté par un dispositif hôte (par exemple, un dispositif de programmation 110) au moyen d’un ou plusieurs processeurs de données, ce logiciel / programme comportant des instructions pour causer l'exécution par ce dispositif hôte de tout ou partie des étapes de l’un ou des procédés décrits dans ce document. Ces instructions sont destinées à être stockées dans une mémoire du dispositif hôte, chargées puis exécutées par un ou plusieurs processeurs de ce dispositif hôte de sorte à causer l’exécution par ce dispositif hôte du procédé. Ce logiciel / programme peut être codé au moyen de n’importe quel langage de programmation, et être sous la forme de code source, code objet, ou de code intermédiaire entre code source et code objet, tel que dans une forme partiellement compilée, ou dans n’importe quelle autre forme souhaitable. Le dispositif hôte peut être mis en œuvre par une ou plusieurs machines physiquement distinctes. Le dispositif hôte peut présenter globalement l’architecture d’un ordinateur, incluant des constituants d’une telle architecture : mémoire(s) de données, processeur(s), bus de communication, interface(s) matérielle(s) pour la connexion de ce dispositif hôte à un réseau ou un autre équipement, interface(s) utilisateur, etc. Dans un mode de réalisation, tout ou partie des étapes du procédé de programmation ou d’un autre procédé décrit dans ce document sont mises en œuvre par un dispositif de programmation doté de moyens de mise en œuvre de ces étapes de ce procédé. Ces moyens peuvent comprendre des moyens logiciels (software) (par exemple, des instructions d'un ou plusieurs composants d’un programme) et/ou moyens matériels (hardware) (par exemple, mémoire(s) de données, processeur(s), bus de communication, interface(s) matérielle(s), etc). Ces moyens peuvent comprendre par exemple un ou plusieurs circuits configurés pour exécuter une ou plusieurs ou toutes les étapes d’un des procédés décrits ici. Ces moyens peuvent comprendre par exemple au moins un processeur et au moins une mémoire comprenant des instructions de programme configurées pour, lorsqu’elles sont exécutées par le processeur, causer l’exécution par le dispositif d’une ou plusieurs ou toutes les étapes d’un des procédés décrits ici. La illustre un exemple de réalisation d'un dispositif 9000. Le dispositif 9000 peut être utilisé comme dispositif de programmation pour exécuter une ou plusieurs ou toutes les étapes d'un procédé décrit dans le présent document. Le dispositif 9000 peut comprendre au moins un processeur 9010 et au moins une mémoire 9020. Le dispositif 9000 peut comprendre une ou plusieurs interfaces de communication 9040 (par exemple, des interfaces réseau pour l'accès à un réseau câblé / sans fil, y compris une interface Ethernet, une interface WIFI, etc.) connectées au processeur et configurées pour communiquer via un ou plusieurs liens de communication câblés / non câblés. Le dispositif 9000 peut comprendre des interfaces utilisateur 9030 (par exemple, un clavier, une souris, un écran d'affichage, etc) connectées au processeur. Le dispositif 9000 peut également comprendre un ou plusieurs lecteurs de support 9050 pour lire un support de stockage lisible par ordinateur (par exemple, un disque de stockage numérique 9060 (CD-ROM, DVD, Blue Ray, etc.), une clé USB 9080, etc). Le processeur 9010 est connecté à chacun des autres composants 9020, 9030, 9040, 9050 afin d'en commander le fonctionnement. La mémoire 9020 peut comprendre une mémoire vive (RAM), une mémoire cache, une mémoire non volatile, une mémoire de sauvegarde (par exemple, des mémoires programmables ou flash), une mémoire morte (ROM), un disque dur (HDD), un lecteur à état solide (SSD) ou toute combinaison de ceux-ci. La ROM de la mémoire 9020 peut être configurée pour stocker, entre autres, un système d'exploitation de le dispositif 9000 et/ou un ou plusieurs codes de programmes informatiques d'une ou plusieurs applications logicielles. La RAM de la mémoire 9020 peut être utilisée par le processeur 9010 pour le stockage temporaire de données. Le processeur 9010 peut être configuré pour stocker, lire, charger, exécuter et/ou traiter autrement des instructions 9070 stockées dans un support de stockage lisible par ordinateur 9060, 9080 et/ou dans la mémoire 9020 de sorte que, lorsque les instructions sont exécutées par le processeur, le dispositif 9000 exécute une ou plusieurs ou toutes les étapes d'un procédé décrit dans le présent document. Des moyens mettant en œuvre une fonction ou un ensemble de fonctions peuvent correspondre dans ce document à un composant logiciel, à un composant matériel ou bien à une combinaison de composants matériels et/ou logiciels, apte à mettre en œuvre la fonction ou l’ensemble de fonctions, selon ce qui est décrit ci-dessous pour les moyens concernés. La présente description concerne aussi un support d'informations lisible par un processeur de données, et comportant des instructions d'un programme tel que mentionné ci-dessus. Le support d'informations peut être n'importe quel moyen matériel, entité ou appareil, capable de stocker les instructions d'un programme tel que mentionné ci-dessus. Les supports de stockage de programme utilisables incluent les mémoires ROM ou RAM, les supports de stockage magnétiques tels que des disques magnétiques et des bandes magnétiques, les disques durs ou des supports de stockage de données numériques à lecture optique, ou toute combinaison de ces supports. Dans certains cas, le support de stockage lisible par ordinateur n'est pas transitoire. Dans d’autres cas, le support d'informations peut être un support transitoire (par exemple, une onde porteuse) pour la transmission d’un signal (signal électromagnétique, électrique, radio ou optique) porteur des instructions de programme. Ce signal peut être acheminé via un moyen de transmission approprié, filaire ou non filaire : câble électrique ou optique, liaison radio ou infrarouge, ou par d'autres moyens. Un mode de réalisation concerne également un produit programme d'ordinateur comprenant un support de stockage lisible par ordinateur sur lequel sont stockées des instructions de programme, les instructions de programme étant configurées pour causer la mise en œuvre par le dispositif hôte (par exemple un ordinateur) de tout ou partie des étapes d’un ou des procédés décrits ici lorsque les instructions de programme sont exécutées par un ou plusieurs processeurs et/ou un ou plusieurs composants matériels programmables du dispositif hôte. Procédé de programmation de tâches à exécuter par plusieurs unités de traitement d’un système d’exécution de tâches, chaque unité de traitement comprenant une ou plusieurs unités fonctionnelles, chaque unité fonctionnelle étant adaptée à exécuter un ou plusieurs types de fonctions de traitement, le procédé étant mis en œuvre par ordinateur et comprenant : - une obtention (310), via une interface de communication avec un système source, d’un ensemble de tâches à exécuter et pour chaque tâche d’une estimation d’un temps d’exécution restant pour l’exécution de cette tâche et d’au moins un type de fonction de traitement adapté pour l’exécution de cette tâche; - une obtention (300), via une interface de communication d’un système de contrôle d’exécution de tâches, d’une information de disponibilité par unité fonctionnelle pour l’exécution de tâches ; - une détermination (320), pour au moins une unité de traitement, d’une liste ordonnée de tâches à exécuter par une ou des unités fonctionnelles de l’unité de traitement concernée, le calcul étant effectué de sorte à optimiser des critères sur l’ensemble des tâches et en prenant en compte les types de fonctions de traitements adaptées pour l’exécution des tâches et les informations de disponibilité par unité fonctionnelle ; - une transmission (330), via l’interface de communication du système de contrôle d’exécution de tâche, d’au moins une liste ordonnée de tâches à exécuter par une unité de traitement concernée ; - une réception (340), via l’interface de communication d’un système de feedback, d’un feedback sur l’exécution de tâches, le feedback sur l’exécution d’une tâche comprenant un temps d’exécution effectif passé pour l’exécution de la tâche concernée et/ou un taux d’accomplissement de la tâche ; - une mise à jour (350), pour au moins une tâche, de l’estimation du temps d’exécution restant pour l’exécution de la tâche concernée sur la base du feedback pour la tâche concernée ; - une mise à jour (360), pour au moins une unité de traitement, de la liste ordonnée de tâches à exécuter par l’unité de traitement concernée sur la base de l’estimation du temps d’exécution restant mis à jour, le calcul étant effectué de sorte à optimiser les critères sur l’ensemble des tâches restant à exécuter; - une transmission (370), via l’interface de communication du système de contrôle d’exécution de tâche, d’au moins une liste ordonnée mise à jour de tâches à exécuter par l’unité de traitement concernée. Procédé selon la revendication 1, comprenant pour chaque type de fonction parmi des types de fonction à évaluer: - une simulation (610) de l’ajout dans une unité de traitement d’une unité fonctionnelle exécutant le type de fonction considéré par modification des informations de disponibilités pour le type de fonction considéré ; - une allocation (620) des tâches d’un ensemble de tâches à une ou plusieurs unités de traitement et un calcul d’une liste ordonnée de tâches à exécuter par les unités fonctionnelles de chaque unité de traitement concernée, le calcul étant effectué de sorte à optimiser les critères sur l’ensemble des tâches à exécuter et en prenant en compte les informations de disponibilités modifiées ; - une mémorisation (630) d’une valeur de fonction objectif sur l’ensemble des tâches sur la base des critères associé au type de fonction considéré ; et - une identification (650), parmi les types de fonction à évaluer, d’un type de fonction à ajouter sur la base des valeurs de la fonction objectif obtenues pour les types de fonction à évaluer, le type de fonction à ajouter étant celui qui a l’impact le plus important sur la valeur de la fonction objectif. Procédé selon la revendication 1, comprenant pour chaque type de fonction parmi des types de fonction à évaluer: - une simulation (610) de la suppression dans une unité de traitement d’une unité fonctionnelle exécutant le type de fonction considéré par modification des informations de disponibilités pour le type de fonction considéré; - une allocation (620) des tâches d’un ensemble de tâches à une ou plusieurs unités de traitement et un calcul d’une liste ordonnée de tâches à exécuter par les unités fonctionnelles de chaque unité de traitement concernée, le calcul étant effectué de sorte à optimiser les critères sur l’ensemble des tâches à exécuter et en prenant en compte les informations de disponibilités modifiées ; - une mémorisation (630) d’une valeur de fonction objectif sur l’ensemble des tâches sur la base des critères associé au type de fonction considéré ; et - une identification (650), parmi les types de fonction à évaluer, d’un type de fonction à supprimer sur la base des valeurs de la fonction objectif obtenues pour les types de fonction à évaluer, le type de fonction à supprimer étant celui qui a l’impact le moins important sur la valeur de la fonction objectif. Procédé selon la revendication 1, les critères comprenant un premier critère de minimisation d’un écart de temps total, l’écart de temps total étant calculé sur la base d’une somme pondérée par un niveau de priorité des écarts calculés respectivement pour des groupes de tâches, l’écart pour un groupe de tâches étant calculé comme différence entre une date cible pour l’achèvement de l’exécution du groupe de tâches et la date effective d’achèvement de l’exécution du groupe de tâches. Procédé selon la revendication 1, les critères comprenant au moins critère parmi : un deuxième critère de minimisation du temps d’inactivité des unités de traitement et/ou des unités fonctionnelles ; un troisième critère de maximisation de vitesse d’augmentation de valeur lors de l’exécution de tâches sur la base d’un niveau de valeurs associées aux tâches ; un quatrième critère de minimisation d’un coût d’exécution des tâches sur la base de coûts associés aux unités de traitement utilisées pour l’exécution de tâches; et un cinquième critère de minimisation d’un délai d’exécution des tâches sur la base de délais associés aux unités de traitement. Procédé selon l’une quelconque des revendications précédentes, dans lequel les informations de disponibilités d’au moins une unité fonctionnelle sont obtenues pour différents niveaux de capacité de traitement de l’unité fonctionnelle concernée, ces différents niveaux de capacité de traitement prenant en compte une fonction principale de l’unité fonctionnelle et au moins une fonction secondaire de l’unité fonctionnelle, la détermination ou mise à jour d’une liste ordonnée de tâche pour l’unité de traitement comprenant l’unité fonctionnelle concernée étant effectuée pour l’un des niveaux de capacité de traitement. Dispositif de programmation comprenant des moyens de mise en œuvre des étapes d’un procédé selon l’une quelconque des revendications précédentes. Programme d'ordinateur comportant des instructions de programme pour l'exécution des étapes d’un procédé selon l'une quelconque des revendications 1 à 6 lorsque ledit programme est exécuté par un ordinateur. Support d'enregistrement lisible par un ordinateur sur lequel est enregistré un programme d'ordinateur comprenant des instructions de programme pour l'exécution des étapes d’un procédé selon l'une quelconque des revendications 1 à 6 lorsque ledit programme est exécuté par un ordinateur.