• Aucun résultat trouvé

Nous avons présenté dans cette section le modèle multi-agent du marché du travail Work-Sim. Dans ce modèle, deux catégories d’agents hétérogènes et autonomes sont en interaction, des agents "individu" et des agents "entreprise privée". Les agents ont chacun des attributs spécifiques, déterminés une fois pour toute à leur création, ainsi que des variables internes qui évoluent tout au long de la simulation. Ces deux catégories d’agent évoluent dans un environnement composé d’un module institutionnel qui comprend les principaux éléments du droit du travail (contrats de travail CDD et CDI, indemnités de licenciement, ...) et de trois

artifacts :

— l’État qui recrute des fonctionnaires

— JobAds, qui répertorie d’un côté les offres d’emploi des entreprises et les demandes d’emploi des individus.

— un institut de la statistiques qui diffuse un nombre limité de données statistiques aux agents

Chaque agent du modèle a un objectif :

— pour l’agent "individu", il s’agit de trouver un état satisfaisant en terme de niveau d’uti-lité. L’individu évalue un état avec une fonction d’utilité qui consiste en une agrégation de plusieurs critères (revenu, stabilité, aménité et temps libre)

— pour l’agent "entreprise privée", il s’agit de faire des profits

Pour satisfaire son objectif, l’agent dispose d’un nombre d’informations limitées sur son environnement, il peut prendre des décisions (en rationalité limitée) et interagir avec les autres agents du modèle.

Le cycle de la simulation se décompose en quatre phases : A) Décisions économiques des entreprises ; B) Décisions des individus ; C) Recrutements et Promotions et D) Processus démographiques. Chaque période représente une semaine dans la réalité.

— concernant la modélisation des décisions des individus, nous utilisons le principe d’une machine à état avec des agents qui prennent des décisions en rationalité limitée pour changer de situation. Ce processus permet une représentation simple des choix d’un individu entre un nombre fini d’états possibles suivant le principe de seuils de satisfaction (Satisficing) de (Simon, 1956).

— nous avons mis au point un processus d’anticipation a horizon fini qui est au cœur des décisions des firmes dans le modèle. Cette modélisation est une alternative à

l’in-troduction de mécanismes d’apprentissage qu’il serait difficile à mettre en œuvre dans

ce cas pour deux raisons : d’une part, le nombre d’états possibles pour une firme est très important, et d’autre part, les firmes ne rencontrent pas assez d’événements pour que l’apprentissage soit pertinent. Par exemple, les licenciements économiques sont rares, et il serait très long d’apprendre le coût d’un licenciement économique par essai et erreur. La firme projette plutôt des scénarios qui lui permette d’évaluer le risque et le coût d’un licenciement, sans en avoir forcément déjà vécu un.

Nous détaillerons les apports du modèle WorkSim dans le chapitre de conclusion de cette thèse.

Par ailleurs, le modèle WorkSim est conçu pour être extensible et applicable à l’étude du marché du travail d’un autre pays, qui possède un cadre institutionnel et démographique différent. Dans l’annexe J, nous donnons des pistes qui permettraient d’étendre le modèle WorkSim pour étudier le marché du travail sénégalais.

Conception et implémentation du modèle

informatique WorkSim

Le modèle WorkSim présenté dans le chapitre précédent est un outil de simulation basé sur la méthodologie des systèmes multi-agents. Nous exposons dans ce chapitre la conception de la plateforme de simulation. Pour cela nous décrirons la structure du modèle informatique et l’architecture des agents. Il s’agira aussi de préciser les interactions possibles entre ces entités informatiques. Nous présenterons enfin le développement d’outils pour explorer et analyser le modèle.

3.1 Conception de la plateforme de simulation

La première version du modèle WorkSim (Lewkovicz, 2010) était développée sur la pla-teforme Repast3.1 (North et al., 2006), implémentée en Java. Cette plapla-teforme permet de modéliser des agents et d’exécuter leurs actions en trois étapes à chaque période (prestep,

step, postep). Elle offre aussi une interface graphique qui permet de lancer la simulation et de

visualiser les sorties du modèle.

Cependant nous avons relevé plusieurs inconvénients :

— les outils graphiques de visualisation en temps réel de la simulation sont limités — la plateforme n’offre pas de méthodes pour calibrer le modèle

— le lancement en parallèle des simulations n’est pas prévu dans le mode Batch — les possibilités d’exportation des données sont limitées

— la plateforme Repast3.1 n’est plus maintenue à ce jour

Pour ces raisons, il nous a paru plus simple de supprimer la dépendance à la plateforme

Repast3.1. Nous avons reconstruit le modèle uniquement en Java, langage orienté objet. Le

fait de ne pas dépendre d’une plateforme multi-agent existante permet une grande portabilité du modèle et facilite les extensions futures du programmes. L’avantage est aussi de pouvoir maitriser complètement les processus d’ordonnancement séquentiels des agents dans le modèle et la gestion de l’aléatoire.

Le développement en Java facilite la communication scientifique, car ce langage informa-tique est un des plus répandus dans le monde.

3.1.1 Structure du modèle informatique

Comme nous l’avons indiqué au chapitre précédent nous avons choisi de dissocier les

agents des artifacts, afin de distinguer les entités ce qui sont proactives de celle qui ne le sont

pas.

Le diagramme de classe général qui décrit la structure du modèle WorkSim avec les agents (en vert) et les artifacts (en bleu) est présenté sur la figure 3.1.

FIGURE3.1 – Diagramme de classe du modèle WorkSim

Comme on peut le voir sur ce diagramme, les concepts d’employé, de poste et de contrat sont clairement dissociés dans le modèle WorkSim. Ils sont implémentés avec des objets distincts. Pour ne pas alourdir le diagramme, les classes des agents "individu" et "entreprise privée" ne sont volontairement pas détaillées. Il s’agit ici uniquement de préciser les relations

entre les principales classes du modèle. 3.1.2 Architecture des agents du modèle 3.1.3 Les agents "individu"

Pour la modélisation des individus, nous reprenons l’architecture modulaire proposée par (Lewkovicz, 2010). Les agents individus sont caractérisés par des attributs et des méthodes communes à tous les agents individus définis dans la section 2.3.1, comme un genre, un âge ou une préférence pour le temps libre. Le modèle cognitif de l’individu est implémenté avec une machine à état (cf. section 2.5.1). L’idée est que chaque individu dispose d’un module de perception, de comportement et de décision qui diffère suivant l’état dans lequel il se trouve sur le marché du travail.

L’implémentation des états dans WorkSim est réalisée selon une structure hiérarchique qui présente les avantages suivant :

— elle permet de factoriser le code. Les méthodes communes entre différents états sont implémentées une unique fois.

— elle permet une extension facile du code en ajoutant de nouveaux états.

— elle permet de faciliter la collecte des données statistiques. Avec cette hiérarchie, il devient en effet facile de recenser les individus par groupes d’agents, avec un emploi ou sans emploi, ou bien de descendre au niveau de sous-catégories d’agents, par exemple les catégories d’inactif ou de chômeur.

Le diagramme de classe représentant les états possibles pour un individu est présenté sur la figure 3.2.

Tous les états héritent d’une classe abstraite Etat. Les états Employé du secteur privé PAE (employé qui n’est pas à la recherche d’un autre emploi) et d’Employé du secteur privé PARAE (employé à la recherche d’un autre emploi), Dirigeant et Fonctionnaire héritent d’une même classe abstraite EnEmploi. Ces individus en emploi héritent d’une méthode commune qui permet l’augmentation de leurs capitaux humains, car ils cumulent de l’expérience lorsqu’ils travaillent.

Les états d’Inactif et de Chômeur héritent d’une même classe SansEmploi. Ils héritent d’une méthode commune qui permet la diminution de leurs capitaux humains car ils ne travaillent pas et donc perdent du capital humain par effet d’oubli de leurs connaissances (cf. section 2.3.1.2).

A chacun de ces états Inactif, Chômeur, Employé du secteur privé (PAE) et Employé du

secteur privé PARAE sont affectés des modules décisionnels qui sont chaque fois spécifiques

et qui ont été détaillés dans la section 2.6.5 du chapitre précédent. Ces décisions concernent les changements d’état de l’individu.

A chacun de ces états est affecté aussi un module de comportement :

— les agents Chômeur et Employé du secteur privé PARAE ont un même comportement de recherche d’emploi modélisé avec la classe ComportementRecherche (cf. section 2.6.5.7). — les agents dans les états Inactif et Employé du secteur privé (PAE) ont un même compor-tement de prospection modélisé avec la classe Comporcompor-tementProspection. Ils reçoivent

FIGURE3.2 – Diagramme de classe représentant les états possibles pour un individu

chaque mois et sans coût de recherche des informations concernant des postes du marché du travail qu’ils pourraient potentiellement occuper (cf. section 2.6.5.1). Ces informations permettent à l’individu d’évaluer l’intérêt de commencer la recherche d’un emploi (ou bien d’un autre emploi si l’individu est déjà en poste).

3.1.4 Les agents "entreprise privée"

Les agents "entreprise privée" sont modélisés avec 4 modules distincts : un module de

perception, un module d’estimation, un module d’anticipation et un module de décision. Les

trois modules de perception, estimation et anticipation de la firme sont exécutés au début de chaque période avant le début du cycle des décisions des agents proprement dit.

Le module de perception de l’entreprise exécute deux méthodes (cf. section 2.5.2.2 ) : — calculMargeDemande() : le calcul de la marge de demande

— miseAJourChercheursEmploi() : la mise à jour des chercheurs d’emploi connus

Le module d’estimation de l’entreprise exécute les trois méthodes suivantes (cf. section 2.5.2.3) :

— miseAJourDureesCDD() : la mise à jour des durées apprises des contrats indéterminés — miseAJourPostesVacants() : la mise à jour des durées moyennes des postes vacants — miseAJourProbaLic() : la mise à jour des probabilités et des coûts de licenciement

personnel

Le module d’anticipation de l’entreprise exécute les deux méthodes suivantes (cf. section 2.5.2.4) :

— estimeTendance() : l’estimation de la tendance et de l’aléa de la demande — anticipeDemande() : l’anticipation de la demande

Lors du cycle de la simulation et de la séquence de décisions des agents, le module de

décision de la firme exécute les méthodes suivantes durant la phase A du cycle :

— creationNouveauxPostes() : la création de nouveaux postes et de nouveaux contrats (cf. section 2.6.1)

— destructionPostesVacants() : la destruction de postes vacants (cf. section 2.6.2) — gestionSalarie() : la gestion des salariés (cf. section 2.6.3)

— planLic() : la mise en place d’un plan éventuel de licenciement (cf. section 2.6.4) Lors de la phase C du cycle de la simulation (cf. section 2.6.6), le module de décision exécute les méthodes suivantes :

— evalRecrut() : l’évaluation des recrutements et des promotions

— miseAJourNormeEmbauche() : la mise à jour de la norme d’embauche

3.1.5 Diagramme des interactions entre les agents

Lors des phases de recherche d’emploi et de recrutement (cf. sections 2.6.5.7 et 2.6.6), les agents "individu" et "entreprise privée" interagissent. Nous résumons sur la figure 3.3 le diagramme de ces interactions.

FIGURE 3.3 – Diagramme des interactions entre les entreprises privées et les individus lors de la recherche d’emploi

Certaines étapes de ce diagramme de séquence nécessitent des communications entre les agents. Ces communications sont modélisées avec des envois de message. Nous les identifions dans le tableau 3.1. Nous précisons à chaque fois l’expéditeur et le destinataire.

Communication Expéditeur Destinataire

2 : Publication d’une offre d’emploi Entreprise privée JobAds 3 : Chercher une offre d’emploi Chercheur d’emploi JobAds

3.1 : Envoyer la liste de postes vacants JobAds Chercheur d’emploi 6 : Candidater à une offre d’emploi Chercheur d’emploi Entreprise privée 9 : Recruter le meilleur candidat Entreprise privée Chercheur d’emploi 10 : Suppression de l’offre d’emploi Entreprise privée JobAds

TABLE3.1 – Les communications entre les agents dans WorkSim

3.1.6 La gestion du temps dans WorkSim

La gestion du temps se fait avec des ticks. Chaque tick correspond à un cycle complet de la simulation et représente une semaine dans la réalité. Un an dans la réalité correspond donc à une séquence de 52 ticks.

On rappelle qu’à chaque phase du cycle de la simulation les agents effectuent leurs actions dans un ordre retiré aléatoirement à chaque période (cf. section 2.6).

3.1.7 L’aléatoire dans le modèle

De façon à modéliser de la diversité et de la stochasticité dans les comportements des agents dans le déroulement de la simulation, nous introduisons de l’aléatoire. Le générateur de nombres aléatoires que nous utilisons est celui proposé par la classe Random de Java. Une instance de cette classe génère un flux de nombres pseudo-aléatoires. Cette classe utilise un noyau de 48 bits, qui est modifié par une formule linéairement congrue.

Deux simulations du modèle WorkSim lancées avec une graine aléatoire identique gé-nèrent exactement les mêmes séquences de comportements des agents dans le modèle. Ceci est très important pour le débogage du programme. En effet, lorsqu’une incohérence dans le déroulement de la simulation est détectée, il est possible de reproduire la séquence erronée en réutilisant la même graine aléatoire.

Par ailleurs, à cause de l’aléatoire présent dans le modèle, les sorties du modèles sont stochastiques. Donc les résultats peuvent varier d’une simulation à l’autre. Pour gommer ces effets stochastiques, nous verrons dans le chapitre suivant qu’il est nécessaire de lancer un grand nombre de simulations avec des graines aléatoires différentes (réplications de la simulation) et d’effectuer une moyenne des sorties obtenues.

Nous présentons dans le tableau 3.2 la liste des méthodes utilisant l’aléatoire dans le modèle lors du déroulement de la simulation.

Classe Méthode Description

WorkSim ordreAleatoireIndividus() Tirage aléatoire d’un ordre des agents "individu" pour effectuer leurs actions WorkSim ordreAleatoireFirmes()

Tirage aléatoire d’un ordre des agents "entreprise privée" pour effectuer leurs actions

Individu miseAJourFacteurForme() Mise à jour du facteur de condition de l’individu condi ,t(cf. équation 2.4) Firme miseAJourFacteurTendanceAlea()

Mise à jour tous les ans des facteurs de tendance et d’aléa de la part de marché de l’entreprise (cf. eq. 2.12 et 2.13). Firme miseAJourPartDeMarche() Mise à jour de la variable part de marché

de l’entreprise (cf. eq. 2.11).

Firme probaFauteGrave() Tirage aléatoire pour savoir si un individu a fait une faute grave (cf. section 2.6.3).

Firme ordreAleatoireEmploye()

Tirage d’un ordre aléatoire des employés de l’entreprise pour les évaluer lors d’un plan de licenciement économique (cf. section 2.6.4).

Firme initNouvelEmploi() Tirage aléatoire des caractéristiques d’un nouvel emploi à créer (cf. section 2.3.3.1). Job calculeIncertitudeProduction() Évaluation du niveau d’incertitude sur la

production de l’employé (cf. eq. 2.42).

JobAds rechercheEmploisVacants()

Méthode pour tirer aux hasard des offres d’emploi à communiquer aux chercheurs d’emploi.

JobAds rechercheEmploisPourvus()

Méthode pour tirer aux hasard des emplois pourvus à communiquer aux individus pour évaluer l’intérêt de commencer une recherche d’emplois

JobAds calculeNombreOffresChomeurs()

Calcul du nombre d’offres

communiquées à un chômeur (cf. section 2.6.5.7)

JobAds calculeNombreOffresPARAE()

Calcul du nombre d’offres

communiquées à un PARAE (cf. section 2.6.5.7)

ModuleDemographique creerNouvelIndividu()

Détermination des nouveaux attributs d’un individu qui entre dans la simulation (noyau de productivité, préférence de base pour le temps libre, etc...)

ModuleDemographique choixMenage() Ajout du nouvel agent dans un ménage tiré aléatoirement

TABLE3.2 – Les classes avec des méthodes qui font appel au générateur de nombres aléatoires