Vous êtes sur la page 1sur 7

Rapport AI

1. Formalisation du Problem

1.1 class Tache:


Une tache est caractérisé par son numéro qu’est unique , une liste de ses précédents
, son temps d’exécution, son temps de début initialisé à l’infinie .

1.2 Class Etat:

Un état est caractérisé par n_p le nombre de processeurs qu’est constant Processeur
une List des List chaque List élémentaire représente un processeur rempli avec les
taches(numéro) qui sont lancées sur ce processeur, un set done contient les
numéros des taches qui sont déjà exécuter, stills un set des numéros des taches qui
n’ont pas encore lancées.

fonction __eq__ : tester si deux états sont égales

fonction set_g : calculer le cout g ,le temps nécessaire pour passer de l’état initial au
état courent ,qui est le plus grand start time des taches dans tous les processeurs)
Fonction set_h : c’est l’heuristique qu’on a choisie qui permette d’estimer le cout ou
le temps nécessaire pour arriver à l’état final à partir de l’état curent il prend
comme paramètre la tâche qui a invoqué le passage à cet état :

S’il ne reste pas de tâche n’ont exécuté dans stills h sera le temps d’exécution de la
tâche qu’on a justement lancé qui a invoqué le passage a cette état

Si no si il y a des taches à exécuter dans stills h sera la somme de temps d’exécution


de tous les taches restantes plus le temps d’exécution de la tâche qui a invoquer le
passage à cette état sur le nombre de successeur (c’est le nombre des taches n’ont
exécuter et qui dépend de cette tache) ,l’intérêt de diviser par le nombre de
successeur et que c’est la tache a plusieurs taches qu’il l’attend pour s’exécuter c’est
mieux de la lancer en premier qui de lancer une tache sans successeur diviser par le
nombre de successeur va diminuer la valeur de h .cette heuristique est admissible
car il ne se estime pas le cout.
1.3 Fonction able_to_run :
Tester si une tache peut être lancé, si tous les taches qui la précède sont déjà
exécutés

1.4 Les actions


Une action c’est une le faite de lancer une tache i sur dans un processeur p la
fonction start_on_p :
La fonction permet de déterminer start time de la tache passer en paramètre : si le
temps de terminaison de ses taches précédentes
Plus le max des couts de communication avec ses taches précédentes qui sont
exécutées sur d’autres processeurs.
Si le temps de terminaison des de la dernière tache exécuter sur le processeur p et
supérieur au start time qu’on a calculé donc la tache va attendre que la tache se
termine et sont start time sera end time de la dernière tâche.
Faire modifier l état (supprimer la tache de stills et l’ajouter à done et au processeur
p ) et la retourner .

1.5 Fonction successeur :

étirer sur touts les taches qui n’ont pas encours exécutés dans l’état passer en
paramètres , on teste si la peut être lancé si oui on ajoute les n fils a liste de Child les
n fils sont les états résultat de lances la taches sur les n processeur qu’on a la taille
de Child ces n*t ,t nombre des taches qui peuvent être lancé
1.6 Fonction test_but :

Tester c’est l’état passer en paramètre c’est une état but c’est-à-dire que
touts les taches sont exécutés.

2.1 Algorithme A*
L’algorithme A* prend comme paramètres l état initial un dictionnaire des cout de
communication l’ensemble exploré initialement vide

1. générer touts les fils de l’état initial est l’ajouter au front


2. Front est vide return échec
3. Si non pour tout élément c d’index i dans front ajouter dans le dictionnaire
front_value la valeur c.f comme clé l’index de l’élément
4. Qu’il élément à exploré maintenant ? la fonction get_key_from_value va nous
donner la clé de la plus petite f, la clé si l’index de l’élément qu’a la plus petite f dans
front si la fonction return une liste des clés on va prendre le premier.
5. Tester si le fils sélectionné est un état but si oui le retourner.
6. Si non explorer l’état ou le fils sélectionné , générer tout ses fils , pour chaque fils si il
ne existe ni dans front ni exploré l’ajouter au front si non si il existe dans front faire
modifier f de l’élément dans f si la nouvelle f est plus petit que l’ancien .
7.

Vous aimerez peut-être aussi