Académique Documents
Professionnel Documents
Culture Documents
Mémoire présenté
à la Faculté des études supérieures de l’Université Laval
dans le cadre du programme de maı̂trise en génie mécanique
pour l’obtention du grade de maı̂tre ès sciences (M.Sc.)
2006
i
Avant-propos
J’aimerais exprimer ma gratitude envers les professeurs Guy Gendron et Louis Gos-
selin, respectivement mon directeur et codirecteur de recherche qui ont su me gui-
der d’une main de maı̂tre tout au long de ces travaux. Leur rigueur, leur soutien de
même que leurs nombreux conseils ont permis de rehausser grandement la qualité de
ce mémoire.
Je tiens à remercier la compagnie MAYA Heat Transfer Technologies Ltd pour avoir
proposé et financé un projet aussi intéressant.
D’autre part, j’aimerais remercier le groupe interdisciplinaire de recherche en élé-
ments finis (GIREF) et plus particulièrement Christian Tibirna pour son soutien in-
formatique. Je remercie aussi Boris Mayer-St-Onge, du laboratoire de robotique de
l’Université Laval, pour son expertise et son aide sur LATEX.
J’aimerais aussi remercier mes parents, Colette et Léonce, qui m’ont encouragé à
me surpasser et à toujours viser plus haut. Finalement, je ne serai jamais assez recon-
naissant envers Katia, ma fiancée, pour son amour infini, sa patience et son support.
ii
Table des matières
Résumé i
Avant-propos ii
Introduction 1
1 Revue de littérature 3
iii
3.4 Évaluation des individus . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.5 Classement des individus . . . . . . . . . . . . . . . . . . . . . . . . . . 34
3.6 Génération de l’ensemble de reproduction . . . . . . . . . . . . . . . . . 35
3.7 La reproduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
3.7.1 Chromosomes discrets . . . . . . . . . . . . . . . . . . . . . . . 38
3.7.2 Chromosomes continus . . . . . . . . . . . . . . . . . . . . . . . 40
3.8 La mutation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
3.8.1 Chromosomes discrets . . . . . . . . . . . . . . . . . . . . . . . 41
3.8.2 Chromosomes continus . . . . . . . . . . . . . . . . . . . . . . . 43
3.9 Épaisseur variable . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
3.10 Évaluation des enfants . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
3.11 Construction de la nouvelle génération . . . . . . . . . . . . . . . . . . 46
3.12 Convergence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
Conclusion 113
Bibliographie 116
iv
A.1.1 Fonction principale . . . . . . . . . . . . . . . . . . . . . . . . . 119
A.1.2 Codage des variables . . . . . . . . . . . . . . . . . . . . . . . . 121
A.1.3 Décodage des chromosomes . . . . . . . . . . . . . . . . . . . . 126
A.1.4 Définition du problème . . . . . . . . . . . . . . . . . . . . . . . 130
A.1.5 Construction du stratifié . . . . . . . . . . . . . . . . . . . . . . 132
A.1.6 La fonction d’évaluation . . . . . . . . . . . . . . . . . . . . . . 132
A.2 L’algorithme génétique . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
A.3 La population initiale . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
A.4 Opérateur de sélection . . . . . . . . . . . . . . . . . . . . . . . . . . . 149
A.4.1 Sélection selon le rang dans la population . . . . . . . . . . . . . 149
A.5 Les opérateurs de reproduction . . . . . . . . . . . . . . . . . . . . . . 150
A.5.1 Un point de croisement à partir du plus épais . . . . . . . . . . 150
A.5.2 Deux points de croisement à partir du plus épais . . . . . . . . . 152
A.5.3 Croisement arithmétique . . . . . . . . . . . . . . . . . . . . . . 153
A.6 Les opérateurs de mutation . . . . . . . . . . . . . . . . . . . . . . . . 154
A.6.1 Mutation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
A.6.2 Opérateur de permutation . . . . . . . . . . . . . . . . . . . . . 155
A.6.3 Mutation uniforme . . . . . . . . . . . . . . . . . . . . . . . . . 156
A.6.4 Mutation non-uniforme . . . . . . . . . . . . . . . . . . . . . . . 157
A.6.5 Mutation non-uniforme multiple . . . . . . . . . . . . . . . . . . 157
A.6.6 Opérateur d’addition de plis . . . . . . . . . . . . . . . . . . . . 158
A.6.7 Opérateur de soustraction de plis . . . . . . . . . . . . . . . . . 159
A.7 Les critères d’arrêt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
A.7.1 Générations maximales . . . . . . . . . . . . . . . . . . . . . . . 159
A.7.2 Sans amélioration . . . . . . . . . . . . . . . . . . . . . . . . . . 160
A.7.3 Optimum pratique . . . . . . . . . . . . . . . . . . . . . . . . . 160
A.8 Recherche dans le voisinage . . . . . . . . . . . . . . . . . . . . . . . . 160
A.8.1 Définition du voisinage . . . . . . . . . . . . . . . . . . . . . . . 162
v
Liste des tableaux
vi
4.2 Représentation génétique des variables . . . . . . . . . . . . . . . . . . 51
4.3 Paramètres de l’algorithme génétique . . . . . . . . . . . . . . . . . . . 52
4.4 Formulation des problèmes d’optimisation 1 et 2 . . . . . . . . . . . . . 53
4.5 Définition de l’épaisseur, des dimensions et du chargement . . . . . . . 53
4.6 Résultats du problème 1 . . . . . . . . . . . . . . . . . . . . . . . . . . 55
4.7 Design optimal . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
4.8 Définition de l’épaisseur, des dimensions et du chargement . . . . . . . 56
4.9 Résultats du problème 2 . . . . . . . . . . . . . . . . . . . . . . . . . . 57
4.10 Formulation du problème d’optimisation 3 . . . . . . . . . . . . . . . . 58
4.11 Définition de l’épaisseur, des dimensions et du chargement . . . . . . . 59
4.12 Résultats du problème d’optimisation 3 . . . . . . . . . . . . . . . . . . 59
4.13 Formulation du problème d’optimisation 4 . . . . . . . . . . . . . . . . 61
4.14 Définition de l’épaisseur, des dimensions et du chargement . . . . . . . 61
4.15 Résultats du problème d’optimisation 4 . . . . . . . . . . . . . . . . . . 62
4.16 Nombre de plis de chaque orientation pour les designs quasi optimaux . 63
4.17 Résumé de la performance de l’algorithme génétique . . . . . . . . . . . 63
4.18 Formulation du problème d’optimisation avec des variables continues . 64
4.19 Propriétés du matériau . . . . . . . . . . . . . . . . . . . . . . . . . . . 64
4.20 Paramètres de l’algorithme génétique . . . . . . . . . . . . . . . . . . . 65
4.21 Définition des probabilités des opérateurs de l’algorithme génétique . . 66
4.22 Résultats du problème d’optimisation avec des variables continues . . . 67
vii
5.15 Formulation générale du problème à objectifs multiples (vii) . . . . . . 91
5.16 Géométrie et chargement . . . . . . . . . . . . . . . . . . . . . . . . . . 91
5.17 Codage et décodage des deux chromosomes (problème (vii)) . . . . . . 92
5.18 Paramètres de l’algorithme génétique . . . . . . . . . . . . . . . . . . . 92
5.19 Résultats du problème (vi) . . . . . . . . . . . . . . . . . . . . . . . . . 93
5.20 Résultats du problème (vii) . . . . . . . . . . . . . . . . . . . . . . . . 95
viii
Liste des figures
ix
Liste des symboles
cj Chromosome j de l’individu x
E Ensemble d’enfants
E1 Module longitudinal
E2 Module transverse
x
ei Enfant i
H Épaisseur totale
xi
Ny Chargement appliqué à l’axe neutre de la plaque et perpendi-
culaire au côté a (N/m)
pi Parent i
R Ensemble de reproduction
xii
v◦ Déplacement du plan moyen du point (x, y) dans la direction
x
x Individu de la population P
y Voisin de x
Lettres grecques
β Facteur de bonification
xiii
ǫ1C Déformation ultime admissible en compression dans la direc-
tion des fibres
ρ Densité du matériau
xiv
σ2 Contrainte normale dans la direction 2
xv
Introduction
L’utilisation des matériaux composites est très répandue dans divers domaines tels
l’aérospatiale, l’aéronautique, l’industrie automobile, nautique de même que dans l’in-
dustrie sportive. Ces matériaux sont prisés en raison de leur grand rapport rigidité vs
poids et résistance vs poids de même que pour certaines de leurs propriétés mécaniques
comme la résistance à la corrosion par exemple. De plus, l’utilisation des matériaux
composites peut être avantageuse par rapport aux matériaux traditionnels, car elle
permet la conception de structures aux propriétés globales qui répondent mieux aux
besoins particuliers d’une situation.
1
2
Le but de ces travaux est de concevoir un logiciel fiable et pratique pouvant être
utilisé pour la résolution d’une gamme de problèmes variée. La fiabilité du logiciel est
déterminée en fonction de sa capacité à obtenir des solutions optimales le plus souvent
possible. Son caractère pratique est, quant à lui, déterminé par sa capacité à proposer
une famille de designs quasi optimaux plutôt qu’une seule solution. L’idée ici est de
permettre au concepteur de choisir la solution qui lui plaı̂t le mieux parmi un ensemble
de solutions quasi optimales. La démarche utilisée est de tester le logiciel développé
sur une série de problèmes variés appliqués à l’optimisation de structures composites.
La méthode d’optimisation préconisée dans ces travaux est basée sur les algorithmes
génétiques.
Le premier chapitre propose une revue de littérature sur les méthodes d’optimisa-
tion qui ont été appliquées aux composites tandis que le second dérive les équations de
la mécanique des matériaux composites en se basant sur la théorie classique des stra-
tifiés. Le troisième chapitre explique en profondeur le fonctionnement de l’algorithme
génétique utilisé. Ensuite, les chapitres quatre et cinq présentent une série de problèmes
d’optimisation pour lesquels l’algorithme génétique est utilisé afin de générer des solu-
tions optimales. Les résultats du chapitre quatre sont comparés aux résultats donnés
dans la littérature. Pour ces problèmes, le nombre de plis de la structure, l’épaisseur et
le matériau de ceux-ci sont fixes. Les variables de design sont alors les orientations des
plis, qui appartiennent, en fonction du problème, soit à un domaine de valeurs discrètes
ou à un domaine continu. Pour les exemples du chapitre cinq, de nouvelles variables
de design sont introduites qui s’ajoutent alors à l’orientation des plis. Ainsi, le nombre
de plis de la structure et le matériau des plis deviennent des variables aux problèmes.
À ce moment, les orientations et les matériaux des plis sont donnés à partir d’une
liste de valeurs discrètes. Une série de problèmes d’optimisation est alors étudiée afin
d’évaluer les performances de la méthode utilisée. Finalement, le chapitre six présente
un algorithme génétique hybride qui est testé avec les mêmes problèmes du chapitre
cinq. L’hybridation se fait avec une heuristique de recherche locale qui est incluse à
même la structure de l’algorithme génétique. Une définition particulière du voisinage
y est définie. La performance de ce nouveau programme est alors comparée a celle du
précédent.
Chapitre 1
Revue de littérature
L’ingénieur qui utilise les matériaux composites fait face à un problème de concep-
tion différent que s’il utilisait seulement des matériaux isotropes tels l’acier ou l’alu-
minium. En effet, contrairement aux matériaux standards dont les propriétés sont
constantes, les propriétés globales d’une structure stratifiée ne sont définies que lorsque
la structure elle-même l’est. En d’autres mots, il faut définir les variables d’une struc-
ture stratifiée avant de pouvoir calculer ses propriétés globales. Les variables d’une
structure stratifiée sont l’épaisseur, le matériau et l’orientation de chaque pli de même
que le nombre de plis et la séquence d’empilement de ceux-ci. Donc, pour obtenir une
structure aux propriétés permettant de satisfaire les exigences d’un problème en par-
ticulier, il faut fixer toutes ces variables lors de la conception. C’est cette étape qui
rend le processus de conception plus complexe. En effet, comme le nombre de variables
est souvent assez élevé et que ces variables influencent directement le comportement
global de la structure stratifiée, il faut que les choix posés soient faits de façon ju-
dicieuse. C’est pourquoi des techniques d’optimisation deviennent très utiles afin de
3
4
Par exemple, le flambement est souvent un élément critique du design car les struc-
tures faites de matériaux composites sont souvent minces et par conséquent, sujette à
cette instabilité. C’est pourquoi on considère fréquemment cette caractéristique lors de
la définition du problème d’optimisation. Elle est soit incluse dans l’objectif du problème
(LeRiche et Haftka [1]) ou dans les contraintes. C’est la même situation pour les charges
critiques de rupture qu’il est pertinent de calculer afin de vérifier s’il y a rupture ou de
savoir quand la rupture se produira. Par exemple, pour certains problèmes, il peut être
désiré de maximiser le facteur de rupture en tant qu’objectif au problème ou plutôt en
tant que contrainte. On peut l’inclure au problème en définissant un seuil à satisfaire.
Ces critères de ruptures peuvent être calculés de façons variées. Tout dépendant de
la méthode préconisée, le critère de rupture peut être basé sur les déformations maxi-
males, les contraintes maximales, le critère de Tsai-Hill, de Tsai-Wu, de Hoffman, etc.
(Berthelot [2]).
composites qui intervient ici est la possibilité de construire une structure composée de
différents matériaux. Dans la pratique, le matériau le plus cher est souvent plus perfor-
mant en ce qui a trait au rapport rigidité vs poids tandis que le moins cher est souvent
moins performant. Dans ce cas, il peut être souhaitable de combiner les propriétés
du matériau le plus performant avec celles du matériau le moins performant afin de
permettre la diminution du coût global de la structure. Certains auteurs traitent de la
minimisation du poids et du coût de façon simultanée en formulant le problème avec des
objectifs multiples. Une façon de combiner la minimisation du coût (C) et du poids (W )
en tant qu’objectifs multiples est d’utiliser une fonction pondérée (F = αW + (1 −α)C)
et d’optimiser cette fonction selon différentes valeurs de pondération α variant de 0 à
1. Ainsi, une série de solutions optimales est obtenue et une décision peut alors être
prise selon l’importance que l’on accorde à chaque critère (selon la valeur de α). Par
exemple, Grosset et coll. [3], procèdent de cette façon en incluant une contrainte sur
la fréquence naturelle. Rao et Arvind [4] traitent le même genre de problème mais en
ajoutant une contrainte supplémentaire sur le facteur de flambement. Pour ce qui est
de Soremekun [5], il minimise aussi le poids et le coût en tant qu’objectifs multiples
avec l’aide de la même fonction pondérée, mais il inclut des contraintes sur les charges
de rupture par flambement et par déformation maximales.
Dans un autre ordre d’idées, Le Riche et Gaudin [6] résolvent un problème plus
général encore qui prend en compte des paramètres de design typiques rencontrés
spécifiquement dans le domaine de l’aérospatiale. Ils doivent optimiser la structure
en favorisant la recherche de solutions de grande rigidité présentant de très faibles co-
efficients d’expansion thermique et hydrique afin de garantir la stabilité dimensionnelle
de la pièce.
Luersen et coll. [7], quant à eux, maximisent le module de rigidité longitudinal ap-
parent (Ex ) avec des contraintes sur le module de cisaillement (Gxy ) et sur le coefficient
de Poisson (νxy ). Les variables de design sont les orientations des plis qui appartiennent
au domaine continu.
la disponibilité des matériaux pour l’épaisseur. Différentes techniques ont été utilisées
afin de résoudre ce type de problème. Par exemple, Nagendra et coll. [8] utilisent la
méthode des éléments finis et une technique basée sur les dérivées afin de minimiser le
poids d’une plaque stratifiée renforcée en forme de T inversé (« ⊥ ») avec des contraintes
sur le flambement et sur les déformations maximales. Les variables de design sont alors
les épaisseurs respectives de chacune des orientations, pour un empilement donné, et la
longueur du renfort. Toutefois, il faut une intervention extérieure afin de faire respecter
le caractère discret de l’épaisseur des plis et la contrainte sur le nombre maximal de plis
contigus de même orientation. Ainsi, les épaisseurs optimisées doivent être arrondies
manuellement à des multiples de l’épaisseur nominale afin de déterminer le design final.
Certains auteurs ont plutôt utilisé la programmation entière afin de traiter le ca-
ractère discret des variables directement dans la définition du problème. Ils utilisent
alors la méthode du « Branch & Bound » afin de résoudre le problème. Par exemple,
Haftka et Walsh [9] utilisent cette méthode pour optimiser la séquence d’empilement
d’une structure stratifiée composite pour maximiser le facteur de flambement et aussi
pour minimiser le poids sous une contrainte de flambement. Nagendra et coll. [10],
quant à eux, traitent ce dernier problème avec une contrainte supplémentaire sur les
déformations. Comme cette nouvelle contrainte est non linéaire par rapport aux va-
riables de design, ils doivent procéder à une approximation linéaire de la contrainte
afin de pouvoir résoudre le problème par cette méthode.
Toutefois, c’est l’algorithme génétique (AG) qui a été le plus largement utilisé
par les chercheurs oeuvrant dans le domaine des matériaux composites (Le Riche
et Haftka [1] [13], Gürdal et coll. [14], Soremekun et coll. [15], et plusieurs autres).
L’avantage de cette méthode par rapport à certaines des méthodes précédentes est
qu’elle ne requiert aucune dérivée et aucune linéarité de la fonction objectif ou des
contraintes pour orienter la recherche. Elle s’avère donc efficace pour l’optimisation de
7
problèmes avec des variables discrètes. Par conséquent, elle performe bien lorsqu’uti-
lisée pour la résolution de problèmes d’optimisation appliqués au domaine des structures
stratifiées composites. C’est entre autres pour ces raisons qu’elle s’est démarquée ces
dernières années par rapport aux autres méthodes et que beaucoup de chercheurs se
sont concentrés sur cette heuristique.
Certains auteurs ont orientés leurs travaux à la création d’opérateurs propres aux
problèmes d’optimisation de structures stratifiées. C’est le cas de Le Riche et Haftka [13]
par exemple. Ces auteurs ont, entre autre, étudié l’efficacité de sept différents opérateurs
de croisement pour des parents d’épaisseurs différentes. Ce type d’opérateur est utilisé
pour des problèmes où l’épaisseur des stratifiés est variable. Leurs travaux concluent
sur l’efficacité de l’opérateur à un point de croisement à partir du parent le plus épais
(X1P-épais), et ce, pour des problèmes variés. Toutefois, l’opérateur à deux points de
croisement à partir du parent le plus épais (X2P-épais) est aussi considéré comme
efficace lorsque les stratifiés ont des épaisseurs importantes.
Plusieurs travaux ont été faits pour améliorer les performances des algorithmes
génétiques. Gantovnik et coll. [16] utilisent une mémoire sous forme d’arbre binaire
pour stocker les solutions déjà évaluées. Ensuite, ils ajoutent à cet arbre l’informa-
tion pour construire des fonctions d’interpolations pour approximer les variables conti-
nues. Finalement, ils utilisent ces donnés pour interpoler les valeurs lors d’une étape
d’amélioration locale. Cette approche est utilisée pour optimiser le design d’une struc-
ture stratifiée sandwich. L’objectif du problème est de minimser le poids du stratifié
sous des contraintes de rigidité et de flambement. Le problème comporte des variables
de design mixtes, c’est-à-dire qu’il traite à la fois des variables discrètes et continues.
Les variables discrètes sont le nombre de plis de même que la séquence d’empilement
des ceux-ci. La variable continue est l’épaisseur du coeur du sandwich. Leurs travaux
démontrent que par cette approche, le coût de calcul diminue jusqu’à 60%.
Lin et Lee [17] quant à eux, proposent l’utilisation d’une heuristique d’amélioration
locale afin de rendre l’algorithme génétique plus performant. Contrairement à Gan-
tovnik et coll. [16], l’amélioration locale se fait avec des variables qui sont discrètes
et non continues. Le problème qu’ils résolvent est la minimisation du déplacement de
l’extrémité libre d’un stratifié sandwich, encastré à l’autre extrémité, qui est soumis à un
effort de flexion. Les variables de design sont le nombre de plis de même que la séquence
d’empilement. Ces variables appartiennent à un domaine discret tandis que l’épaisseur
8
du coeur est constante. Ils utilisent un modèle par éléments finis afin de calculer le
déplacement à l’extrémité libre. Toutefois, ils font appel à une fonction de régression
des moindres carrés afin d’approximer l’objectif des individus lors de l’amélioration
locale. Ils déterminent les coefficients de cette fonction avec l’aide des valeurs des in-
dividus déjà évalués gardés en mémoire. Pour l’amélioration locale, ils définissent un
voisinage de 102 individus qui sont évalués afin de déterminer la présence d’un autre
plus performant. Lorsque c’est le cas, cet individu amélioré remplace le moins perfor-
mant dans la population. Ils appliquent cette étape d’amélioration à une fréquence
donnée et non pas à toutes les générations. Ces modifications ont permis de diminuer
de moitié le nombre de générations nécessaires pour atteindre la convergence.
9
10
z
znp
pli np
znp −1 ...
zk H/2
zk−1
pli k hk
..
x
y ...
z2 H/2
z1
pli 2
pli 1 h1
z0
2 1
+θk
x
z
Tout d’abord, une structure stratifiée, d’épaisseur H, est constituée d’une certaine
quantité np de plis qui sont empilés les uns sur les autres tels que montrés à la figure 2.1.
Chaque couche est définie par une épaisseur (hk ), une orientation (θk ) et un matériau
(matk ). Le repère global de la structure est défini par les axes x, y et z tel qu’indiqué
sur la figure. L’axe x étant orienté sur la longueur de la structure, l’axe y sur sa largeur
et finalement l’axe z à travers son épaisseur. L’origine de l’axe z est situé au plan moyen
de la structure. Le premier pli (pli 1) est situé à l’extrémité inférieure de la structure
(à z = −H/2) tandis que le dernier pli (pli np ) est celui situé à l’extrémité supérieure
(à z = H/2).
Le repère local d’un pli est défini par les axes 1 et 2 qui lui sont propres et qui sont
orientés respectivement de façon parallèle et perpendiculaire à la direction des fibres.
En fait, (1,2) est un repère dans lequel on a mesuré les propriétés. Tel que montré à la
11
z
0◦
−45◦
+45◦ x
0◦
−45◦
+45◦
figure 2.1, l’orientation θk du pli k est définie par l’angle que fait son repère local (1,2)
par rapport au repère global (x, y) de la structure. Les propriétés globales du stratifié
dépendent des propriétés du matériau de chaque pli, de son épaisseur et de l’orientation
de celui-ci. Donc, c’est en variant l’orientation des plis et en choisissant les matériaux
appropriés que l’on peut concevoir une structure stratifiée aux propriétés désirées.
+45◦
−45◦
0◦ x
0◦
−45◦
+45◦
∂w ◦
u(x, y, z) = u◦ (x, y) − z
∂x
13
∂w ◦
v(x, y, z) = v ◦ (x, y) − z (2.1)
∂y
w(x, y, z) = w ◦ (x, y)
∂u ∂u◦ ∂ 2 w◦
ǫx (x, y, z) = = −z
∂x ∂x ∂x2
∂v ∂v ◦ ∂ 2 w◦
ǫy (x, y, z) = = −z (2.2)
∂y ∂y ∂y 2
2 ◦
∂v ◦ ∂u◦ ∂ 2 w◦
∂v ∂u ∂ w
γxy (x, y, z) = + = + −z +
∂x ∂y ∂x ∂y ∂xy ∂yx
∂ 2 w◦ ◦ ∂ 2 w◦ ◦ ∂ 2 w◦
κ◦x = − κy = − κxy = −2 (2.4)
∂x2 ∂y 2 ∂x∂y
14
uA
∂w ◦
∂x
A
w◦ x u◦ < 0
z A Plan moyen
x
vA
∂w ◦
∂y
A
w◦ y v◦ < 0
z A Plan moyen
y
Les relations entre les déformations (ǫ1 , ǫ2 et γ12 ) et les contraintes (σ1 , σ2 et τ12 ),
dans le repère local (1,2), sont données par l’équation (2.5). On rappelle que chaque
pli possède son repère local dans lequel les propriétés mécaniques ont été mesurées. Les
composantes de la matrice Q sont données par les équations (2.6) à (2.9).
σ 1
Q 11 Q 12 0 ǫ1
σ2 = Q12 Q22 0 ǫ2 (2.5)
τ12 0 0 Q66 γ12
E1
Q11 = (2.6)
1 − ν12 ν21
ν12 E2 ν21 E1
Q12 = = (2.7)
1 − ν12 ν21 1 − ν12 ν21
E2
Q22 = (2.8)
1 − ν12 ν21
Q66 = G12 (2.9)
Les relations entre les déformations et les contraintes dans le repère global (x, y)
sont, quant à elles, définies par l’équation (2.10). Les éléments de la matrice Q sont
calculés à partir de l’équation (2.11). Celle-ci dépend de la matrice Q, calculée précé-
demment, et de la matrice de changement de repère T (voir équation (2.12)). De plus,
on relie les déformations dans le repère global (ǫx , ǫy et γxy ) aux déformations dans le
repère local (ǫ1 , ǫ2 et γ12 ) de chaque couche par l’équation (2.13).
σx
Q11 Q12 Q16 ǫx
σy = Q12 Q22 Q26 ǫy (2.10)
τxy Q16 Q26 Q66 γxy
cos2 θ sin2 θ2 sin θ cos θ
[T ] = sin2 θ cos2 θ
−2 sin θ cos θ (2.12)
ǫ1
ǫx
ǫ2 = [T ] ǫy (2.13)
1
1
γ γ
2 12 2 xy
Les équations (2.14) et (2.15) définissent la relation entres les forces et les déforma-
tions (ǫ◦x , ǫ◦y et γxy
◦
) et entre les moments et les courbures (κ◦x , κ◦y et κ◦xy ). L’exposant
0 signifie que les déformations et les courbures sont définies au plan moyen (z = 0).
Les composantes Aij de la matrice [A] sont données par l’équation (2.16) tandis que
les composantes Bij de la matrice [B] sont données par l’équation (2.17) et finalement
les composantes Dij de la matrice [D] par l’équation (2.18). La matrice [A] est appelée
matrice de rigidité en membrane, la matrice [D] est appelée matrice de rigidité en
flexion et la matrice [B] est appelée matrice de couplage membrane-flexion.
◦ ◦
Nx
A11 A12 A16 ǫx
B11 B12 B16 κx
Ny = A12 A22 A26 ǫ◦y + B12 B22 B26 κ◦y (2.14)
◦
◦
Nxy A16 A26 A66 γxy B16 B26 B66 κxy
◦ ◦
Mx
B11 B12 B16 ǫx
D11 D12 D16 κx
My = B12 B22 B26 ǫ◦y + D12 D22 D26 κ◦y (2.15)
◦
◦
Mxy B16 B26 B66 γxy D16 D26 D66 κxy
np
X
Aij = (Qij )k (zk − zk−1 ) (2.16)
k=1
17
np
X (zk2 − zk−1
2
)
Bij = (Qij )k (2.17)
k=1
2
np
X (zk3 − zk−1
3
)
Dij = (Qij )k (2.18)
k=1
3
◦
Nx
A11 A12 0 ǫx
Ny = A12 A22 0 ǫ◦y (2.19)
◦
Nxy 0 0 A66 γxy
◦
Mx
D11 D12 D16 κx
My = D12 D22 D26 κ◦y (2.20)
◦
Mxy D16 D26 D66 κxy
Les termes des matrices [A], [B] et [D] sont souvent groupées à l’intérieur d’une seule
matrice [ABD] aux dimensions 6 × 6. En calculant l’inverse de [ABD], on peut relier
18
les déformations du plan moyen d’un stratifié en fonction des forces et des moments
appliqués sur ce plan moyen. Cette relation est donnée à l’équation (2.21).
ǫ◦x
Nx
ǫ◦y
Ny
γ◦
N
xy
xy
◦
= [ABD]−1 (2.21)
κ x
Mx
κ◦y
My
κ◦
M
xy xy
Après avoir déterminé les déformations du plan moyen, on peut calculer les défor-
mations ǫx , ǫy et γxy d’un pli k en fonction de la position z par rapport au plan moyen
de ce pli avec l’équation (2.22).
(k)
◦ ◦
ǫx
ǫx
κx
ǫy = ǫ◦y +z κ◦y (2.22)
◦
◦
γxy γxy κxy
Ces déformations sont ensuite multipliées par la matrice [Q] de ce pli afin d’obtenir
les contraintes dans le système de coordonnées (x, y). De plus, un changement de repère
peut être effectué sur ces déformations afin de passer du repère (x, y) au repère (1, 2).
Finalement, les contraintes dans le système de coordonnées (1, 2) peuvent être calculées
en multipliant les déformations par la matrice [Q] de ce pli.
Plusieurs critères ont été proposés afin de prédire la rupture d’un stratifié. Nous
présentons ici le critère de déformation maximale souvent utilisé en pratique. Selon
ce critère, la rupture survient lorsqu’une des trois équations (2.23) n’est pas vérifiée.
Lors de la rupture, le stratifié subit des déformations dans le repère local (ǫ1 , ǫ2 et γ12 )
dépassant une des limites ultimes admises en compression (ǫ1C , ǫ2C ), en traction (ǫ1T ,
ǫ2T ) ou en cisaillement (γ12F , −γ12F ). Le facteur de rupture par déformation maximale
λǫ est défini par l’équation (2.24). Dans cette équation, on attribue à ǫ1F la valeur de la
limite ultime de déformation en traction dans la direction 1 (ǫ1T ) si ǫ1 est positif et la
limite ultime de déformation en compression (ǫ1C ) si ǫ1 est négatif. Le même principe
est appliqué à ǫ2F et à γ12F . C’est-à-dire que ǫ2F prend la valeur de la limite ultime
19
ǫ1F ǫ2F γ12F
λǫ = min min , , i pour i = 1, . . . , np (2.24)
ǫi1 ǫi2 γ12
L’équation (2.25) donne le facteur de flambement (λf (m, n)) d’une plaque rectan-
gulaire équilibrée et symétrique de dimensions a × b, qui est simplement supportée et
soumise à des chargements Nx et Ny en compression telle qu’indiquée à la figure 2.6.
Les charges Nx et Ny sont alors appliquées sur le plan moyen des côtés b et a de la
structure. La plaque stratifiée flambe alors en m et n demi sinus dans les directions x
et y respectivement lorsque les charges atteignent λf Nx et λf Ny . La plus petite valeur
de λf parmi toutes les combinaisons possibles de m et de n détermine le facteur de
flambement critique λf c (équation (2.26)). Le facteur de flambement critique est utilisé
afin de déterminer les charges de flambement critiques Nxf et Nyf (voir équation (2.27))
qui causeront le flambement.
2
λf (m, n) D11 ( ma )4 + 2(D12 + 2D66 )( ma )2 nb + D22 ( nb )4
= (2.25)
π2 Nx ( m
a
)2 + Ny ( nb )2
20
z
y
Ny
x
Nx Nx
b
Ny
" # " #
Nxf Nx
= λf c (2.27)
Nyf Ny
Pour cette même plaque (voir figure 2.6), l’équation (2.28) donne les fréquences de
vibrations (f (m, n)) de celle-ci. Les valeurs de m et de n déterminent les modes de
vibration de la plaque. La plus petite valeur de f (m, n) définit la première fréquence
naturelle de la structure (voir équation (2.29)). Cette fréquence dépend alors des di-
mensions a et b de la plaque, de son épaisseur totale H (définie par la somme des
épaisseurs hk des np plis, voir équation (2.30)), de la matrice D et de la densité ρ.
Lorsqu’une plaque est constituée de différents matériaux, ρ est déterminé en calculant
le rapport de la somme des densités de chaque pli et du nombre total np de plis (voir
équation (2.31)).
r
π m 4 m n n
f (m, n) = √ D11 ( ) + 2(D12 + 2D66 )( )2 ( )2 + D22 ( )4 (2.28)
2 ρH a a b b
np
X
H= hk (2.30)
k=1
P np
k=1 ρk
ρ= (2.31)
np
De plus, pour une structure stratifiée symétrique et équilibrée, on peut définir des
propriétés équivalentes de la structure à partir des coefficients de la matrice de rigi-
dité en membrane A (équation (2.16)). Les équations (2.32) et (2.33) définissent les
modules d’Young apparents de la structure dans les directions x et y respectivement.
L’équation (2.34) définit le module de cisaillement apparent et l’équation (2.35) le co-
efficient de Poisson apparent de la structure.
A66
Gxy ≡ (2.34)
H
A12
νxy ≡ (2.35)
A22
Ce court exposé de la théorie classique des stratifiés avait pour but de permettre
au lecteur non-initié de bien comprendre la nomenclature et les quantités utilisées dans
les exemples résolus aux chapitres 4 à 6 de ce document.
Chapitre 3
La figure 3.1 illustre les étapes définissant l’algorithme génétique. Tout d’abord, un
ensemble de solutions ou d’individus est généré afin de former la population initiale
(figure 3.1 : Génération de la population initiale). Par la suite, les individus de la
22
23
population sont évalués (figure 3.1 : Évaluation des individus) et sont classés dans
la population (figure 3.1 : Classement des individus). Ensuite, un sous-ensemble de
parents est créé de façon à favoriser les meilleures solutions (figure 3.1 : Génération de
l’ensemble de reproduction). À partir de cet ensemble, un groupe d’enfants est généré
par des mécanismes de reproduction (voir figure 3.1 : Reproduction) et des modifications
aléatoires sont ensuite appliquées à ces enfants (voir figure 3.1 : Mutation). Lorsque
l’épaisseur des stratifiés est une variable au problème, les opérateurs d’addition et de
soustraction de plis entrent en jeu (figure 3.1 : Addition de plis et Soustraction de plis).
Après avoir créé et modifié l’ensemble d’enfants, la performance de ceux-ci est évaluée
(figure 3.1 : Évaluation des enfants) afin de comparer leur degré de performance par
rapport au reste de la population et pour ainsi guider la construction de la nouvelle
génération (figure 3.1 : Construction de la nouvelle génération). Ensuite, le processus se
répète à partir de cette nouvelle génération jusqu’à ce que soit atteint le critère d’arrêt
défini au départ (figure 3.1 : Convergence ? ).
24
Représentation Génération de la
génétique des population
stratifiés initiale
Évaluation
des individus
Génération de Classement
Reproduction l’ensemble de des individus
reproduction
Mutation
Addition Non
de plis Convergence ?
Oui
Soustraction Fin
de plis
leurs bons schèmes à leur progéniture. Lors de la reproduction, il est possible que les en-
fants combinent les schèmes performants et distincts de chacun des parents pour former
un nouveau schème encore plus performant. Ce nouveau schème aura alors tendance à
être de plus en plus présent dans la population, compte tenu de sa performance, ce qui
aura pour effet d’augmenter la qualité des individus.
Une des caractéristiques des algorithmes génétiques est qu’ils peuvent fonctionner
à partir d’un codage des paramètres d’un problème et non pas seulement avec les
paramètres eux-mêmes. Le codage des stratifiés est fait en se basant sur les concepts
de la génétique (figure 3.2). Le but est alors de représenter tous les stratifiés de façon
similaire à ce qui est fait dans la nature. Pour y arriver, l’algorithme génétique considère
une population de N individus qu’elle fait évoluer par des mécanismes de reproduction
et de mutation qui seront détaillés dans les sections subséquentes de ce chapitre. Un
individu est équivalent à un stratifié et conséquemment, la population fait référence
à un groupe de stratifiés. Un individu peut alors être représenté par un ou plusieurs
chromosomes (figure 3.2). Chaque chromosome contient une chaı̂ne de gènes de même
type représentant les variables codées du problème. Le nombre de chromosomes (nc )
de même que le nombre de gènes (ng ) de chaque chromosome i nécessaires pour la
représentation d’un individu dépendent spécifiquement du problème étudié et de la
méthode utilisée.
Pour des problèmes d’optimisation appliqués aux structures stratifiées par exemple,
on peut décider de représenter des solutions par deux chromosomes (voir tableau 3.2).
Dans cet exemple, le premier chromosome contient les gènes définissant l’orientation de
chaque pli k tandis que le second contient les gènes définissant le matériau de ces plis.
Par conséquent, le stratifié représenté par ce codage en est un de trois plis aux orienta-
tions et matériaux définis par les gènes des chromosomes respectifs (voir tableau 3.3).
Lorsqu’un individu est composé d’un seul chromosome, on considère que l’individu est
en fait composé de ng gènes.
Les caractéristiques que ces gènes peuvent prendre sont définies par l’alphabet des
gènes. En fait, l’alphabet des gènes est l’ensemble des valeurs (Ω′i que peuvent prendre
27
Chromosomes
c1
P
individu(i)
...
x1
...
xi xi cj
...
...
xN
cn c
Gènes
g1
Ω′ = [0, 1]
...
cj gk Alphabet Ω′ ∈ N
...
Ω′ ∈ R
g ng
...
les allèles des gènes pour coder le domaine (Ωi ) des variables que représentent ces gènes.
Originalement, les gènes étaient représentés par un alphabet binaire (Ω′ = {0, 1}). Plus
tard, d’autres alphabets ont été utilisés pour représenter un domaine Ω quelconque.
Par exemple, si Ω est un domaine de n valeurs discrètes (Ω ∈ N), on peut utiliser un
alphabet de n entiers (Ω′ = {1, 2, . . . , n}) et si Ω est un domaine continu, on peut uti-
liser directement un alphabet de valeurs continues (Ω′ ∈ R). De plus, Michalewicz [23]
démontre que la représentation de variables, appartenant à un domaine continu, est plus
efficacement faite en utilisant un alphabet continu comparativement à un alphabet bi-
naire. Une des raisons est que la représentation binaire discrétise le domaine continu
en intervalles égaux. Ce sont alors ces intervalles qui définissent la précision des va-
riables. Ainsi, pour un domaine donné, il faut augmenter le nombre de bits nécessaires
à la représentation de chaque gène afin d’augmenter la précision. Par conséquent, la
taille des chaı̂nes définissant les individus devient rapidement élevée. Cela a pour effet
d’alourdir l’algorithme comparativement à la représentation par un alphabet de va-
leurs continues qui ne nécessite qu’un seul gène par variable. C’est une des raisons pour
lesquelles on utilise un alphabet continu pour représenter des variables du domaine
continu dans ces travaux.
liser un alphabet de quatre allèles 1, 2, 3 et 4 (voir tableau 3.4). Le tableau 3.5 donne
un exemple du codage et du décodage d’un individu selon cette représentation.
Domaine Variables/allèles
Ωi (décodé) 0 +45 −45 90
Ω′i (codé) 1 2 3 4
Tab. 3.5 – Exemple d’un stratifié de 12 plis codé à l’aide d’un seul chromosome
Représentation Gènes/Variables
Codée [2 1 3 1 4 4 2 3 2 3 1 1]
Décodée [+45, 0, −45, 0, 902 , ±452 , 02 ]T
De plus, si l’optimisation s’applique à des stratifiés où l’épaisseur est une variable
au problème, on inclut un certain nombre de plis vides (npv ), déterminé aléatoirement,
que l’on insère dans les premiers gènes des chromosomes (extrémité gauche). Pour un
individu donné, il faut inclure le même nombre d’allèle « 0 » à tous les chromosomes. Par
exemple, si l’on représente les individus sur deux chromosomes, le premier représentant
les orientations et le second le matériau de chaque pli, il faut que le nombre de gènes
représentant des plis vides soit le même pour les deux chromosomes. Le tableau 3.6
donne un exemple d’une population initiale (P0 ) de cinq individus (N = 5) représentés
30
par deux chromosomes. Dans ce tableau, les domaines des gènes du chromosome 1 et
celui des gènes du chromosome 2 sont respectivement Ω′1 = {1, 2, 3} et Ω′2 = {1, 2}. Par
exemple, le premier individu compte deux plis vides (npv = 2) et le second en compte
quatre (npv = 4). Ces deux nombres ont été déterminés aléatoirement entre les valeurs 0
et ng − 1 afin d’empêcher la génération d’un individu constitué seulement de plis vides.
Par conséquent, les deux chromosomes de ces deux individus comptent 2 et 4 allèles
« 0 » respectivement (voir tableau 3.6 : individus 1 et 2). Le premier individu est alors
plus épais que le second. Pour des problèmes où le nombre de plis est déterminé, npv
est nul et aucun allèle représentant des plis vides n’est inséré dans la population. Dans
ce cas, chaque gène prend une valeur choisie aléatoirement à l’intérieur du domaine.
L’étape suivante est l’évaluation de ces individus afin de déterminer les valeurs de leur
performance F (x) respective.
Une des caractéristiques des algorithmes génétiques est que la recherche se base
seulement sur la valeur de performance F (x) des individus et aucunement sur les
dérivées de la fonction objectif f (x) et des contraintes gi (x). C’est cette particularité
qui rend cette méthode pratique et efficace pour la résolution de problèmes avec des
variables discrètes. De plus, l’algorithme génétique n’a pas besoin de connaı̂tre la nature
du problème pour être fonctionnel. Tout ce qu’il voit et tout ce qu’il a besoin de voir
est un ensemble de solutions auxquelles est associée une valeur numérique F (x) comme
présenté au tableau 3.6. Cette valeur numérique est l’outil qui permet de différencier
les solutions entre elles. Celles ayant un plus grand F (x) étant meilleures que celles
31
ayant un plus faible F (x). De façon générale, les algorithmes génétiques maximisent la
valeur de performance F (x) des individus de la population.
Pour attribuer cette valeur de performance, il faut procéder à l’évaluation des indi-
vidus générés par l’algorithme génétique. La façon dont l’évaluation des individus est
faite doit être définie avant de lancer l’algorithme. Lors de cette étape, l’algorithme
génétique communique avec le programme de calcul des structures composites afin de
calculer les propriétés de cet individu. C’est avec ces propriétés que la valeur de per-
formance peut être déterminée selon l’objectif et les contraintes du problème.
Maximiser : f (x)
(3.1)
Sous les contraintes : gi (x) ≥ 0 , i = 1, . . . , s
s
X
F (x) = f (x) + λi min(0, gi(x)) (3.2)
i=1
32
Dans ces équations, f (x) est l’objectif du problème d’optimisation tandis que x
représente une solution (un individu) à ce problème. Les s contraintes gi(x) sont définies
de façon à ce qu’elles soient inférieures à 0 lorsqu’elles sont violées. Donc, la fonction
de pénalisation F est diminuée proportionnellement aux facteurs de pénalisation λi
associés à ces contraintes lorsque celles-ci ne sont pas respectées. F (x) vaut directement
f (x) pour une solution appartenant au domaine réalisable.
D’autre part, certaines contraintes peuvent être éliminées en réprésentant les va-
riables d’une solution de façon adaptée. Ainsi, les solutions codées sont assurément
réalisables par rapport à ces contraintes. Par exemple, si un problème donné doit
considérer seulement des stratifiés symétriques ou équilibrés, on peut s’assurer du res-
pect de ces contraintes en codant les stratifiés selon la nomenclature simplifiée des
33
Maximiser : Ex
Sous les contraintes : Gxy ≥ 12 GPa
νxy ≤ 0,50
Objectif Contraintes
Ex Gxy νxy
(GPa) (GPa)
14,54 12,00 0,50
stratifiés (voir chapitre 2). Pour la contrainte de symétrie, par exemple, on ne code
seulement que la moitié du stratifié en question (voir tableau 3.9 : 1). On le considère
ensuite comme un stratifié symétrique lors du décodage (voir tableau 3.9 : 2). De cette
façon, on s’assure que tous les individus générés sont symétriques. De la même façon,
on peut représenter les variables de manière à s’assurer que seulement des stratifiés
équilibrés soit générés (tableau 3.10 : 1). On y arrive en considérant chaque variable
comme étant équivalant à un empilement de deux plis du même angle, mais de signes
opposés (tableau 3.10 : 2). Pour des plis orientés à 0◦ et 90◦ , cela signifie des empile-
ments doubles : 0◦2 et 90◦2 . Il est important de noter ici, qu’il n’est pas nécessaire de
doubler les orientations à 0◦ et à 90◦ pour qu’un stratifié soit équilibré. On procède tout
de même de cette façon car certains de nos résultats se basent sur des travaux où les
auteurs ont utilisé cette démarche (voir [6] et [13] par exemple). D’autre part, Grosset
et coll. [3] ont démontré l’efficacité de l’usage de cette forme de représentation par rap-
port à une fonction de pénalisation afin s’assurer du caractère équilibré des stratifiés.
On peut aussi combiner ces deux formes de représentation pour gérer ces contraintes
simultanément. Pour un stratifié équilibré et symétrique, cette façon de faire permet
de diminuer le nombre de variables nécessaires au quart du nombre total de plis de ce
stratifié. Cela a donc l’avantage de restreindre le domaine réalisable du problème en
empêchant l’évaluation de solutions ne respectant pas les contraintes. Cependant, cette
méthode de gestion des contraintes est propre au problème et ne peut pas s’appliquer à
34
tous les genres de contraintes. Toutefois, comme elle est efficace pour les contraintes de
symétrie et d’équilibrage des plis appliquées aux problèmes d’optimisation de structures
stratifiées, c’est cette représentation des variables (tableau 3.9 et tableau 3.10) qui est
utilisée dans ces travaux pour gérer ces contraintes.
Tab. 3.9 – Représentation d’un stratifié symétrique de six plis avec trois variables
Tab. 3.10 – Représentation d’un stratifié équilibré de six plis avec trois variables
Finalement, il est aussi possible d’utiliser des opérateurs de réparation qui servent à
rendre réalisable une solution qui ne l’est pas. Ainsi, ces opérateurs modifient une solu-
tion irréalisable par rapport à certaines contraintes afin de la projeter dans le domaine
réalisable. Par exemple, Le Riche et Haftka [13] introduisent une forme de mutation
(scaling mutation) qui utilise ce principe afin de modifier une solution tout dépendant
de la contrainte qui est violée. Toutefois, comme ces auteurs n’ont obtenu aucun bénéfice
en utilisant cette stratégie, nous n’utiliserons ni cet opérateur ni aucun autre opérateur
de réparation dans ces travaux.
L’étape suivante est le classement des individus dans la population. Lors de cette
étape, les individus sont classés en ordre décroissant par rapport à la valeur de leur
fonction d’évaluation F (x). Donc, après ce classement, l’individu le plus performant, ou
celui possédant la plus grande valeur de F (x), est situé à la première position tandis que
le moins performant est situé à la position N de la population. Par conséquent, lorsque
le programme se termine, la solution de l’optimisation est celle située à la première
35
position. Toutefois, en ingénierie il est souvent utile d’avoir des choix alternatifs au
problème d’optimisation. En ce sens, les autres individus de la population finale peuvent
servir à fournir des solutions alternatives au problème. L’étape qui suit le classement
des individus est la construction de l’ensemble de reproduction R.
Dans la nature, les organismes d’une population tendent à s’adapter aux change-
ments de leur environnement. Ce processus d’adaptation peut s’étendre sur de longues
périodes et est régi par la sélection naturelle. La mécanique sous-jacente à la sélection
naturelle est relativement simple et robuste. En effet, face à certains changements plus
ou moins brusques de leur environnement, les individus de la population tentent de
survivre. De façon globale, il y a des individus qui meurent et d’autres qui survivent.
Parmi les survivants, il y a de fortes chances qu’une quantité de ceux-ci possèdent
des attributs génétiques qui ont joué en leur faveur que ceux qui sont morts n’avaient
pas. Ainsi, comme ils ont survécu, ils peuvent alors se reproduire entre eux et, par
le fait même, transmettre leur bagage génétique à leur progéniture. À ce moment, la
probabilité que cette progéniture ait reçu les gènes performants des parents est bonne.
C’est en répétant ce processus de génération en génération que la population tend à
s’améliorer globalement. C’est donc sur ces principes de la sélection naturelle que se
base l’algorithme génétique pour orienter la recherche de solutions avantageuses.
F (xi )
ps (xi ) = PN (3.3)
k=1 F (xk )
2(N − k + 1)
ps (xi ) = (3.4)
N(N + 1)
selon le rang. Comme les objectifs Fi (x) se ressemblent, ils ont une probabilité pi
aussi semblable (voir équation (3.3)) ce qui tend à ralentir la recherche. La méthode
de linéarisation selon le rang, quant à elle, ne possède pas cet inconvénient, car elle
favorise les individus toujours selon la même probabilité qui dépend seulement du rang
de l’individu parmi la population (voir équation (3.4)). Soremekun et coll. [15] utilisent
cette dernière méthode pour définir les probabilités de sélection pour générer l’ensemble
de reproduction. C’est cette méthode qui est utilisée par notre algorithme génétique.
3.7 La reproduction
Ce genre d’opérateur peut prendre différentes variantes. En effet, on peut générer des
enfants en tirant plus d’un point de croisement. C’est-à-dire que si on tire deux points de
croisement par exemple (X2P), l’enfant portera les gènes qui précèdent le premier point
de croisement et ceux qui suivent le second point de croisement du premier parent, et les
gènes compris entre les deux points de croisement du second parent (voir tableau 3.13).
p1 : 1 2 3 1 | 2 3 e: 1 2 3 1 | 2 1
p2 : 3 2 1 3 | 2 1
p1 : 1 2 | 3 1 | 2 3 e: 1 2 | 1 3 | 2 3
p2 : 3 2 | 1 3 | 2 1
Pour des problèmes où l’épaisseur est une variable de l’optimisation, l’ensemble de
reproduction peut contenir des couples de parents d’épaisseurs différentes. On rapelle
que pour ce type de problème, l’allèle « 0 » représente un pli vide qui est ignoré lors du
décodage. Dans le tableau 3.14, les individus de la population sont représentés par huit
gènes. Le premier compte deux gènes représentant des plis vides et est donc plus épais
que le second qui lui en possède quatre. Lorsque l’on utilise ce genre de représentation,
les gènes qui portent l’allèle « 0 » sont placés au début des chromosomes. Cette façon
de faire a pour but d’alléger la structure des données informatiques. Par conséquent, le
nombre total de gènes ng de chaque individu est le même pour toute la population. Ce
n’est que le nombre de gène « 0 » qui fait varier l’épaisseur des stratifiés.
le plus épais. Il faut alors que le parent p1 soit le plus épais des parents. Ensuite, un
point de croisement « | » est tiré au hasard à l’intérieur des gènes différents de « 0 » du
parent p2 . Dans cet exemple, la position de croisement est comprise entre 4 et 7, soit
entre la quantité de gènes « 0 » et le nombre total de gène moins 1 (ng − 1). L’enfant e
généré est alors composé des gènes précédant le point de croisement de p1 et des gènes
suivant le point de croisement de p2 . Le tableau 3.16, quant à lui, définit l’opérateur à
un point de croisement à partir du plus mince des parents (X1P-mince). Cet opérateur
se comporte de la même façon que le précédent sauf que le parent p1 est le plus mince
des deux et que le point de croisement est sélectionné parmi les gènes différents de « 0 »
de p1 . L’enfant e généré est aussi composé des gènes précédant le point de croisement
de p1 et des gènes suivant le point de croisement de p2 . Lorsque les deux parents p1 et
p2 ne contiennent aucun gène « 0 » , ces opérateurs sont identiques aux opérateurs X1P
et X2P (voir tableaux 3.12 et 3.13) tout dépendant du nombre de points de croisement
de ceux-ci.
Tab. 3.15 – Opérateur à un point de croisement à partir du plus épais des parents
(X1P-épais)
p1 : 0 0 1 2 | 3 1 2 3 e: 0 0 1 2 | 3 2 1 3
p2 : 0 0 0 0 | 3 2 1 3
Tab. 3.16 – Opérateur à un point de croisement à partir du plus mince des parents
(X1P-mince)
p1 : 0 0 0 0 3 2 | 1 3 e: 0 0 0 0 3 2 | 2 3
p2 : 0 0 1 2 3 1 | 2 3
p1 et p2 , pour générer l’enfant e (voir les équations (3.5) et (3.6)). Tout d’abord, il y a
tirage d’un nombre aléatoire d compris entre 0 et 1. Ensuite, chaque gène vk de l’enfant
e est défini en fonction de d et de la valeur des gènes vk des parents p1 et p2 .
p1 = (v1 , . . . , vk , . . . , vng )
p2 = (v1 , . . . , vk , . . . , vng ) (3.5)
e = (v1 , . . . , vk , . . . , vng )
e(vk ) = dp1 (vk ) + (1 − d)p2 (vk ) ∀k ∈ {1, . . . , ng } et d ∈]0, 1[ (3.6)
3.8 La mutation
D’autre part, la séquence dans laquelle les orientations sont ordonnées importe sur
certaines propriétés du stratifié. En d’autres mots, la position des gènes à l’intérieur d’un
chromosome influence la performance de cet individu. Par exemple, le stratifié [02 / ±
45/902]s possède des propriétés en flexion différentes de celles du stratifié [902 /02 /±45]s .
Par conséquent, Le Riche et Haftka [13] ont développé un opérateur de permutation per-
mettant de modifier la séquence par laquelle un individu est représentée. Cet opérateur
procède à la permutation de deux gènes déterminés aléatoirement parmi les gènes autres
que ceux représentant des plis vides, soit ceux portant l’allèle « 0 » dans notre cas (voir
tableau 3.18). Cet opérateur est alors appliqué à tous les enfants ei de l’ensemble E
selon une certaine probabilité.
Pour des problèmes avec des variables continues, il faut respecter le domaine Ω de
ces variables lors de la mutation. En effet, il faut remplacer un gène par un autre gène
appartenant au domaine Ω′ . Pour des variables continues, le domaine des gènes des
chromosomes est le même que le domaine des variables (Ω = Ω′ ). Le domaine Ω est
défini par une borne inférieure bi et une borne supérieure bs (Ω = [bi , bs ]). Pour les
problèmes d’optimisation de structures stratifiées pour lesquelles on désire obtenir des
stratifiés équilibrés, le domaine continu des variables définissant l’orientation des plis
est souvent : Ω = [0, 90]◦ .
(
vk + Λ(t, bs − vk ) si l = 0
vk′ = (3.7)
vk − Λ(t, vk − bi ) si l = 1
t q
Λ(t, y) = y(1 − r (1− T ) ) r ∈]0, 1[ (3.8)
Un autre opérateur de mutation appliqué aux gènes continus force le gène muté
à prendre la valeur de la frontière supérieure bi ou inférieure bs du domaine Ω′k . Cet
opérateur se nomme l’opérateur de mutation de frontière.
Pour des problèmes où l’épaisseur des stratifiés est une variable au problème, il
faut utiliser deux autres opérateurs afin de faire varier le nombre de plis des solutions.
Le Riche et Haftka [13] ont introduit les opérateurs d’addition et de soustraction de
plis (voir figure 3.1 : Addition de plis et Soustraction de plis). On rappelle que la
représentation génétique de stratifiés d’épaisseur variable se fait avec l’utilisation d’un
allèle « 0 » définissant un pli vide (voir tableau 3.14). Donc, l’opérateur d’addition
de plis, remplace un gène « 0 » par une valeur appartenant au domaine Ω′k \0 qui est
déterminée aléatoirement. Ce nouveau gène est ajouté à la fin de la séquence, c’est-à-
dire adjacent au plan de symétrie du stratifié, car à cet endroit il influence moins les
propriétés globales du stratifié. Le tableau 3.19 donne un exemple de l’application de
l’opérateur d’addition de plis sur un chromosome d’un enfant. Ainsi, l’allèle 1, choisi
aléatoirement à partir du domaine des gènes de ce chromosome (Ω′k = {1, 2, 3}), est
attribué au gène le plus à droite du chromosome (v8 dans ce cas). Un gène représentant
un pli vide est aussi retiré et les autres gènes sont décalés d’une position vers la gauche
du chromosome. Dans cet exemple, l’application de cet opérateur a pour effet d’ajouter
un pli double à 0◦2 adjacent au plan moyen du stratifié.
Par opposition, un opérateur de soustraction de plis est utilisé pour éliminer un des
gènes déterminé aléatoirement en le remplaçant par un allèle « 0 » représentant un pli
vide. Les autres gènes sont alors déplacés pour que tous les « 0 » soient situés au début
du chromosome (voir tableau 3.20). Pour des problèmes où l’épaisseur des stratifiées est
45
variable, les opérateurs d’addition et de soustraction de plis sont appliqués à tous les
enfants de l’ensemble E selon une probabilité qui leur est propre. Finalement, lorsqu’un
de ces deux derniers opérateurs est appliqué à un enfant e donné, il faut procéder
à l’addition ou la soustraction de plis à tous les chromosomes cj de cet enfant. Par
exemple, si on applique l’opérateur de soustraction de plis à l’enfant e et que celui-
ci est représenté par deux chromosomes (c1 , c2 ), le premier pour les orientations et
le second pour les matériaux, il faut ajouter un gène portant l’allèle « 0 » aux deux
chromosomes c1 et c2 .
nf = N + tr (3.9)
46
À ce moment, l’empilement n’affecte pas ces propriétés, car elles sont calculées à partir
de la matrice [A] (voir équations (2.32) à (2.35)) qui est indépendante de la position
des plis dans le stratifié. Pour ces raisons, on utilise l’équation (3.10) qui sert à calculer
η(x1 , x2 ), la distance entre les deux individus x1 et x2 . Cette distance est calculée à
partir des gènes gk respectifs des individus x1 et x2 . On considère donc les individus x1
et x2 comme étant identiques si η est inférieur ou égal à une certaine valeur nominale
∆ (voir équation (3.11)). Dans ces travaux, ∆ a été fixé à 0,8.
v
u ng
uX
η(x1 , x2 ) = t (x1 (vk ) − x2 (vk ))2 (3.10)
k=1
si η≤∆ , alors x1 = x2
(3.11)
sinon x1 6= x2
3.12 Convergence
Afin de mettre fin à l’algorithme génétique, différents critères d’arrêt peuvent être
utilisés. Le plus simple est de fixer un nombre de générations maximal T après lequel
la recherche se termine (Gén. max ). Lorsqu’une solution optimale Fβ est connue pour
un problème donné, on peut aussi arrêter l’algorithme après l’atteinte d’un optimum
pratique à cette solution (Opt. prat.). Un optimum pratique est une solution dont
l’objectif F (x) est à l’intérieur d’un certaine distance ψ de l’objectif de l’optimum connu
Fβ (voir équation (3.12)). Lorsque cette méthode est utilisée, il est souvent prudent de
définir une limite maximale de générations afin de mettre fin à l’algorithme s’il n’arrive
pas à trouver cet optimum pratique.
|Fβ − F (x)|
≤ψ (3.12)
Fβ
Un autre critère d’arrêt peut aussi être utilisé. Celui-ci vérifie la création de nouvelles
solutions plus performantes parmi la population. Ainsi, si le meilleur individu de la
population reste inchangé pendant un nombre donné tn de générations, on considère
48
que l’algorithme a convergé et que cette meilleure solution est l’optimum de cette
recherche (Pas chang.). Le tableau 3.21 résume les critères d’arrêt détaillé dans cette
section.
Nom Définition
Gén. max À t = T
Opt. prat. Atteinte d’un optimum pratique ou après t = T
Pas chang. Après tn générations sans amélioration du meilleur individu
Validation du programme
d’optimisation
49
50
Afin de valider l’algorithme génétique développé dans ces travaux, une première série
de problèmes, tirée de la littérature (Le Riche et Haftka [1], Gürdal et coll. [14]) est
considérée. Ces problèmes utilisent des variables discrètes pour représenter l’orientation
des plis. Pour ces problèmes on considère donc que, le matériau, l’épaisseur de chaque
pli et leur nombre sont constants.
Les résultats présentés dans cette section sont obtenus pour la plaque stratifiée
montrée à la figure 4.1. Cette plaque rectangulaire est supposée équilibrée, symétrique,
simplement supportée sur ses quatre côtés et soumise à des charges biaxiales de com-
pression Nx et Ny appliquées au plan moyen. Elle présente des dimensions a et b et
l’effort Nx est appliqué le long des côtés de longueur b tandis que l’effort Ny est appliqué
le long des deux autres côtés. À noter que bien qu’il s’agisse de charges de compression,
les efforts Nx et Ny correspondent à des valeurs numériques positives. Chaque pli est
fait de carbone–époxy et les propriétés de ce matériau sont données au tableau 4.1.
L’orientation possible des plis est limitée aux quatre valeurs distinctes de 0, +45, -45
et 90 degrés.
Afin de respecter la contrainte de symétrie, seulement la moitié des plis est représen-
tée par des variables indépendantes. Le reste des plis du stratifié sont considérés comme
étant la symétrie de ces orientations lors de l’interprétation des variables. De plus, pour
satisfaire la contrainte d’équilibrage des plis, les auteurs représentent les variables par
des empilements doubles orientés à 02 , ±45 et 902 degrés. C’est aussi ce qui est fait ici
en sachant bien qu’il n’est pas nécessaire de doubler les plis à 0◦ et à 90◦ pour qu’un
stratifié soit équilibré. On représente ces empilements doubles par les gènes 1, 2 et 3
respectivement. La représentation génétique de ces variables est donnée au tableau 4.2.
Cette façon de représenter les variables permet alors de satisfaire ces deux contraintes
automatiquement et aussi de réduire le domaine de solutions possibles en n’utilisant
qu’un nombre de variables équivalent au quart du nombre total de plis.
y
Ny
x
Nx Nx
b
Ny
Propriétés Carbone-époxy
Module longitudinal, E1 127,59 GPa
Module transverse, E2 13,03 GPa
Module de cisaillement dans le plan, G12 6,41 GPa
Coefficient de Poisson dans le plan, ν12 0,30
Déformation principale maximale, ǫua
1 0,008
Déformation transversale maximale, ǫua2 0,029
ua
Cisaillement maximal, γ12 0,015
Épaisseur des plis, h 0,127 mm
Domaine Variables/allèles
Ωi (décodé) 02 ±45 902
Ω′i (codé) 1 2 3
52
élitiste décrite au chapitre 3). De plus, un opérateur à deux points de croisement (voir
tableau 3.13) est appliqué à tous les couples de parents de l’ensemble de reproduction
avec une probabilité de 1,00. Ensuite, deux opérateurs de mutation sont appliqués
successivement à l’ensemble d’enfants généré par le croisement. Ainsi, l’opérateur de
mutation multiple (voir section 3.8.1) est appliqué à chaque gène de chaque enfant avec
une probabilité de 0,20 tandis qu’une permutation (voir tableau 3.18) de deux gènes
est appliquée à chaque enfant selon une probabilité de 0,20. Le critère d’arrêt utilisé est
l’atteinte de 200 générations sans changement dans la valeur de la fonction d’évaluation
F (x) que présente le meilleur individu de la population (tn = 200).
Ces paramètres ont été définis de façon générale afin qu’ils puissent être utilisés
pour différents problèmes. En effet, le but de ces travaux n’est pas de déterminer
les paramètres permettant d’obtenir les résultats le plus rapidement possible pour un
problème donné, mais plutôt de concevoir une méthode d’optimisation pouvant être
appliquée à une vaste gamme de problèmes d’optimisation. Par conséquent, dans ces
travaux, on tente d’obtenir des résultats pour différents problèmes sans changer les
paramètres de l’algorithme génétique afin de pouvoir faciliter l’utilisation du logiciel
par des utilisateurs peu expérimentés. On procède de cette façon en sachant que la mo-
dification de ces paramètres permettrait, peut-être, l’obtention de bons résultats plus
rapidement. Cela n’est toutefois pas le but de la présente recherche.
Maximiser : λcr
En changeant : l’orientation des 48 plis (θk )
θk = {02 , ±45, 902 },
Sous les contraintes : – symétrique et équilibré
– contiguı̈té des plis
np a/b Nx Ny
48 4 N N /8
fissuration de la matrice. Dans ce cas, ce nombre maximal est quatre. De plus, pour
un stratifié donné, on définit λcr (voir équation (4.1)) comme étant la plus faible va-
leur entre la charge causant le flambement (λf c {N}) et la charge causant la rupture
par déformation maximale (λǫ {N}). Il est à noter qu’un facteur de sécurité de 1,5 est
utilisé pour le calcul de λǫ .
Ce problème est alors appliqué à une plaque dont l’épaisseur, par l’intermédiaire
du nombre de plis (np ), les dimensions et le chargement sont définis au tableau 4.5.
Le stratifié est constitué de 48 plis et la plaque est quatre fois plus grande dans la
direction x (côté a) que dans la direction y (côté b). Quant au chargement, il est 8 fois
plus important dans la direction x que dans la direction y, Nx ayant comme valeur
nominale 175 N/m.
F (x) (équation (4.2)) est utilisée afin de diminuer la valeur réelle de l’objectif (f (x) =
λcr ) d’une solution violant cette contrainte et de la défavoriser par rapport à une autre
la respectant. L’équation (4.3) défini la contrainte g(x) qui est alors négative si la
contrainte est violée et positive sinon. Dans cette équation, Nc est une fonction qui
compte le nombre de plis contigüs de même orientation. Donc, si Nc est supérieur à la
limite imposée de quatre, alors g(x) est inférieur à 0 et la fonction F (x) est pénalisée
proportionnellement à Nc et au facteur de pénalisation λ qui vaut 500 dans ce problème.
D’un autre côté, si le nombre de plis contigüs Nc est inférieur ou égal à 4, la contrainte
est respectée et g(x) est supérieur ou égal à 0 et F (x) représente alors la valeur réelle de
λcr . F (x) est alors la fonction d’évaluation de l’algorithme génétique qui sert à mesurer
la qualité des individus parmi la population.
g(x) = 4 − Nc (4.3)
Le tableau 4.6 présente les résultats obtenus pour ce problème. Ce tableau est
séparé en cinq colonnes. La première permet d’identifier les designs entre eux, la se-
conde détermine la séquence d’empilement de ces designs et la troisième donne l’origine
des résultats. Un numéro, faisant référence à la bibliographie, est donné pour une so-
lution tirée de la littérature tandis que l’appellation « AG » est utilisée pour définir
une solution générée par notre programme d’optimisation. Les deux dernières colonnes
donnent respectivement les facteurs de rupture par flambement (λf c ) et par déformation
(λǫ ) des designs, le facteur de rupture critique (λcr ) étant le minimum entre ces deux
valeurs. Étant donné l’aspect probabiliste et aléatoire des algorithmes utilisés, le temps
nécessaire à l’arrêt du programme et la constitution des populations finales diffèrent
d’un démarrage à l’autre. C’est pourquoi 100 démarrages successifs du programme d’op-
timisation sont effectués afin de générer les résultats. Les designs finaux cités dans ce
tableau sont des exemples de solutions optimales tirées de quatre de ces 100 démarrages.
Le nombre moyen d’appels de la fonction d’évaluation (nf ) est alors de 4831. Ce nombre
est en fait le nombre de design évalués par le programme, c’est aussi une mesure du
coût de l’optimisation.
Selon les résultats obtenus par Le Riche et Haftka [1], ce problème compte plusieurs
55
Le problème d’optimisation suivant est du même type que le premier où le but était
d’optimiser le facteur critique de rupture (λcr ) avec comme contraintes la contiguı̈té des
plis (voir tableau 4.4). L’épaisseur et les dimensions sont aussi les mêmes, toutefois la
charge Ny est maintenant quatre fois supérieure à ce qu’elle était précédemment (voir
le tableau 4.8).
np a/b Nx Ny
48 4 N N /2
coût moyen (nf ) de ce problème, calculé sur un échantillon total de 100 tentatives, est
alors de 4825.
tation, mais aussi l’ordre dans lequel ces plis sont empilés. Un opérateur de permutation
de plis est utile dans ce cas (voir tableau 3.18) afin de faciliter la recherche de l’empi-
lement optimal. Il est aussi intéressant de remarquer que, contrairement au problème
précédent, aucun pli orienté à 0◦2 n’est utilisé dans les designs du tableau 4.9. Étudions
maintenant le troisième problème d’optimisation de cette série.
L’objectif de ce problème est différent des deux premiers, car cette fois on impose
au départ le mode de rupture. En effet, la rupture critique du design final doit être le
flambement. Ainsi, le but de l’optimisation est de maximiser le facteur de flambement
critique (λf c ) en imposant une contrainte pour que le facteur de rupture par déformation
(λǫ ) soit supérieur à λf c . La contrainte sur la contiguı̈té des plis est toujours appliquée.
La formulation de ce problème est donnée au tableau 4.10. Ce problème s’applique à une
plaque dont l’épaisseur, les dimensions et le chargement sont définis au tableau 4.11.
Le nombre de plis, les dimensions et le chargment Nx sont les mêmes que ceux des
problèmes précédents. Toutefois, le chargement Ny est diminué de moitié par rapport
au problème précédent et est deux fois supérieur que celui du premier problème (voir
les tableaux 4.5 et 4.8).
Maximiser : λf c
En changeant : l’orientation des 48 plis (θi )
θi = {02 , ±45, 902},
Sous les contraintes : – symétrique et équilibré
– contiguı̈té des plis
– λf c ≤ λǫ
Le tableau 4.12 présente la solution optimale obtenue par Le Riche et Haftka [1]
(solution a) et les meilleures solutions obtenues par l’algorithme génétique (solutions 1 à
4) après avoir lancé 100 fois le programme. Premièrement, la solution 4 du tableau 4.12
est le design le plus éloigné de l’optimum qu’obtient l’algorithme génétique après les 100
essais. En effet, son facteur de flambement critique λf c est de 12576 comparativement
59
np a/b Nx Ny
48 4 N N /4
à 12687 pour l’optimum. Donc, on peut considérer ce design comme étant un optimum
pratique à 0,1 % et considérer le programme comme étant fiable à 100 % pour trouver,
au moins, un tel optimum pratique. Le nombre moyen d’évaluation (nf ) nécessaire à
chaque essai est de 5570.
En analysant d’avantage les résultats on remarque que les solutions comptent toutes
le même nombre de plis orientés à 90◦2 , 0◦2 et à ±45◦ (n90◦2 = 2, n0◦2 = 8 et n±45◦ = 14).
C’est pourquoi toutes les solutions ont le même facteur de rupture par déformation, car
ils ont toutes la même matrice [A]. Donc, tous les designs donnés dans ce tableau varient
seulement au niveau de la séquence d’empilement. Ils sont tous voisins de l’optimum
à quelques différences près. Par exemple, la solution optimale (solutions a ou 1 du
tableau 4.12) est obtenue à partir de la solution 2 en procédant à deux permutations.
En effet, si l’on permute le premier pli à ±45◦ (en partant des plis extérieurs) avec le
premier pli à 90◦2 et le second pli à 0◦2 avec l’avant-dernier pli à ±45◦ , on obtient le
design optimal. La solution 3 est encore plus près du design optimal, car seulement une
permutation est nécessaire. On obtient la solution optimale en permutant le premier pli
à ±45◦ avec le premier pli à 90◦2 . Pour le design 4, il faut procéder à deux permutations.
Tout d’abord, il faut permuter le premier pli à ±45◦ et le premier pli à 90◦2 et ensuite
60
Enfin, le dernier problème de cette série est une maximisation de la charge de flam-
bement λf c sans la contrainte de contiguı̈té. Ce problème est donc moins contraint que
les précédents et la formulation est donnée au tableau 4.13. L’épaisseur, les dimen-
sions et le chargement sont donnés au tableau 4.14. Ce problème s’applique donc à une
plaque plus épaisse, le nombre de plis passant de 48 à 64. Donc, ce problème compte
quatre variables de plus que les précédents. La taille du domaine de solutions possibles
est maintenant de 43 millions. Le chargement est maintenant le même dans les deux
directions et vaut 175 N/m. Le rapport de la longueur a sur la largeur b est de 2. En
d’autres mots, la largeur b a doublé par rapport au problème précédent et la valeur de
Ny est quant à elle quatre fois plus grande.
Le tableau 4.15 donne les meilleurs designs obtenus par Le Riche et Haftka [1]
et Soremekun et coll. [15] (solutions a à f). Les meilleures solutions obtenues après
avoir lancé 100 fois le programme d’optimisation sont aussi données dans ce tableau
(solutions 1 à 5). À toutes les fois, l’algorithme génétique génère au moins un optimum
pratique à 0,02%. C’est-à-dire que la solution la plus éloignée de l’optimum, générée par
l’algorithme génétique, est la solution 5 de ce tableau qui est alors distante de 0,02%
de la solution 1. Le coût moyen, calculé à partir des résultats de 100 essais, est de 4887
61
Maximiser : λf c
En changeant : l’orientation des 64 plis (θi )
θi = {02 , ±45, 902},
Sous les contraintes : – équilibrage des plis
– symétrie du stratifié
np a/b Nx /Ny
64 2 1
Il est aussi intéressant de remarquer qu’il existe plusieurs solutions différentes qui
possèdent des facteurs de flambement quasi optimaux. En effet, tous les designs de ce
tableau sont différents et possèdent tous un facteur de flambement variant seulement
de 0,02%. Ils sont donc considérés comme des designs quasi optimaux. Le tableau 4.16
détaille le nombre de plis de chaque orientation des stratifiés quasi optimaux cités
précédemment. La dernière colonne de ce tableau donne le nombre d’empilement dis-
tinct, obtenus par le programme, qui contiennent la même proportion de plis de chaque
62
orientation. Par exemple, il existe au moins trois façons différentes d’empiler 18 plis à
±45◦ avec 14 plis orientés à 90◦2 pour former un design quasi optimal (voir solutions
a, e et 2 du tableau 4.15). Pour ce qui est du design optimal, il compte un total de 8
plis à ±45◦ et 24 plis à 90◦2 (voir tableau 4.16 : 3) qui sont empilés selon la solution 1
du tableau 4.15. D’après le tableau 4.16, il est intéressant de remarquer que l’utilisa-
tion de plis orientés à 0◦2 n’est pas utile pour l’atteinte de l’objectif. En effet, un seul
design généré par l’algorithme génétique utilise une variable à 0◦2 . De plus, il est facile
de vérifier que le remplacement de ce pli par un autre orienté à ±45◦ ou à 90◦2 permet
un plus grand facteur de flambement. Même que si on le remplace par un plis à 90◦2 ,
pour former le stratifié [902 , ±45, 9010 , ±452 , 906 , ±45, 904, 902 ]s , on obtient un facteur
de flambement de 3976,85. Cela définit alors une autre solution optimale.
Tab. 4.16 – Nombre de plis de chaque orientation pour les designs quasi optimaux
est efficace pour résoudre ces problèmes d’optimisation avec des variables discrètes.
Regardons maintenant le comportement de l’algorithme génétique pour des problèmes
avec des variables continues.
Maximiser : Ex
En changeant : l’orientation des 16 plis (θk )
θk = {−90◦ , . . . , 90◦ },
Sous les contraintes : symétrique et équilibré
Gxy ≥ 12 GPa
νxy ≤ 0,50
Propriétés Verre-époxy
Module longitudinal, E1 45,0 GPa
Module transverse, E2 10,0 GPa
Module de cisaillement dans le plan, G12 4,5 GPa
Coefficient de Poisson dans le plan, ν12 0,31
Épaisseur des plis, t 0,125 mm
normalisée afin d’être à peu près du même ordre de grandeur que celui des contraintes
gi (x) (voir équation (4.5)). La pénalisation affecte la valeur de F (x) en la diminuant
lorsque les contraintes sont violées proportionnellement au facteur de pénalisation λi et
au degré de violation des contraintes. Pour ce faire, les contraintes gi (x) sont formulées
pour qu’elles soient inférieures à 0 lorsque qu’elles sont violées. Dans ces équations,
Gxy (x) est la valeur du module de cisaillement du design considéré, donné en GPa, et
νxy (x) est le coefficient de Poisson de x.
D’autre part, la constante γ est utilisée afin de restreindre le domaine réalisable des
contraintes. Cela est fait afin de contrecarrer le comportement de l’algorithme qui a
tendance à considérer des solutions qui violent les contraintes légèrement. Par exemple,
avec un γ de 0,0002 les contraintes sont restreintes de 0,02%. Donc, Gxy (x) doit être
supérieur à 12,0024 et νxy (x) inférieur à 0,4999.
s
X
F (x) = Ex (x)/Ex + λi min(0, gi(x)) (4.4)
i=1
N Nk λi γ ∆ Critère d’arrêt
20 5 4 0,0002 0,8 tn = 200
Les opérateurs utilisés sont détaillés au tableau 4.21 et font référence aux opérateurs
66
appliqués aux variables continues qui ont été décrits au chapitre 3. Pour les opérateurs
de reproduction, une probabilité de 0, 5 signifie que l’opérateur est appliqué à la moitié
des couples de parents de l’ensemble de reproduction. Donc, un croisement arithmétique
est appliqué à la moitié de l’ensemble de reproduction et un croisement simple à l’autre
moitié. Encore une fois, les opérateurs de mutation sont appliqués subséquemment à
l’ensemble d’enfants selon la probabilité qui leur est propre. Quatre opérateurs sont
utilisés en ce sens soit la mutation de frontière, la mutation non-uniforme multiple et
simple puis la mutation uniforme. Par ailleurs, l’opérateur de permutation est aussi
utilisé, et ce, même si la séquence d’empilement n’influence pas l’objectif du problème.
En effet, il s’avère utile de mélanger les gènes afin de permettre aux opérateurs de
reproduction de générer des designs différents du reste de la population. Finalement,
leurs probabilités respectives sont données dans ce tableau. Elles ont été choisies par
essais et erreurs sans toutefois avoir procédé à des études de sensibilités approfondies.
Opérateurs Probabilité
Reproduction : croisement arithmétique 0,50
croisement simple 0,50
Mutation : frontière 0,30
non-uniforme multiple 0,30
non-uniforme simple 0,02
uniforme 0,02
permutation 0,30
Ce problème est tiré de Luersen & coll. [7] et leurs meilleurs résultats sont donnés
dans la première partie du tableau 4.22 (solutions a, b et c). Tout d’abord, on note que la
séquence d’empilement n’influence pas les propriétés des stratifiés considérées ici. C’est
pour faciliter la comparaison entre les designs donnés dans ce tableau que les séquences
d’empilement sont ordonnées en ordre croissant par rapport aux orientations. C’est-à-
dire que la plus petite orientation est à la première position de la séquence tandis que la
plus grande est à la dernière position. Les stratifiés les plus performants déterminés par
ces auteurs ont un module de rigidité longitudinal Ex de 14,54 GPa tandis que les deux
contraintes sont actives puisque Gxy et νxy valent respectivement 12 GPa et 0,50. On
remarque que différentes configurations permettent l’obtention de stratifiés présentant
67
de telles propriétés (voir solutions a, b et c). Une des raisons qui explique la présence
de plusieurs optimums est le domaine des variables qui permet aux gènes de prendre
n’importe quelle valeur continue appartenant à Ω′ . La seconde section de ce tableau
regroupe quatre des meilleures solutions obtenues par l’algorithme génétique (solutions
1 à 4) après avoir lancé 100 fois le programme d’optimisation. Tout d’abord, on constate
que ces solutions sont comparables à celles données dans la référence au niveau de la
maximisation de l’objectif f (x) et des contraintes g1 (x) et g2 (x). En effet, les modules
Ex de ces designs varient entre 14,56 et 14,54 GPa tandis que les contraintes valent
toutes 12,00 GPa pour Gxy et 0,50 pour νxy . Donc, on conclut, par ces résultats, que
le programme réussit à générer des solutions optimales à ce problème en utilisant une
représentation des variables avec des gènes continus.
Tab. 4.22 – Résultats du problème d’optimisation avec des variables continues (nf =
4600)
En étudiant davantage les différents stratifiés donnés dans le tableau 4.22, on re-
marque qu’ils sont tous près l’un de l’autre. En effet, le calcul de la distance η, donnée
par l’équation (3.10), entre la solution a et les autres solutions de ce tableau, soit les
solutions b, c, 1, 2, 3 et 4 respectivement, donne des distances variant entre 4 et 6,5. En
sachant que la distance que fait la solution a avec le vecteur nul (voir l’équation (3.10)
avec η(a, 0)) est de 93,4, on peut calculer les distances relatives entre les distances η,
calculées précedemment, et la distance η(a, 0). Ces distances relatives varient alors de
0,04 à 0,07.
chacune des populations finales. En d’autres mots, les populations finales convergent
vers un groupe de solutions rapprochées entre elles qui performent toutes bien au ni-
veau de la fonction d’évaluation F (x) mais qui ont des valeurs de Ex , Gxy et de νxy
différentes. D’autre part, il faut noter que d’un point de vue mathématique, il est
difficile d’analyser rigoureusement les résultats générés par l’algorithme génétique car
l’individu le plus performant de la population finale n’est jamais le même d’un essai
à l’autre. De plus, le respect des contraintes n’est pas assuré à chaque itération. En
effet, l’algorithme génétique a tendance à conserver, dans sa population, des individus
qui violent plus ou moins les contraintes, cela dépend des facteurs de pénalisation λi
utilisés (voir équation (4.4)). Ce phénomène se produit car les contraintes restreignent
la maximisation de l’objectif et qu’une légère violation de celles-ci permet d’augmenter
la valeur de cet objectif. Par exemple, si dans ce problème la contrainte sur le module
de cisaillement (Gxy ) était relaxée, devant être supérieure ou égale à 11 GPa au lieu de
12 GPa (voir tableau 4.18), il serait plus facile d’obtenir un module de rigidité longitu-
dinal supérieur à 14,54 GPa en orientant le long de x une plus grande proportion des
plis. La même chose se produirait si la seconde contrainte sur νxy était plutôt 0,52 au
lieu de 0,50 (voir tableau 4.18). C’est pourquoi les résultats montrés au tableau 4.22
présentent presque tous un certain degré de violation des contraintes qui n’apparaı̂t
cependant pas lorsque les variables continues sont arrondies. Afin de définir le degré de
violation des contraintes qui est acceptable d’un point de vue pratique, on considère
qu’un design respecte les contraintes si son module de cisaillement Gxy est supérieur ou
égal à 11,995 GPa et si son coefficient de Poisson νxy est inférieur à 0,5005. En d’autres
mots, on accepte une violation maximale de 0,04% sur la contrainte Gxy et de 1% sur
νxy .
Lors de l’analyse des résultats, nous avons considéré la valeur de la fonction d’éva-
luation F (x) (voir l’équation (4.4)) de l’individu le plus performant des 100 populations
finales, soit celui à la première position de celles-ci. Nous avons ensuite noté la valeur de
l’objectif f (x) de ceux-ci, soit le module de rigidité Ex , et vérifié si toutes les contraintes
étaient respectées. La répartition des résultats des 100 essais se fait comme suit. Tout
d’abord, les contraintes sont respectées à 90 occasions. La valeur de l’objectif Ex , va-
rie alors de 14,44 à 14,55 GPa. Par conséquent, l’algorithme génétique a généré des
optimums pratiques, à une distance ψ de 0,8% (voir équation (3.12)), qui respectent
les contraintes 90% des fois. Lors des dix essais qui violent les contraintes, l’objectif
Ex des designs varie de 14,53 à 14,59 GPa. Dans ces cas, il est possible d’obtenir un
module Ex supérieur à 14,55 GPa car les contraintes sont violées. Finalement, le coût
69
4.3 Conclusion
Les problèmes étudiés dans ce chapitre avaient comme variables l’orientation des
plis. Le nombre de plis, l’épaisseur de même que le matériau de ceux-ci ont été gardés
fixes. Dans la première section, les orientations prenaient des valeurs discrètes. Quatre
problèmes ont alors été résolus par l’algorithme génétique et les résultats ont été com-
parés avec ceux donnés dans la littérature. Cette analyse a permis de confirmer la
capacité du programme à générer des solutions optimales et quasi-optimales pour ces
problèmes. Dans la seconde section de ce chapitre, un problème pour lequel les orien-
tations appartenaient au domaine continu a été étudié. Encore là, les résultats ont été
comparés avec ceux de la littérature et on a pu constater la capacité de l’algorithme
génétique à générer des solutions quasi optimales pour ce problème.
D’autre part, les problèmes étudiés dans ce chapitre sont des problèmes de petite
taille qui ne comptent que quelques variables. Ceux-ci ont servi à valider le programme
d’optimisation en comparant les résultats obtenus à ceux présentés dans la littérature.
Ceci étant fait, nous présentons au chapitre suivant des problèmes plus complexes où
l’épaisseur totale et le matériau des plis s’ajoutent aux inconnues.
Chapitre 5
L’épaisseur, l’orientation et le
matériau des plis comme variables
70
71
Les problèmes étudiés dans cette section portent sur la minimisation du poids ou
du coût considérés de façon séparée. Ces problèmes incluent des contraintes soit sur la
charge de flambement (équation (2.25)) soit sur la fréquence naturelle (équation (2.28))
des stratifiés. Ils sont appliqués à des plaques stratifiées symétriques et équilibrées telles
que celle montrée à la figure 5.1. Le tableau 5.1 donne les dimensions et le chargement
appliqué. Chaque pli peut prendre quatre orientations distinctes (0, +45, −45 et 90
degrés) et peut être constitué d’un matériau déterminé à partir d’une liste de deux
matériaux possibles. Ces matériaux sont le carbone–époxy (C–E) et le verre–époxy
(V–E) dont les propriétés respectives sont données dans le tableau 5.2. La constante
gravitationnelle utilisée est 9, 9 m/s2 . L’avantage d’utiliser des plis de carbone–époxy
est que ce matériau possède un grand rapport rigidité–poids (E1 /ρ = 86 × 10−3 m2 /s2 )
comparativement au verre–époxy (E1 /ρ = 21 × 10−3 m2 /s2 ), c’est-à-dire qu’il est plus
rigide tout en étant plus léger. Toutefois, pour une même masse, le carbone–époxy coûte
huit fois plus cher que le verre–époxy. Par conséquent, si l’objectif du problème est la
minimisation du poids, alors l’utilisation de plis fait de carbone–époxy sera avantageuse
et si toutefois, l’objectif est la minimisation du coût total du stratifié, alors c’est plutôt
l’utilisation de plis fait de verre–époxy qui devrait être plus favorable à l’objectif.
72
y
Ny
x
Nx Nx
b
Ny
a b Nx Ny
(m) (m) (N/m) (N/m)
0,9144 0,762 N N
Le tableau 5.3 donne le domaine des gènes du chromosome définissant les orienta-
tions (Ω1 ) et celui définissant les matériaux (Ω2 ) des plis. Le chromosome des orienta-
tions est le même que celui utilisé dans les problèmes présentés au chapitre précédent à
l’exception de la présence de l’allèle « 0 » signifiant un pli inexistant. On rappelle que
des empilements doubles (02 , ±45 et 902 ) sont utilisés afin de satisfaire la contrainte
d’équilibrage des stratifiés et que seulement la moitié des plis est représentée afin de
respecter la contrainte de symétrie. Pour le second chromosome, l’allèle « 1 » définit
un pli fait de carbone–époxy (C–E) tandis que l’allèle « 2 » définit un pli fait de verre–
époxy (V–E). Le tableau 5.4 donne un exemple d’un individu codé de cette façon. Les
gènes portant l’allèle « 0 » sont ignorés et le stratifié qui en résulte est le suivant :
[902 , 02 , ±45]S . Une orientation soulignée signifie un pli fait de verre–époxy (V–E) alors
qu’une orientation qui ne l’est pas désigne un pli fait de carbone–époxy (C–E).
Domaine Variables/allèles
Ω1 (décodé) Pli vide 02 ±45 902
Ω′1 (codé) 0 1 2 3
Ω2 (décodé) Pli vide C–E V–E
Ω′2 (codé) 0 1 2
Chromosome Ω1 Ω2
codé 0 0 3 1 2 0 0 1 2 1
décodé – – 902 02 ±45 – – C–E V–E C–E
La formulation générale des problèmes est donnée au tableau 5.5. Le tableau 5.6
donne l’objectif f (x) et la contrainte g(x) des problèmes (i), (ii) et (iii) qui seront
étudiés. L’objectif des problèmes (i) et (ii) est de minimiser le poids W , tandis que
celui du problème (iii) est de minimiser le coût C. Les problèmes (i) et (iii) sont
soumis à des contraintes sur la fréquence naturelle (fn ) tandis que le problème (ii)
est soumis à des contraintes sur le facteur de flambement critique (λf c ). La fonction
d’évaluation des individus F (x) est donnée par l’équation (5.1) et tient compte des
74
différentes contraintes soit par l’entremise des équations (5.2) et (5.3). L’équation (5.2)
s’applique aux problèmes (i) et (iii) tandis que l’équation (5.3) s’applique au problème
(ii). Ainsi, l’objectif f (x) d’un individu x est pénalisé lorsque la contrainte est violée
(g(x) < 0) et un léger bonus lui est accordé, proportionnellement au facteur β et
à g(x), seulement lorsque la contrainte est satisfaite (g(x) > 0). Cette formulation
permet de différencier deux individus de même poids ou de même coût, mais d’orienta-
tions différentes. Le but est alors de favoriser celui ayant une plus grande marge (g(x)
le plus élévé) par rapport à la contrainte. Ce problème est particulier, car l’objectif (W
ou C) est uniquement déterminé par le nombre total de plis et le matériau dont est
composé chacun de ces plis. L’orientation des plis, quant à elle, a un effet direct sur
les contraintes (fréquence ou flambement) mais son effet est indirect sur l’objectif du
problème. En effet, une variation de l’orientation ne peut faire varier le poids ni le coût
d’un stratifié. Cependant, si pour un nombre de plis donné et une série de matériaux
donnée, c’est-à-dire pour un chromosome matériau (Ω2 ) fixe, on favorise les stratifiés
dont les orientations permettent de satisfaire davantage les contraintes, l’algorithme
pourra peut-être par la suite éliminer un pli tout en satisfaisant encore ces contraintes.
C’est à ce moment seulement que l’effet de l’orientation affectera l’objectif de l’optimi-
sation. C’est pourquoi il est nécessaire de différencier les solutions entre elles en fonction
de la marge que celles-ci présentent par rapport aux contraintes.
(
−f (x)(1 − βg(x)) si g(x) ≥ 0
F (x) = (5.1)
−f (x) + λg(x) sinon
Minimiser : W ou C
En changeant : l’orientation (θk ) et le matériau des plis (matk )
θk = {0, ±45, 90},
matk = {carbone/époxy (C–E), verre/époxy (V–E)}
Sous les contraintes : – symétrique et équilibré
– λf c ≥ λmin ou fn ≥ fmin
Tab. 5.6 – Définition de l’objectif f (x) et des contraintes g(x) des problèmes (i) à (iii)
Les résultats des problèmes (i), (ii) et (iii) sont donnés dans les tableaux 5.8, 5.9
et 5.10 respectivement. Dans ces tableaux, on rappelle qu’une orientation soulignée
signifie un pli composé du matériau verre–époxy, tandis qu’une orientation qui ne l’est
pas signifie un pli composé de carbone–époxy. De plus, les solutions optimales pour les
différentes valeurs de contraintes sont données de même que le nombre de plis total,
le nombre de plis de chaque matériau (C–E/V–E), le coût C, le poids W , la fréquence
naturelle (fn ) et le facteur de flambement critique (λf c ). De plus, le nombre total
d’appels de la fonction d’évaluation (nf ) nécessaire à la convergence de l’algorithme est
aussi donné. En effet, compte tenu de la mécanique pseudo-aléatoire de l’algorithme
génétique, le nombre de générations nécessaire à la convergence diffère d’un essai à
l’autre. C’est pourquoi des moyennes sont calculées avec 50 lancements distincts du
programme.
légers que ceux de verre–époxy et que des plis orientés à ±45◦ permettent l’obtention
d’une plus grande fréquence naturelle (fn ), c’est-à-dire d’un plus grand g(x), compara-
tivement aux autres orientations (0◦2 ou 90◦2 ). En effet, la fonction d’évaluation utilisée
(voir équation (5.1)) bonifie f (x) en ajoutant une quantité proportionnelle à β et à
g(x) lorsque les contraintes sont respectées. D’autre part, lorsque la contrainte sur la
fréquence naturelle minimale (fmin ) augmente, l’épaisseur totale augmente aussi pas-
sant de 24 à 40 plis pour des fmin pasant de 25 Hz à 45 Hz. À ce moment, le poids passe
de 33,75 N à 56,26 N. De plus, il faut doubler, en moyenne, le nombre de générations
(ngen ) nécessaire afin d’obtenir la solution optimale entre ces mêmes fréquences mini-
males. Cette variation dans le coût de calcul est causée par l’augmentation du nombre
de gènes à déterminer lorsque l’épaisseur des stratifiés augmente.
Le programme génère à tous les coups une solution optimale pour les trois premières
fréquences naturelles minimales (25, 30 et 35 Hz). C’est-à-dire qu’à toutes les fois le
meilleur design de la population finale est celui donné dans le tableau 5.8. Pour les
deux autres problèmes, une solution quasi optimale est obtenue à tous les coups. En
fait, l’algorithme génétique trouve une fois sur 50 une solution voisine du design optimal
à seulement un gène de différence. Par exemple, pour le problème où fmin vaut 40 Hz,
l’algorithme génétique a généré une fois sur les 50 essais la solution [±458 , 902 ]s . Cette
solution est voisine d’un seul gène car si on remplace le gène représentant un pli à 902
de ce design par un autre désignant un pli à ±45, on obtient la solution optimale. De
plus, cette solution a le même poids minimal que le design optimal et ne varie que d’un
centième au niveau de la fréquence naturelle. Donc, d’un point de vue pratique, les
solutions générées pour ce problème sont toutes des optimums pratiques. D’une façon
générale, on considère une solution comme étant un voisin à n gènes près d’un optimum
78
On remarque aussi que pour les valeurs des contraintes étudiées, les stratifiés op-
timaux sont plus épais que ceux du problème précédent, car ils comptent de 36 à 52
plis comparativement à 24 et 40 plis. Le poids des stratifiés varie alors de 50,63 à
73,14 N. De plus, comme l’épaisseur de la plupart des designs est plus grande que ceux
du problème (i), le nombre de gènes définissants les individus optimaux est plus élevé
et cela a pour effet d’augmenter le coût de calcul moyen. Ce coût est maintenant de
l’ordre de 14, 0 × 103 à 27, 0 × 103 appels de la fonction d’évaluation comparativement
à 10, 0 × 103 et 20, 0 × 103 .
dans le tableau, (λmin = 125) est aussi obtenue à toutes les fois sauf à trois occasions
où l’algorithme génère des solutions voisines de l’optimum d’un seul gène. Comme
auparavant, on considère ces solutions comme des optimums pratiques de ce problème.
Le design optimal compte alors 4 plis de plus que pour le premier sous-problème, soit
un gène de plus dans chaque chromosome, et le poids est de 56,26 N et le facteur de
flambement est de 131,20.
Pour le troisième sous-problème, où λmin vaut 225, le stratifié optimal compte 24
paires de plis de carbone–époxy orientés à ±45◦ pour un poids de 67,51 N et un facteur
de flambement de 226,71. Il compte alors 8 plis de plus que le sous-problème précédent,
soit deux gènes de plus par chromosomes. L’algorithme génétique génère la solution
optimale 26 fois sur 50, des solutions au poids minimal mais voisines d’un seul gène de
l’optimum 17 fois sur 50, des solutions voisines de deux variables de l’optimum 6 fois sur
50 et une fois sur 50 il génère un optimum pratique à 2% du poids minimal. En résumé,
le poids (W ) du meilleur individu de la population finale est minimal à 67,51 N, 49
fois sur 50. Les designs diffèrent alors seulement dans la séquence d’empilement ce qui
fait varier la valeur du facteur de flambement (λf c ). Pour la première fois, l’algorithme
génétique génère une solution dont le poids n’est pas optimal (W > 67.51 N). Le stratifié
généré est alors le suivant : [±459 , 902 , 902 , ±45]s . Il compte le même nombre de plis
que la solution optimale, mais il utilise un pli fait de verre–époxy ce qui a pour effet
d’augmenter le poids total du stratifié qui est alors de 68,87 N. Il est donc plus lourd
que l’optimum de 2%. Toutefois, cette solution peut encore être considérée comme un
optimum pratique à ce problème, car elle est à 2% près de l’optimum.
programme génère un design au poids optimal à tous les coups. Ce n’est que la séquence
d’empilement qui peut varier et alors affecter la valeur de la contrainte.
Finalement, on conclut que, pour le problème d’optimisation (ii), où l’objectif est
de minimiser le poids (W ) avec des contraintes sur le facteur de flambement (λmin =
90, 125, 225 et 275), le programme génère assurément un optimum pratique à 2% de
l’optimum.
L’objectif du problème (iii) est la minimisation du coût (C) avec une contrainte
sur la fréquence naturelle minimale (fmin ). Les résultats de ce problème sont donnés
au tableau 5.10. Comme on pouvait s’y attendre, le changement de l’objectif du poids
au coût (f (x) = C) favorise maintenant l’utilisation de plis faits de verre–époxy car ce
matériau est moins coûteux que le carbone–époxy. Toutefois, comme il est aussi moins
performant, les designs doivent être plus épais pour pouvoir respecter les contraintes.
En effet, pour une fréquence naturelle minimale de 25 Hz, il faut 22 paires de plis de
verre–époxy orientés à ±45◦ comparativement à 12 paires de plis de carbone–époxy
(voir tableau 5.8). On constate alors qu’il est moins coûteux d’utiliser un stratifié fait
d’un total de 44 plis de verre–époxy comparativement à un autre fait de 24 plis de
carbone–époxy. Cette remarque peut aussi être faite pour les autres valeurs de fmin .
est du second sous-problème (fmin = 30 Hz), la solution optimale est [±4513 ]s , son coût
est de 9,17 U, sa fréquence naturelle est de 31,76 Hz et elle compte 8 plis de plus que
celle du précédent sous-problème. Ce design optimal est obtenu intégralement 23 fois
sur 50. Tous les autres designs générés, sauf deux, sont des voisins de cet optimum
avec soit un ou deux gènes de différence. En effet, le programme génère 19 fois sur
50 un voisin d’un seul gène du chromosome orientation et 6 fois sur 50 un voisin de
deux gènes de ce même chromosome. Pour ces dernières solutions, le coût est le même
que la solution optimale qui est 9,17 U. Ce n’est que la fréquence naturelle qui varie
d’un voisin à l’autre. Donc, l’objectif de minimisation du poids est atteint pour celles-
ci. Toutefois, lors de deux essais, l’algorithme génétique n’a pu trouver une solution
quasi optimale. En effet, les designs générés ont alors un coût de 10,89 U. Ces solutions
sont donc à 18,8% de l’optimum ce qui est trop élevé pour les considérer comme des
optimums pratiques. Toutefois, on remarque que ces stratifiés sont aussi des voisins
de la solution optimale, car seulement un ou deux gènes les distinguent de la solution
optimale. Toutefois, ces designs contiennent tous un gène définissant un pli fait de
carbone–époxy comparativement à aucun pour l’optimum. Par conséquent, l’impact de
ce gène sur l’objectif est grand, car ce matériau fait varier le coût de façon importante.
C’est pourquoi on ne peut les considérer comme des optimums pratiques, et ce, même
si ces dernières solutions sont de proches voisins de l’optimum. Dans ce cas précis, il
aurait fallu que l’algorithme génétique modifie le gène définissant le carbone–époxy du
chromosome matériaux ce qui aurait eu pour effet d’améliorer grandement l’objectif du
problème par une diminution du coût. Toutefois, comme l’algorithme se base sur des
processus décisionnels aléatoires, on note que cette modification n’a pas été faite avant
l’atteinte du critère d’arrêt.
Pour le troisième sous-problème, où fmin vaut 35 Hz, il faut ajouter encore 8 plis
comparativement au sous-problème précédent afin de respecter la nouvelle contrainte.
Le coût minimal est de 10,58 U tandis que la fréquence naturelle est de 36,64 Hz. Tous
les meilleurs individus des populations finales ont un coût minimal de 10,58 U sauf lors
de trois essais. Le design 3, donné au tableau 5.10, est obtenu intégralement à 8 reprises.
Les autres solutions, au poids minimal, sont des voisins à n gènes près de celui-ci, où n
varie de 1 à 4 au niveau des gènes du chromosome orientations. Par conséquent, c’est
seulement la valeur de la fréquence naturelle qui diffère de l’optimum. Toutefois, à trois
occasions, le programme ne réussit pas à définir le bon chromosome de matériaux. En
effet, les designs comptent un pli de carbone–époxy et les stratifiés prennent la forme
[±45, ±4511 ]s . À ce moment, le stratifié présente un coût total de 12,30 U ce qui est
82
Lorsque fmin vaut 40 Hz, le stratifié au coût minimal compte 68 plis de verre-époxy
soit 8 de plus que pour un fmin de 35 Hz. Son coût est alors de 11,99 U, son poids est
de 118,72 N et sa fréquence naturelle est de 41,53 Hz. L’obtention de cette solution
optimale est plus difficile que pour les sous-problèmes précédents. En effet, 17 fois sur
les 50 essais, le programme a généré sur une solution non optimale. Le coût de ces
solutions est supérieur de 6% à 40% à celui de l’optimum, c’est-à-dire qu’ils ont des
coûts variant de 12,70 U à 16,93 U. Donc, pour ce problème la probabilité d’obtention
d’une solution quasi optimale à 5% de l’optimum est de 0,66.
Voici maintenant le problème (iv) qui est similaire aux problèmes précédents mais
qui compte une contrainte supplémentaire. En effet, l’objectif est la minimisation du
coût (C) et deux contraintes sont imposées sur le facteur de flambement critique
(λf c (x) ≥ λmin ) et sur le poids maximal (W (x) ≤ Wmax ). La formulation générale du
problème (iv) est donnée au tableau 5.11. La fonction d’évaluation des individus F (x)
est bâtie de façon semblable à celles des problèmes précédents (voir équation (5.1)) mais
elle est modifiée pour tenir compte de la contrainte supplémentaire (voir équation (5.4)).
83
C’est-à-dire qu’une forme de bonification (β) est aussi incluse pour les solutions res-
pectant les contraintes, mais comme il y en a deux, une définition plus générale est
nécessaire. En effet, on accorde une bonification seulement lorsque les deux contraintes
sont respectées simultanément. À ce moment, l’équation (5.5) est nulle. La bonification
est alors proportionnelle à wc (voir équation (5.6)) qui est la somme des marges des
deux contraintes par rapport à leurs limites (voir équation (5.7)). De cette façon, un
individu violant l’une des contraintes est assurément pénalisé peu importe la valeur de
la marge g(x) de l’autre contrainte. La pénalisation se fait alors proportionnellement à
S qui est la somme des valeurs de gi (x) des contraintes qui sont violées.
Minimiser : C
En changeant : l’orientation (θk ) et le matériau des plis (matk )
θk = {0, ±45, 90},
matk = {carbone/époxy (C–E), verre/époxy (V–E)}
Sous les contraintes : – symétrique et équilibré
– λf c (x) ≥ λmin
– W (x) ≤ Wmax = 85 N
(
−f (x)(1 − βgc ) si S = 0
F (x) = (5.4)
−f (x) + λS sinon
s
X
S= min(0, gi (x)) (5.5)
i=1
s
X
gc = gi (x) (5.6)
i=1
g1 (x) = λf c (x)/λmin − 1 ≥ 0
(5.7)
g2 (x) = 1 − W (x)/Wmax ≥ 0
84
Les résultats du problème (iv) sont donnés au tableau 5.12 pour différentes valeurs
de λmin . Tout d’abord, on remarque que l’utilisation des deux matériaux est nécessaire
afin de construire la plupart des solutions optimales. Pour une limite λmin de 90, la
solution au coût minimal est composée de 4 plis de carbone–époxy (C–E) et de 40
plis de verre–époxy (V–E). Le poids (W ) est alors de 75, 46 N et λf c vaut 90, 75.
En augmentant la contrainte à 150 (solution 2), un gène à ±45◦ de C–E est ajouté,
équivalent à l’ajout de quatre plis de C–E car chaque variable représente quatre plis,
et une autre de V–E est convertie en C–E. Les plis de C–E sont ajoutés à l’extérieur
du stratifié là où leur rigidité a le plus d’impact. La solution optimale compte alors 12
plis de C–E et 36 plis de V–E. Pour passer de la solution 2 à la solution 3, c’est-à-dire
de λmin valant 150 à 250, il faut ajouter 12 plis de C–E à la solution 2 et éliminer 8
plis de V–E. Le stratifié optimal compte alors 52 plis, quatre de plus que le précédent,
et son poids s’approche de la limite de 85 N et vaut 82,64 N.
Tab. 5.12 – Résultats du problème (iv) : minimisation du coût (f (x) = C) avec des
contraintes sur le facteur de flambement (λmin ) et une limite sur le poids de 85 N
Le stratifié 4 compte aussi quatre plis de plus que le précédent (solution 3) soit un
nombre total de 56 plis. Toutefois, la solution viole la contrainte g2 (x) (voir l’équa-
tion (5.7)) sur le poids car W (x) vaut 85,55 N. Comme cette contrainte est violée, la
valeur de S de l’équation (5.5) est non-nulle car g2 (x) est inférieure à 0. Dans ce cas,
l’algorithme ne cherche pas à trouver des solutions pour lesquelles λf c est élevé car
la formulation ne lui permet pas. En effet, comme S est non-nulle, l’attribution de la
valeur de la performance F (x) dans l’équation (5.4) se fait par la formulation pénalisée.
Par conséquent, il n’est pas possible de bonifier, avec le facteur de bonification β de
85
l’équation (5.4), les solutions performantes au niveau des contraintes comme c’est le
cas lorsque S vaut 0, soit lorsque toutes les contraintes sont respectées. Un exemple
parmi les multiples solutions obtenues est alors donné au tableau 5.12 (solution 4) pour
lequel la contrainte sur λf c est satisfaite à 300, 78. L’algorithme converge alors vers des
stratifiés composés de 36 plis de C–E et de 20 plis de V–E et ce même si l’objectif est
pénalisé. En effet, comme la violation de la contrainte est minime (S = 6, 47 × 10−3 ),
il est plus favorable de pénaliser cette solution que de remplacer un pli de verre–époxy
par un pli de carbone–époxy afin de pouvoir respecter les contraintes. En effet, la
pénalisation augmente le coût de 3,235 U tandis que le changement des plis augmente
le coût de 3,841 U. L’algorithme a donc convergé vers le bon optimum. Toutefois, il n’a
pu générer une solution avec un grand λf c ne violant pas les contraintes. Afin d’exclure
les solutions violant les contraintes, il faudrait alors pénaliser davantage ces solutions
en augmentant le facteur de pénalisation λ.
Cette situation ne survient pas pour les autres valeurs de λmin . La solution 5 (C =
48, 28 U) compte aussi un total de 56 plis, 40 de C–E et 16 de V–E et les deux contraintes
sont satisfaites (W = 84.19 N et λf c = 354.64). Finalement, la solution 6 coûte 68.19 U
et compte 60 plis de C–E seulement (W = 84.39 N et λf c = 442.79). Donc, plus la
contrainte sur λmin est importante, plus le coût total du stratifié augmente afin de
pouvoir respecter les contraintes.
forme pénalisée ne permet pas la recherche de solutions avec une grande marge par rap-
port aux contraintes comme c’est le cas lorsque S est nulle avec l’utilisation du facteur
de bonification β. C’est donc pourquoi le coût de calcul est faible comparativement aux
autres, car le programme ne peut déceler de différence entre des individus représentant
des stratifiés d’empilements différents, mais composés d’une même proportion de plis
de chaque matériau (36 de C–E et 20 de V–E) et qui respectent l’autre contrainte sur
le flambement. À ce moment, le critère d’arrêt est atteint plus rapidement car aucune
amélioration subséquente n’est possible.
En poussant un peu plus loin l’analyse du résultat 4 du tableau 5.12, qui viole une
des deux contraintes, on peut songer à modifier la formulation de l’objectif afin de rendre
plus flexible l’évaluation des contraintes. En effet, d’un point de vue pratique, il peut
être convenable d’accepter une solution au poids de 85,55 N. Effectivement, cette so-
lution viole la contrainte de seulement 0, 6% et représente un excès d’une cinquantaine
de grammes par rapport à la limite de 85 N. En ce sens, on peut utiliser une for-
mulation permettant l’acceptation de solutions violant légèrement les contraintes (voir
équation (5.8)) afin de produire des résultats se rapprochant davantage des besoins pra-
tiques de l’utilisateur. Cette formulation a donc pour but de relaxer les contraintes d’un
certain intervalle δ. Ainsi, pour un δ valant 0,01, on considère alors comme acceptable
des solutions violant les contraintes de 1%.
g1 (x) = λf c (x)/λmin − 1 + δ ≥ 0
(5.8)
g2 (x) = 1 − W (x)/Wmax + δ ≥ 0
Le problème (v) est le même problème que (iv) sauf qu’il est résolu avec l’équa-
tion (5.8). Les résultats de ce problème sont présentés au tableau 5.13. On remarque
que le coût minimal des quatre premières solutions est identique à celui des solutions
du tableau 5.12 et que les deux derniers sont moindres. On remarque aussi que la
solution 4 (λmin = 300) n’est plus pénalisée par la nouvelle formulation. La recherche
d’un stratifié avec un λf c élevé peut alors se faire. Pour ce problème, le λf c du design
optimal vaut donc 349.52. Cette nouvelle solution modifie par le fait même la solution
optimale du problème 5, où λmin vaut 350, comparativement à la solution 5 du tableau
précédent. En effet, comme le stratifié [±459 , ±455 ]s possède un λf c de 349.52 et que
cette valeur est à l’intérieur de la borne relaxée par δ = 0.01 de λmin , elle est aussi la
87
solution optimale du problème 5. Cette solution est optimale même si elle viole les deux
contraintes. En effet, comme la nouvelle formulation permet d’accepter des solutions
violant légèrement les contraintes, contrairement à l’ancienne formulation, ces solutions
ont pu être conservées par l’algorithme, car la violation est inférieure à 1% (δ = 0.01).
Cette solution est effectivement avantageuse par rapport à la solution 5 du tableau 5.12
car elle coûte moins chère de 3,84 U. La solution optimale du problème 6 (λmin = 375)
est aussi différente et moins coûteuse, car on peut remplacer un pli de carbone–époxy
par un pli de verre–époxy afin de diminuer le coût total et ce, même si le poids augmente
à 85,74 N. Cela est possible car cette solution viole la contrainte de seulement 0, 9%
qui est inférieur au δ de 1% permis.
posées. Tout d’abord, on constate que l’algorithme génétique est efficace lorsqu’utilisé
pour la résolution de ces problèmes. De plus, on remarque que la performance du pro-
gramme varie en fonction des problèmes résolus. En effet, plus l’épaisseur des solutions
optimales est grande, plus il est difficile à l’algorithme de converger vers l’optimum à
tous les coups. Par exemple, l’algorithme réussit très bien à obtenir les solutions opti-
males pour le problème (i), qui compte des designs optimaux d’épaisseur variant de 24
à 40 plis. Pour de telles épaisseurs, il faut définir deux chromosomes (orientations et
matériaux) de 6 et 10 gènes pour un total de 12 et 20 variables respectivement. Quant au
problème (iii), il faut définir de 22 à 38 variables. Il est donc concevable que la recherche
soit plus difficile et plus coûteuse à effectuer et c’est effectivement ce que l’on remarque
en observant les résultats. Par la suite, on s’aperçoit que l’ajout d’une contrainte au
problème n’affecte pas la capacité de résolution du programme (voir problèmes de type
II). En effet, l’algorithme génétique génère les designs optimaux pour différentes valeurs
des contraintes à toutes les fois. De plus, pour ces problèmes (voir équation (5.8)) une
formulation générale de la fonction d’évaluation a été utilisée . Cette dernière permet la
considération de plusieurs contraintes et elle admet aussi une marge quant aux bornes
des contraintes. De cette façon, l’utilisateur peut rendre plus ou moins flexible la limite
des contraintes qu’il impose en permettant la considération de solutions les violant
légèrement. Étudions maintenant le comportement de l’algorithme génétique pour la
résolution de problèmes avec objectifs multiples.
différents objectifs.
La formulation du problème à objectifs multiples est faite avec l’aide d’une fonction
convexe entre le coût et le poids (C et W : équation (5.9)). Le facteur α est alors la
variable définissant le compromis entre les deux objectifs. En faisant varier ce facteur
de 0 à 1 et en procédant à plusieurs optimisations indépendantes, on obtient une série
de solutions optimales en fonction de α. Lorsque α vaut 0, l’optimisation à objectifs
multiples est alors équivalente à une minimisation du coût, et lorsque α vaut 1 à une
minimisation du poids. Entre ces deux valeurs, l’optimisation est une minimisation de
la somme pondérée de ces deux objectifs. La série de solutions optimales obtenue forme
alors une courbe de compromis entre le poids et le coût, appelée la courbe de Pareto.
La fonction d’évaluation des individus F (x) est la même que celle définie à la section
précédente (voir équation (5.4)), elle est réécrite ici à titre de rappel (équation (5.10)).
Avec celle-ci, on favorise les solutions qui respectent les contraintes proportionnelle-
ment à la marge de ces solutions par rapport aux contraintes (gi (x)). Cela est fait en
multipliant l’objectif f (x) par (1 − βwc ) où wc est la somme des s contraintes (voir
équation (5.11)) et ce, seulement si S est nul (voir équation (5.12)). Lorsque S est nul,
toutes les contraintes sont respectées et c’est à ce moment seulement que la bonification
des solutions est permise.
(
−f (x)(1 − βgc ) si S = 0
F (x) = (5.10)
−f (x) + λS sinon
s
X
gc = gi (x) (5.11)
i=1
s
X
S= min(0, gi (x)) (5.12)
i=1
tiples objectifs sont étudiés dans cette section. Ils sont formulés aux tableaux 5.14
et 5.15. Ils sont tous appliqués à des plaques équilibrées et symétriques telles que
données à la figure 5.1. Le choix des matériaux possibles est le même pour les deux
problèmes tandis que l’orientation possible des plis et les contraintes sont différentes.
Les propriétés des matériaux sont aussi les mêmes que pour les problèmes précédents
et sont données au tableau 5.2. Pour le choix des orientations, le problème (vi) compte
trois choix d’angle (02 , ±45 et 902 degrés) et des contraintes sur le flambement (λf lamb )
et sur la fréquence naturelle (fn ). La formulation générale des contraintes, définie à
la section précédente, est utilisée ici pour déterminer les valeurs de gi (x) des deux
contraintes. Dans ce cas δ vaut 0 (voir équation (5.13)). Le problème (vii) est inspiré
de Grosset et coll. [3] qui utilisent 19 choix d’orientation pour les plis (de 0◦ à 90◦
par incréments de 5 degrés) et une seule contrainte sur la fréquence naturelle (fn ). La
formulation de cette contrainte est donnée à l’équation (5.14). Le domaine du second
problème est alors beaucoup plus grand que pour le premier problème. La géométrie
des plaques, le chargement et les contraintes pour les deux problèmes sont donnés au
tableau 5.16. Finalement, il faut noter que, contrairement au problèmes précédents,
la variable W est donnée en livres (lbs) plutôt qu’en Newton (N) et que le coût des
matériaux du tableau 5.2 est donné en U/lbs plutôt qu’en U/kg. C’est-à-dire que le coût
du carbone–époxy est de 8 U/lbs tandis que le coût du verre–époxy est de 1 U/lbs.
Minimiser : W et C simultanément
En changeant : l’orientation (θk ) et le matériau des plis (matk )
θk = {0, ±45, 90},
matk = {carbone/époxy, verre/époxy}
Sous les contraintes : – symétrique et équilibré
– λf c (x) ≥ λmin
– fn (x) ≥ fmin
g1 (x) = λf c (x)/λmin − 1 + δ ≥ 0
(5.13)
g2 (x) = fn (x)/fmin − 1 + δ ≥ 0
91
Pour le problème (vi), le codage des chromosomes se fait de la même façon que
pour les problèmes de la section 5.1 (voir tableau 5.3). Le codage du problème (vii) se
fait d’une façon semblable mais il nécessite plus d’allèles afin de représenter le domaine
Ω1 des 19 orientations (voir tableau 5.17). Chaque orientation est codée comme un pli
double à ±θk afin de respecter la contrainte d’équilibrage des plis. Toutefois, comme les
plis d’orientation 0 et 90 degrés n’affectent pas le caractère équilibré du stratifié, Grosset
et coll. [3] proposent de ne pas doubler ces orientations pour former des empilements
doubles de 02 et 902 comme cela était fait dans les problèmes précédents. Ainsi, les
allèles 1 et 19 représentent respectivement des plis simples orientés à 0 et 90 degrés.
L’utilisation de ces orientations peut être intéressante car leur épaisseur équivaut à la
moitié de toute autre orientation à ±θk .
La résolution de ces problèmes est faite avec les mêmes paramètres que ceux utilisés
92
Domaine Variables/allèles
Ω1 (décodé) Pli vide 0 ±5 ±10 ±15 ±20 ±25 ±30 ±35 ±40
Ω′1 (codé) 0 1 2 3 4 5 6 7 8 9
Ω1 (décodé) ±45 ±50 ±55 ±60 ±65 ±70 ±75 ±80 ±85 90
Ω′1 (codé) 10 11 12 13 14 15 16 17 18 19
Ω2 (décodé) Pli vide C–E V–E
Ω′2 (codé) 0 1 2
jusqu’à présent, ils sont répétés au tableau 5.18. Les résultats du problème (vi) sont
donnés au tableau 5.19. On rappelle que dans ces tableaux, les plis de verre–époxy sont
soulignés tandis que ceux de carbone–époxy ne le sont pas. Premièrement, on remarque
que pour un α de 0, la solution optimale n’est composée que de plis de verre–époxy
orientés à ±45◦ . Ce résultat s’explique parce que l’optimisation à objectifs multiples,
avec un tel α, est équivalent à la minimisation du coût (C). À ce moment, l’utilisation
du verre–époxy est avantageuse au niveau du coût, tandis que les orientations à ±45◦
sont avantageuses au niveau des contraintes car elles permettent l’obtention de grandes
valeurs du facteur de flambement de même que de la fréquence naturelle.
Lorsque α vaut 0,3, l’objectif du problème est composé à 30% du poids (W (x))
et à 70% du coût (C(x)) du stratifié. À ce moment, il devient avantageux d’inclure
l’utilisation d’un certain nombre de plis de carbone–époxy à cause de leur performance
au niveau du poids et de la rigidité et ce, même s’ils sont plus coûteux comparativement
aux plis de verre–époxy. Les plis de C–E sont alors placés à l’extérieur du stratifié car
c’est à cette position qu’ils contribuent le plus au facteur de flambement et à la fréquence
naturelle du stratifié. Dans ce cas, la solution optimale compte alors 8 plis de carbone–
époxy et 32 plis de verre–époxy. Ce stratifié est moins épais de 8 plis par rapport au
93
Tab. 5.19 – Résultats du problème (vi) (f (x) = αW + (1 − α)C) avec une contrainte
sur la fréquence naturelle (fmin = 25 Hz) et sur la charge de flambement (λmin = 80)
design précédent, son poids est inférieur de 16,68 N et son coût est supérieur de 6,27 U.
mais c’est seulement la séquence d’empilement qui varie affectant les contraintes sur le
flambement et la fréquence naturelle.
Pour le problème (vii), on rappelle que la variable W est donnée en livres (lbs) plutôt
qu’en Newton (N) et le coût du carbone–époxy (C–E) est de 8 U/lbs tandis que le coût
du verre–époxy (V–E) est de 1 U/lbs. La résolution de ce problème est plus difficile
car le domaine est plus important. En effet, chaque chromosome compte 13 gènes et
le choix d’allèles pour le premier est de 20 et de 3 pour le second. Donc, le domaine
est constitué de 1, 3 × 1023 solutions possibles comparativement à 1, 8 × 1017 pour le
problème (vi). Les résultats sont donnés dans le tableau 5.20 pour les différentes valeurs
de α. Dans un premier cas, l’optimum compte 42 plis de verre–époxy. Pour arriver à
un tel total, il faut absolument inclure soit un gène représentant un pli à 0◦ ou un pli à
90◦ . En effet, l’utilisation d’un de ces plis est préférable à toute autre orientation, car il
n’est pas nécessaire d’utiliser des plis doubles à ±θ◦ comme c’est le cas pour les autres
valeurs pour respecter la contrainte d’équilibrage des plis du stratifié. De plus, il est
préférable d’inclure le pli à 90◦ au plan moyen, donc au dernier gène du chromosome
orientation, car de cette façon la fréquence naturelle est supérieure. Pour les autres
valeurs des gènes correspondant aux orientations, ils varient beaucoup d’une solution à
une autre. C’est pourquoi on définit le schème optimal (voir section 3.1) comme étant
[±#10 , 90]s , c’est-à-dire que les 10 premiers gènes du chromosome orientation peuvent
prendre différentes valeurs pourvu que la contrainte soit respectée et que le dernier gène
de ce chromosome corresponde à un pli à 90◦ . Le second chromosome doit absolument
désigner des plis de verre–époxy. Le poids et le coût du design optimal sont alors de
16,33 lbs et 16,33 U. Le programme génère des stratifiés optimaux 40 fois sur 50 et des
stratifiés quasi optimaux le reste du temps. Le poids de ces designs quasi optimaux est
alors de 17,10 U, ce qui est supérieur à l’optimum de 4,7%.
Tab. 5.20 – Résultats du problème (vii) (f (x) = αW + (1 − α)C) avec une contrainte
sur la fréquence naturelle (fmin = 25 Hz)
obtenu 32 fois sur 50 et est à 5,2% de l’optimum avec un f (x) de 15,54. On peut donc
considérer ce résultat comme un optimum pratique au problème. Finalement, l’autre
design est moins bon car il est à 11% de l’optimum avec un valeur de 16,33 pour f (x).
On ne peut donc pas le considérer comme un optimum pratique. On conclut alors que
le programme réussit à générer un optimum pratique, distant de 5,2% ou moins de
l’optimum, 37 fois sur 50.
Avec un α de 0,8, la solution optimale est de la forme [±#2 , 90, ±#4 ]s . Ce design
compte un total de 26 plis, dont 10 sont faits de carbone–époxy et 16 de verre–époxy.
Son coût est de 31,28 U et son poids est de 9,35 lbs. Donc, ce nouveau design est
plus léger de 2,79 lbs et plus coûteux de 10,37 U. Cela s’explique par le facteur α
qui augmente ce qui entraı̂ne une plus grande importance du poids dans l’objectif par
rapport au coût. Les trois premiers gènes du chromosome matériaux définissent des plis
de carbone–époxy tandis que les quatre derniers désignent des plis de verre–époxy. Le
troisième gène du chromosome orientation est fixé pour définir un pli à 90◦ parce que
cette orientation compte une épaisseur de moins par rapport aux autres angles. Cela
permet donc de diminuer le coût en éliminant des plis du matériau le plus dispendieux.
De plus, cette orientation est insérée à la position trois de la séquence d’empilement
pour être le plus près possible du plan moyen par rapport aux autres orientations de
ce même matériau. Cela est ainsi fait pour diminuer l’effet négatif qu’entraı̂ne, sur le
contrainte, l’utilisation d’une telle orientation. En effet, comme le calcul de la fréquence
naturelle se fait en fonction de la distance par rapport au plan moyen de chaque pli
(voir équation (2.28)) et qu’une orientation à 90◦ est peu performante à ce niveau, il est
96
moins pénalisant de la rapprocher du plan moyen par rapport aux autres orientations
plus performantes. Le programme est plus constant pour générer des solutions optimales
pour ce problème. En effet, 35 fois sur 50 il réussit à produire un stratifié comprenant
le schème donné dans le tableau. Le reste du temps un optimum pratique est généré à
0,4% de l’optimum avec un f (x) de 13,79 comparativement à 13,74 pour l’optimum.
Pour un α de 1, le design optimal compte seulement des plis de C–E. C’est normal
étant donné que c’est seulement le poids qui intervient dans l’objectif. À ce moment,
le design optimal compte 22 plis, son poids est de 6,89 lbs et son coût est de 55,12 U.
Comparativement à un α nul, ce stratifié est 58% plus léger et 3,4 fois plus cher. De
plus, le schème du stratifié optimal doit compter un gène représentant un pli à 90◦ et
celui-ci est placé au plan moyen. Le programme génère une solution au schème optimal
40 fois sur 50. Toutefois, le meilleur individu des populations finales est quelquefois non
optimal. En effet, à neuf occasions la fonction d’évaluation du meilleur individu est à
9,1% de celui de l’optimum et à une occasion il est à 18,1%. Donc, pour ce problème
et avec un α de 1, le programme génère un design quasi optimal 40 fois sur 50.
97
5.3 Conclusion
Dans ce chapitre, l’algorithme génétique a été testé sur des problèmes d’optimisation
où l’orientation des plis était à déterminer de même que le matériau de ces plis ainsi
que le nombre total de ces plis. Pour ces problèmes, l’orientation et le matériau des plis
sont donnés à partir d’une liste de valeurs discrètes, trois ou 19 pour l’orientation et
deux pour les matériaux.
Hybridation de l’algorithme
génétique
98
99
similaire à celle de Lin et Lee [17] est abordée dans ces travaux. Cependant, le calcul des
stratifiés se fait analytiquement (voir chapitre 2) et aucune approximation de solution
n’est faite. De plus, une définition du voisinage originale et plus complète est proposée.
Dans ces travaux, l’algorithme génétique est hybridé avec une heuristique de re-
cherche dans le voisinage. La fonction de cette heuristique est de trouver des optimums
locaux autour de certains individus de la population afin d’améliorer leurs qualités.
Comme la mécanique de décision des algorithmes génétiques se base sur des principes
aléatoires, cette recherche fine peut être difficile à effectuer seulement avec l’algorithme
génétique. L’heuristique sert donc à combler cette faiblesse. L’algorithme génétique ma-
nipule alors des solutions déjà améliorées localement. Cela a pour effet de permettre la
génération de solutions encore plus avantageuses et ce plus rapidement.
Représentation Génération de la
génétique des population
stratifiés initiale
Évaluation
des individus
Classement
des individus
Création des enfants
Génération de Amélioration
Reproduction l’ensemble de locale
reproduction
Bassin
{B}
Modification du bassin
Mutation
Addition Non
de plis Convergence ?
Oui
Soustraction Fin
de plis
Les individus considérés dans cette section sont composés de deux chromosomes, c1
et c2 , tels que montrés au tableau 6.1. Le premier contient les gènes représentant les
orientations tandis que le second regroupe les gènes définissant le matériau des plis. Par
conséquent, la définition du voisinage se fait en fonction de ces chromosomes et à partir
des connaissances que nous avons du problème. Dans cet exemple, le domaine des gènes
du chromosome c1 est Ω′1 = {1, 2, 3, 4} tandis que celui des gènes du chromosome c2 est
Ω′2 = {1, 2}. Donc, chaque pli peut prendre un choix entre quatre orientations et deux
matériaux.
Tab. 6.1 – Exemple d’un individu à deux chromosomes (Ω′1 = {1, 2, 3, 4}) et
Ω′2 = {1, 2})
Tout d’abord, une première série de voisins est définie à partir de modifications
faites au chromosome des orientations (c1 ) d’un individu x(c1 , c2 ). Le chromsosome des
matériaux (c2 ) reste alors intact. Ces modifications sont faites de façon à vérifier s’il
y a une orientation, voisine dans le domaine Ω1 , qui permet une amélioration de la
performance de l’individu. Cette façon de faire a pour but de faciliter la recherche fine
autour de certains individus de la population. L’algorithme génétique de base, quant
à lui, ne peut y arriver qu’avec l’utilisation de l’opérateur de mutation. Cependant,
cet opérateur mute un gène par n’importe quelle valeur appartenant au domaine Ω′1
selon la même probabilité. Par conséquent, plus la taille du domaine de ce gène est
grande, plus la probabilité qu’un gène soit muté par son voisin est faible. C’est donc
pour contrer ce comportement que ce voisinage est utilisé.
Pour déterminer ce type de voisins à partir d’un individu donné, on tire un nombre
aléatoire a. Ce nombre est compris entre 1 et ng , le nombre total de gènes du chro-
mosome. Ce nombre sert alors à déterminer la quantité de gènes à partir desquels le
voisinage sera défini. Par conséquent, un nombre a de gènes du chromosome c1 sont
102
x(c1 ) 4 2 3 1 2 4 2 2 1
y1 (c1 ) 4 2 3 1 1 4 2 2 1
y2 (c1 ) 4 2 3 1 3 4 2 2 1
les cinq allèles 1 aux cinq premiers gènes du chromosome et les quatre allèles « 2 » aux
gènes suivants. C’est l’inverse qui est fait pour créer le voisin y2 . Donc, tous les allèles
« 2 » sont placés au début du chromosome tandis que les allèles « 1 » sont placés à la
suite. D’autre part, si le domaine Ω′2 compte trois gènes alors six voisins seront définis
suivant le même principe. Après cette étape, on complète les voisins du chromosome
matériaux avec le chromosome c1 non modifié, et ces nouveaux individus sont évalués
avec la fonction d’évaluation. S’il y a amélioration, cette solution est alors considérée
et remplace l’individu initial dans la population.
Tab. 6.3 – Définition du voisinage à partir du chromosome matériaux (c2 et Ω′2 = {1, 2})
x(c2 ) 1 2 1 2 1 2 1 1 2
y1 (c2 ) 1 1 1 1 1 2 2 2 2
y2 (c2 ) 2 2 2 2 1 1 1 1 1
Finalement, une dernière série de voisins est définie à partir des chromosomes c1
et c2 d’un individu x(c1 , c2 ). Ce voisinage a été défini afin de contrer le comporte-
ment de l’algorithme génétique de base, qui a tendance occasionnellement à rester
pris autour d’optimums locaux. Les schèmes de ces optimums locaux ont certaines ca-
ractéristiques qui empêchent l’algorithme de base d’en sortir lorsque ceux-ci deviennent
prédominants dans la population. En effet, dans certains cas, le seul moyen d’y arriver
est de procéder à plusieurs opérations consécutives sur un même individu. Par exemple,
appliquer subséquemment l’opérateur de mutation afin de muter un gène en particu-
lier du chromosome matériau, pour ensuite appliquer l’opérateur d’addition de plis afin
d’ajouter une épaisseur de ce même matériau. La réussite subséquente de ces opérations
est peu probable lorsque les décisions sont prises aléatoirement et voir même impossibles
lorsqu’il faut ajouter plus d’une épaisseur par exemple. En effet, l’opérateur d’addition
de plis ne permet l’ajout que d’une seule épaisseur à la fois. Donc, ce voisinage est
utilisé afin d’empêcher l’algorithme génétique, s’il y a lieu, d’être bloqué dans ce genre
d’optimum local. Ce type de voisinage est défini de la façon suivante.
Tout d’abord, on crée deux voisins lorsque le chromosome c2 contient deux allèles
différents (Ω′2 = {1, 2}). Ces voisins sont définis en procédant à deux modifications
subséquentes sur c2 suivie d’une seule sur c1 . Tout d’abord, une mutation est faite
pour modifier le premier gène du chromosome c2 pour le remplacer par l’autre allèle
104
présent dans ce même chromosome. Ensuite, un gène est ajouté à la dernière position
et prend la même valeur que celle qui a été attribuée au gène muté. Le second voisin
est créé de la même façon, mais avec le prochain gène qui est différent du premier.
Finalement, on complète les voisins par le chromosome c1 auquel un gène est ajouté à
la dernière position qui prend une valeur attribuée aléatoirement à partir du domaine
Ω′1 . Le tableau 6.4 donne un exemple des voisins y1 et y2 déterminés en fonction des
chromosomes c1 et c2 de l’individu x. Donc, le premier gène du chromosome c2 dont
l’allèle est différent de « 0 » est le troisième (v3 ). Celui-ci contient alors l’allèle « 1 ».
Dans le premier voisin, ce gène est muté pour prendre l’allèle « 2 » et un gène est aussi
ajouté à la dernière position du chromosome et prend aussi l’allèle « 2 ». Pour le second
voisin, on considère le gène suivant du chromosome c2 qui est différent du premier, soit
le gène v5 qui porte l’allèle « 2 ». Ce gène est alors muté et l’allèle « 1 » lui est assigné.
De plus, un gène est ajouté à la fin du chromosome portant ce même allèle « 1 ». Ces
deux voisins sont ensuite complétés avec le chromosome c1 auquel un gène a été ajouté
à la dernière position et qui a été déterminé de façon aléatoire. Ce gène prend l’allèle
« 3 » dans cet exemple. En résumé, les voisins comptent une épaisseur de plus, soit un
gène portant l’allèle « 0 » de moins, et le premier voisin (y1 ) compte deux plis de plus
du matériau représenté par l’allèle « 2 » et un pli de moins du matériau représenté par
l’allèle « 1 » tandis que c’est l’inverse pour le second voisin (y2 ). Celui-ci compte alors
deux plis de plus du matériau relatif à l’allèle « 1 » et un pli de moins du matériau
relatif à l’allèle « 2 ».
c1 c2
x 0 0 4 2 3 1 2 4 2 2 1 0 0 1 1 2 2 1 2 1 1 2
y1 0 4 2 3 1 2 4 2 2 1 3 0 2 1 2 2 1 2 1 1 2 2
y2 0 4 2 3 1 2 4 2 2 1 3 0 1 1 1 2 1 2 1 1 2 1
105
Les paramètres des prochains problèmes sont les mêmes que ceux utilisés au cha-
pitre précédent sauf à quelques occasions où ils diffèrent. Ces paramètres sont donnés
au tableau 6.5. Le premier paramètre qui varie est la probabilité de mutation accordée
à l’opérateur de mutation multiple qui est diminuée considérablement passant de 0,2
à 0,08. Avec cet opérateur, chaque gène d’un individu a la possibilité d’être muté. Par
conséquent, avec un probabilité de 0,2, la possibilité que plusieurs gènes d’un individu
soient mutés est élevée. Donc, cette diminution est désirée afin d’atténuer l’effet de la
mutation qui altérait trop les gènes des individus. Ensuite, la probabilité de permutation
est augmentée à 0,8 comparativement à 0,2. Le but de ce changement est d’augmenter
la fréquence d’application de cet opérateur afin de permettre la recherche de la séquence
d’empilement optimale au problème en inversant la position de certains gènes d’un in-
dividu. La probabilité d’application de l’opérateur d’addition de plis est la même tandis
que celle de l’opérateur de soustraction de plis est doublée valant maintenant 0,2. Fi-
nalement, le critère d’arrêt est diminué à 100 générations sans amélioration du meilleur
individu de la population. Il était fixé à 600 auparavant. Cette importante diminu-
tion résulte de l’approche hybride qui nécessite moins de générations pour converger.
Toutefois, pour comparer la performance des deux méthodes, au niveau du nombre
moyen d’appels de la fonction d’évaluation nf , il faut tenir compte de ce changement.
Pour se faire, on compare plutôt le nombre d’appels de la fonctions d’évalution lorsque
la solution finale est atteinte, sans tenir compte du coût occasionné par l’atteinte du
critère d’arrêt. Avec l’algorithme génétique de base, le nombre d’appels de la fonction
d’évaluation est constant à chaque génération. En effet, à toutes les générations, 15 en-
fants sont créés et ensuite évalués. Donc, pour les coûts (nf ) donnés dans les tableaux
du chapitre précédent, il faut soustraire 9000 avant de procéder à la comparaison, soit
15 fois 600 générations. Ces nouveaux coûts sont donnés dans les tableaux suivants sous
la notation nf tandis que ceux du programme hybride sont donnés sous la notation n′f .
Les résultats et les statistiques de l’algorithme génétique hybride ont été compilés après
avoir lancé 50 fois le programme, et ce, pour tous les sous-problèmes.
106
Le tableau 6.9 compare le coût de calcul pour la résolution du problème (iv) (voir
tableau 5.12) entre la méthode hybride et celle de base. La diminution du coût de
calcul est considérable variant de 87% à 94%. La probabilité d’obtention de la solution
optimale est parfaite pour tous les problèmes, c’est-à-dire que la solution optimale est
obtenue à toutes les occasions et ce pour toutes les valeurs de λmin .
La comparaison entre les coûts de calcul des deux programmes pour la résolution
du problème (v) (voir tableau 5.12) est faite au tableau 6.10. La diminution du coût
de calcul est encore une fois significative variant de 87% à 94%. Une fois de plus,
l’algorithme génétique hybride réussit à générer la solution optimale dans ce tableau à
tous les coups.
Le tableau 6.11 donne les résultats obtenus par le nouveau programme hybride lors
de la résolution du problème (vi) (voir section 5.2). L’amélioration du coût de calcul est
109
appréciable avec l’algorithme génétique hybride qui permet alors une diminution variant
de 85% à 96% au niveau du nombre d’appels de la fonction d’évaluation. De plus, le
meilleur individu de chacune des populations finales représente toujours les stratifiés
donnés dans le tableau. Donc, le programme converge toujours vers la solution optimale.
Tab. 6.11 – Résultats du problème (vi) (f (x) = αW + (1 − α)C) avec une contrainte
sur la fréquence naturelle (fmin = 25 Hz) et sur la charge de flambement (λmin = 80)
α Empilement n′f nf %
(tab. 5.19) de réd.
0,0 [±4512 ]s 594 17168 96%
0,30 [±452 , ±458 ]s 711 19103 96%
0,50 [±454 , ±455 ]s 974 17224 94%
1,0 [±459 ]s 700 4587 85%
Le tableau 6.12 donne les résultats obtenus par l’algorithme génétique hybride utilisé
pour la résolution du problème vii (voir section 5.2). Tout d’abord, on remarque que le
coût de calcul est diminué considérablement. En effet, la réduction du nombre d’appels
de la fonction d’évaluation est de 64% à 88% comparativement à la version précédente
du programme. De plus, la qualité des résultats est aussi améliorée. On le remarque au
niveau du chromosome orientation où le programme a su déterminer les gènes permet-
tant une grande marge par rapport à la contrainte. Dans ce cas, ce sont des plis orientés
à ±50◦ qui permettent l’obtention d’une plus grande fréquence naturelle. Avec l’algo-
rithme génétique utilisé précédemment, il était difficile de déterminer ces gènes, car
la liste d’orientation possible est grande (19) et que, lorsque le nombre de générations
est élevé, c’est seulement l’opérateur de mutation qui pouvait permettre l’identification
de ces gènes. Ce n’est plus le cas avec l’algorithme hybride, car la recherche dans le
voisinage vérifie s’il n’y a pas des orientations voisines qui permettent une plus grande
valeur de la fonction d’évaluation. Par conséquent, l’identification des gènes à ±50◦
peut se faire et c’est pourquoi toutes les orientations des empilements donnés dans le
tableau, autres que celles à 90◦ , sont à ±50◦ . On rappelle ici que l’utilisation d’un gène
représentant un pli à 0◦ ou à 90◦ permet de diminuer de deux plis l’épaisseur totale
du stratifié comparativement à toute autre orientation. En effet, il n’est pas nécessaire
de doubler ces orientations afin de respecter la contrainte d’équilibrage des stratifiés. Il
peut donc être avantageux de les utiliser afin de diminuer le poids et le coût. D’autre
110
part, un pli à 90◦ permet une fréquence naturelle légèrement supérieure à un pli orienté
à 0◦ , c’est pourquoi on ne retrouve pas de plis à 0◦ dans les solutions optimales.
Tab. 6.12 – Résultats du problème (vii) (f (x) = αW + (1 − α)C) avec une contrainte
sur la fréquence naturelle (fmin = 25 Hz)
α Empilements n′f nf %
(tab. 5.20) de réd.
0,00 [±5010 , 90]s 5378 15072 64%
0,70 [±50, ±507 ]s 5517 21712 75%
0,80 [±502 , 90, ±504 ]s 6459 32555 80%
0,90 [±503 , 90, ±502 , 90]s 5920 24728 76%
1,00 [±505 , 90]s 2755 23590 88%
En premier lieu, pour un α nul, le design donné dans le tableau 6.12 est obtenu
intégralement 36 fois sur 50. À 12 occasions, des designs au poids et au coût optimaux,
mais dont l’empilement diffère à une permutation près sont obtenus. Finalement, à
deux occasions le design [±509 , 903 ]s est généré. Ce stratifié possède aussi un coût et un
poids optimal, et ce, même s’il est représenté par des chromosomes comptant un gène
de plus chacun. Cela s’explique par le fait qu’il faut deux gènes pour représenter un
empilement à 90◦2 et un seul pour représenter un empilement à ±50◦ . C’est pourquoi
le nombre total de gènes est supérieur pour ce stratifié, mais que son épaisseur est la
même. Finalement, on conclut que le programme génère une solution au coût et au
poids optimaux à toutes les occasions.
Pour un α de 0,8, on obtient le stratifié [±502 , 90, ±504 ]s 24 fois sur 50. Tandis que
111
13 fois sur 50 c’est un design voisin d’une ou deux permutations qui est obtenu, mais
qui inclut deux plis à 90◦ . Lors des 13 autres occasions, c’est le stratifié [±502 , ±505 ]s
ou le [±502 , ±504 , 902]s qui est généré. La fonction d’évaluation de ces designs est alors
0,4% supérieure à celle de l’optimum. Par conséquent, on conclut que le programme
résout efficacement ce problème et des designs quasi optimaux à 0,4% sont obtenus à
toutes les occasions.
Pour un α de 0,9, le design donné dans le tableau est obtenu 25 fois sur 50. D’autre
part, le programme génère, lors de 22 des 50 essais, des stratifiés au poids et au coût
optimal voisin de seulement une ou deux permutations de gènes. Ces designs utilisent
alors une certaine quantité de plis à 90◦ pour remplacer ceux à ±50◦ . Finalement, à
deux occasions ce sont des individus à 1,9% de l’optimum qui sont obtenus et des
individus à 2,6% de l’optimum à une occasion. Par conséquent, le programme génère
des solutions quasi optimales à au moins 2,6% de l’optimum à toutes les fois. Enfin, le
stratifié [±505 , 90]s est obtenu à toutes les fois pour un α de 1.
6.3 Conclusion
Dans ce chapitre, l’algorithme génétique hybride a été testé sur les mêmes problèmes
d’optimisation définis dans le chapitre précédent. Les résultats obtenus par ce nouveau
programme ont alors été comparés à ceux obtenus par l’algorithme génétique standard.
À la suite de cet effort, il est maintenant possible de porter un jugement sur les modi-
fications apportées. On conclut alors que celles-ci sont très bénéfiques tant au niveau
de la qualité des résultats qu’au niveau du coût de calcul. Premièrement, pour tous les
problèmes, sauf le dernier (problème (vii)), la solution optimale est obtenue à toutes les
fois par le programme. C’est-à-dire, après avoir lancé le programme 50 fois pour tous
les sous-problèmes, la meilleure solution de la population finale est toujours la solution
optimale donnée dans les tableaux de résultats. Cependant, pour le problème (vii), les
résultats finaux diffèrent d’un essai à l’autre. La qualité des résultats est tout de même
très bonne et on conclut que le programme génère des solutions quasi optimales à 2,6%
à tous les coups. Deuxièmement, le coût de calcul est diminué considérablement, et
ce, pour chacun des problèmes. En effet, le nombre d’individus évalués par la fonction
d’évaluation est au moins inférieur de 57% à ce qui était nécessaire avec l’algorithme
génétique standard. Dans certains cas, la diminution est de l’ordre de 96%. On conclut
112
donc que l’inclusion d’une heuristique de recherche dans le voisinage, à même la struc-
ture de l’algorithme génétique, permet d’améliorer grandement la qualité des résultats
de même que la rapidité de résolution et ainsi que le coût de calcul. Par le fait même,
la définition du voisinage proposée semble adéquate pour ce genre de problèmes.
Conclusion
113
114
de problèmes différents.
Ensuite, un algorithme génétique hybride a été développé et testé sur les problèmes
déjà étudiés. Pour se faire, une heuristique de recherche dans le voisinage a été intégrée
à même la structure de l’algorithme génétique afin d’améliorer certains individus de la
population courante. L’utilisation de cette méthode de recherche dans le voisinage a
permis l’amélioration de la qualité des résultats et une diminution du coût de calcul.
Donc, à partir de ces résultats, on peut conclure que la définition du voisinage est
adéquate pour ce genre de problèmes. Toutefois, il serait pertinent de pousser plus loin
cette analyse afin de vérifier si cette définition du voisinage est toujours appropriée en
la testant sur une gamme de problèmes plus variée.
Aussi, comme il n’est pas nécessaire d’évaluer deux fois le même individu, il pourrait
être intéressant d’étudier la possibilité d’établir un mécanisme de contrôle sur les indi-
vidus déjà évalués afin d’éviter la répétition inutile de l’évaluation de cet individu. Cela
permettrait de diminuer le nombre de fois que l’on fait appel à la fonction d’évaluation.
Toutefois, cette façon de faire peut demander une capacité de stockage et un temps
de calcul accrus. C’est pourquoi une méthodologie envisagée pourrait être de conserver
en mémoire un nombre fixe de résultats, une centaine par exemple. Il faudrait ensuite
établir un critère qui permettrait de déterminer quand on ajoute un résultat dans la
base de données et lequel doit être enlevé une fois la limite de stockage atteinte. De
115
plus, il faudrait penser à utiliser une structure efficace, tel que les arbres binaire, afin
de faciliter la recherche dans cette base de données.
Enfin, lors de ces travaux, seulement un problème a été étudié avec des variables
continues. Il serait donc intéressant de refaire les autres problèmes en modifiant le do-
maine des orientations afin de vérifier les résultats et de les comparer. L’étude d’un plus
grand nombre de problèmes en continu permettrait de mieux évaluer le comportement
de l’algorithme génétique.
Bibliographie
116
117
[21] J.H. Holland. Adaptation in natural and artifical systems. Cambridge, Mass. :
MIT Press, 1992.
[22] L. Davis. Handbook of genetic algorithms. Van Nostrand Reinhold, 1991.
[23] Z. Michalewicz. Genetic alogrithms + data structures = evolution programs.
Springer-Verlag, 1992.
[24] Z. Gürdal, R.T. Haftka et P. Hajela. Design and optimization of laminated
composite materials. Wiley-Interscience, 1998.
[25] N. Kogiso, L.T. Watson, Z. Gürdal et R.T. Haftka. « Genetic algorithms
with local improvement for composite laminate design ». Structural Optimization,
7(4) :207–208, 1994.
Annexe A
%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Parametres de l’analyse %
%%%%%%%%%%%%%%%%%%%%%%%%%%%
param =[25,30,35,40,45,90,125,225,275,25,30,35,40,45,0.0,0.30,0.50,1.00,0.0,0.7,0.8,0.9,1.00,...
90,150,250,300,350,375,90,150,250,300,350,375]; % Liste de valeur pour alpha
119
120
ind = [ 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14, 15, 16, 17, 18, 19, 20, 21, 22, 23,...
24, 25, 26, 27, 28, 29,30, 31, 32, 33, 34, 35];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
popSize = 20; % taille de la population %
maxGen = 100; % nombre max d’iteration %
ME = 2; % 1--> ME1 : Nk meilleurs parents %
% 2--> ME2 : Nk meilleurs parmis parents et enfants
VE = 0; % 1 --> oui
% 0 --> non
VEd = 0.75; % Multi-élitisme variable 0 (aucun) %
Nk = 5; % nombre des meilleurs individus a selectionner (pour ME1 et ME2) %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
pen = 500;
alpha = param(i);
listeMat = 2;
%%%%%%%%%%%%%%%%%%%%%%
% Option d’affichage %
%%%%%%%%%%%%%%%%%%%%%%
trace = 0;
display = 1;
%%%%%%%%%%%%%%%%%%%%%%
% Option du MEGA %
%%%%%%%%%%%%%%%%%%%%%%
% Options de l’analyse (MEGA): [epsilon prob_ops display]
% prob_ops = 1 --> on applique les operateur un certain nombre de fois
% prob_ops = 0 --> on applique les operateur avec une certaine probabilite a chaque individus
evalOps = [listeMat alpha pen probleme]; % [#probleme autreOption] options pour la fonction objectif
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Appel fonctions principales %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
evalOps,megaOps,termFN,termOps,selectFN,selectOps,xOverFloatFNs,xOverFloatOps,xOverIntFNs,...
xOverIntOps,xOverBinFNs,xOverBinOps,mutFloatFNs,mutFloatOps,mutIntFNs,mutIntOps,mutBinFNs,...
mutBinOps,mutAddDelIntFNs,mutAddDelIntOps,elitistOps);
function [bounds,evalFN,selectFN,selectOps,xOverFloatFNs,xOverFloatOps,...
xOverIntFNs,xOverIntOps,xOverBinFNs,xOverBinOps,mutFloatFNs,...
mutFloatOps,mutIntFNs,mutIntOps,mutBinFNs,mutBinOps,mutAddDelIntFNs,...
mutAddDelIntOps,termFN,termOps,initOps] = defBoundsChrmoMulti(probleme)
switch probleme
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Options d’initialisation %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
nbGene = 4;
plisVide = 0;
initOps = [nbGene plisVide];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Definition de frontiere et du domaine %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
bounds = [0,90,0,0.1,4]; % 3 Chromosomes [continu;discret;discret]
% fin cas {1}
% Options d’initialisation %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
nbGene1 = 16; % par chromosome (--> nbPlis)
plisVide = 0;
initOps = [nbGene1 plisVide];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Definition de frontiere et du domaine %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 1 Chromosome [borneInf;borneSup;[Continu(0),Discret(1) ou Float(-1)]; precision]
bounds = [1,3,1,1,nbGene1];
% fin cas {34}
switch probleme
case {1}
%%%%%%%%%%%%%%%%%%%%%%
% FNs d’evaluation %
%%%%%%%%%%%%%%%%%%%%%%
evalFN = ’fctObjComposIt’; % nom de la fonction objectif
%%%%%%%%%%%%%%%%%%%%%%
% FNs de selection %
%%%%%%%%%%%%%%%%%%%%%%
selectFN = ’LinearRankingSelect’; % nom de la fonction de selection
selectOps = []; % options de la fonction de selection
%%%%%%%%%%%%%%%%%%%%%
% FNs de croisement %
%%%%%%%%%%%%%%%%%%%%%
%FLOAT
xOverFloatFNs = ’arithXover’; % simpleXover’; % nom des fonctions de croisements
xOverFloatOps = [1.0 3]; % options des fonctions de croisements [prob #essaisMax]
124
%INTEGER
xOverIntFNs = ’X1P’; % nom des fonctions de croisements
xOverIntOps = [1 3]; % options des fonctions de croisements [prob #essaisMax]
%BINAIRE
xOverBinFNs = ’X4P’;
xOverBinOps =[1 3];
%%%%%%%%%%%%%%%%%%%%%
% FNs de mutation %
%%%%%%%%%%%%%%%%%%%%%
%FLOAT
% nom des fonctions de mutation
mutFloatFNs = ’Permutation boundaryMutation multiNonUnifMutation nonUnifMutation unifMutation’;
Gmax = 300;
mutFloatOps = [0 0 0.3; 0 0 0.01 ; Gmax 3 0.02; Gmax 3 0.02 ; 0 0 0.02];
%INTEGER
mutIntFNs = ’Mutation Permutation’;
% ’MutAng MutMat PermAng PermMat AddMatAng DelMatAng’; % nom des fonctions de mutation
mutOps = 0.2;
permOps = 0.2;
mutIntOps = [1 mutOps ;1 permOps]; %;plisVide Integer perOps];
% options des fonctions de mutation
%BINAIRE
mutBinFNs = ’binaryMutation’;
mutBinOps = [0.3];
%%%%%%%%%%%%%%%%%%%%%
% FNs Add/DEL %
%%%%%%%%%%%%%%%%%%%%%
mutAddDelIntFNs = ’Addition Deletion’; %
addOps = 0.05;
delOps = 0.1;
mutAddDelIntOps = [1 addOps ;1 delOps];
%%%%%%%%%%%%%%%%%%%%%
% FNs d’arret %
%%%%%%%%%%%%%%%%%%%%%
termFN = ’TermNoImprove’;% ’TermMaxGen’; % ’TermPracticalOptimum’; %
termOps = []; % On defini le nombre max d’iteration ds MEGAstart
% fin switch problemes {1}
case {61,62,63,64,65,71,72,73,74,81,82,83,84,85,...
101,102,103,104,105,106,121,122,123,124,125}
% Operateurs de croisement et de mutation de l’algorithme
%%%%%%%%%%%%%%%%%%%%%%
% FNs d’evaluation %
%%%%%%%%%%%%%%%%%%%%%%
evalFN = ’fctObjComposIt’; % nom de la fonction objectif
%%%%%%%%%%%%%%%%%%%%%%
% FNs de selection %
%%%%%%%%%%%%%%%%%%%%%%
selectFN = ’LinearRankingSelect’; % nom de la fonction de selection
selectOps = []; % options de la fonction de selection
%%%%%%%%%%%%%%%%%%%%%
% FNs de croisement %
%%%%%%%%%%%%%%%%%%%%%
%FLOAT
125
case {81}
knownOpt = 7.75910252561; % Optimum connu Table 4:1
practOpt = 0.000000001;%0.008 ;
% optimum pratique (i.e ecart de 10% p/r a knownOpt
termOps = [knownOpt practOpt];
% On defini le nombre max d’iteration ds MEGAstart
case {82}
knownOpt = 9.16999778406; % Optimum connu Table 4:1
practOpt = 0.0000000001;%0.008 ;
% optimum pratique (i.e ecart de 10% p/r a knownOpt
126
% Entrees:
% Probleme: # identification du probleme
% sol: solution sans la valeur de l’objectif
b = length(options);
nbPlis = options(b-4);
switch probleme
case {31,32,33,34}
127
%**********************%
% problemes 6,7,8,9,10 %
%**********************%
case {61,62,63,64,65,71,72,73,74,81,82,83,84,85,101,102,103,104,105,106,88,89}
%% liste des valeur discrete pour l’angle i
nbChromos = size(bounds,1);
nbVar = length(sol); % Nombre total de variables
indi = 1;
nbGene = bounds(:,5);
indi = cumsum(nbGene);
bitAng = sol(1:indi(1));
% On scinde le string en deux portion angles
bitMat = sol(indi(1)+1:indi(2)); % portion materiaux
%bitCore = sol(indi(2)+1:indi(3));
pos=1; % pos: position du premier plis qui n’est pas vide
while bitAng(pos) == 0
pos=pos+1;
end
%% liste des valeur discrete pour la variable i
ep = 0.1270e-03; % epaisseur d’un plis (m)
i=1;
% if probleme == 88
% nbPlis = options(b-5);
% end
for j=pos:nbPlis
% choix de trois d’angles [0,+-45,90], deux materiaux (#8 et #9), 1 epaisseur
switch bitAng(j)
case 1
128
angle(i) = 0;
h(i) = 0.1270e-03;
case 2
angle(i) = 45;
h(i) = 0.1270e-03;
case 3
angle(i) = 90;
h(i) = 0.1270e-03;
end
%** Fin switch bitAng
switch bitMat(j)
case 1
mat(i) = 8; % graphite-epoxy
case 2
mat(i) = 9; % glass-epoxy
case 3
mat(i) = 18; % Core
angle(i) = 0;
h(i) = 10.0e-03;
end
%** Fin switch bitMat
i = i + 1; % Incrementation de l’indice
end
listeMat = [8 9];
%**********************************%
% layup balance symetrique %
%**********************************%
[layup] = BalanceSym2(mat,angle,h,probleme);
listeMat = [8,9];
%** fin cas 5,6,7,8,10
%****************************************%
% probleme 12 : Grosset & Haftka %
%****************************************%
case {121,122,123,124,125,126,127,14}
% Structure [ang(i) mat(i)]; initOps = [(MatAng == 1),...]
nbVar = length(sol); % Nombre total de variables
nbPlis = nbVar/2; % Nombre de plis (incluant les plis vides)
bitAng = sol(1:nbPlis); % On scinde le string en deux portion angles
bitMat = sol(nbPlis+1:nbVar); % portion materiaux
pos=1; % pos: position du premier plis qui n’est pas vide
while bitAng(pos) == 0
pos=pos+1;
if pos == nbPlis
t = 1;
end
end
%% liste des valeur discrete pour la variable i
ep = 0.1270e-03; % epaisseur d’un plis (m)
i=1;
for j=pos:nbPlis
switch bitAng(j)
case 1
129
angle(i) = 0;
h(i) = ep; % moitie de l’epaisseur
case 2
angle(i) = 5;
h(i) = ep;
case 3
angle(i) = 10;
h(i) = ep;
case 4
angle(i) = 15;
h(i) = ep;
case 5
angle(i) = 20;
h(i) = ep;
case 6
angle(i) = 25;
h(i) = ep;
case 7
angle(i) = 30;
h(i) = ep;
case 8
angle(i) = 35;
h(i) = ep;
case 9
angle(i) = 40;
h(i) = ep;
case 10
angle(i) = 45;
h(i) = ep;
case 11
angle(i) = 50;
h(i) = ep;
case 12
angle(i) = 55;
h(i) = ep;
case 13
angle(i) = 60;
h(i) = ep;
case 14
angle(i) = 65;
h(i) = ep;
case 15
angle(i) = 70;
h(i) = ep;
case 16
angle(i) = 75;
h(i) = ep;
case 17
angle(i) = 80;
h(i) = ep;
case 18
angle(i) = 85;
h(i) = ep;
case 19
angle(i) = 90;
130
h(i) = ep;
end
%** Fin switch bitAng
switch bitMat(j)
case 1
mat(i) = 11; % graphite-epoxy
case 2
mat(i) = 12; % glass-epoxy
end
%** Fin switch bitMat
i = i + 1; % Incrementation de l’indice
end
listeMat = [11 12];
%**********************************%
% layup balance symetrique %
%**********************************%
[layup] = BalanceSym2(mat,angle,h,probleme);
%** fin cas 12
return
switch Probleme
case {1} % Probleme #1: (LeRiche et al. 2004) :
% probleme de proprietes ~= pas de donnees
defProb(1) = 1;
defProb(2) = 0;
defProb(3) = 0;
defProb(4) = 1;
defProb(5) = 1;
charge = [0; 0; 0; 0; 0; 0];
%** fin case {1}
defProb(5) = 0.127;
charge = [-175; -21.875; 0; 0; 0; 0];
%** fin case 31,41,51
case{6,7,8,9,10,61,62,63,64,65,71,72,73,74,81,82,83,84,85,101,102,103,104,105,106,88}
% Probleme #6,#7,#8 et #10
defProb(1) = 1;
defProb(2) = 0;
defProb(3) = 0;
defProb(4) = 0.9144; %0.92
defProb(5) = 0.7620; %0.75
charge = [-175; -175; 0; 0; 0; 0];
%** fin case {6,7,8,9,10}
% construction du stratifié
j=1;
if (probleme > 120 & probleme < 130) % Probleme #12
for i=1:nbVar
if (angle(i) ~= 0) & (angle(i) ~= 90)
layup(j,:) = [mat(i) angle(i) h(i)];
layup(j+1,:) = [mat(i) -angle(i) h(i)];
j=j+2;
else
layup(j,:) = [mat(i) angle(i) h(i)];
j=j+1;
end
end
else
for i=1:nbVar
if (angle(i) ~= 0) & (angle(i) ~= 90)
layup(j,:) = [mat(i) angle(i) h(i)];
layup(j+1,:) = [mat(i) -angle(i) h(i)];
j=j+2;
else
layup(j,:) = [mat(i) angle(i) h(i)];
layup(j+1,:) = [mat(i) angle(i) h(i)];
j=j+2;
end
end
end
a = size(layup,1);
tmp = layup;
for i=a:-1:1
layup(j,:) = tmp(i,:);
j = j + 1;
end
return
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Construction du stratifié %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[layup,listeMat] = BuiltLam(probleme,sol(1:nbVar),bounds,options);
%** fin switch Probleme
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Définition du problème %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[defProb,charge] = DefinitionProb(probleme);
forces = charge(1:3);
moments = charge(4:6);
delta = defProb(2);
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Appel du calcul CLT %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
warning off;
[PropMechTherm,tsaiWu,hoffman,fbuckl,lamdaFL,freqNat,Poids,...
Cout,Twist,tsaiHill] = CLT2(layup,charge,defProb,listeMat,probleme);
warning on;
%***
%% verification s’il y a ruputure dans une des couches %
%% il y a rupture lorsque hoffman est > 1 %%
MaxHoffman = max(hoffman);
%% il y a rupture lorsque le facteur de deformation maximal (lamdaFL) est < 1 %%
% FS est le facteur de securite sur les deformation
FS = 1.5;
MinLambdaFL = min(lamdaFL)/FS;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Fin calcul CLT %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
[val S] = ParamFctObj(probleme,options,sol(1:nbVar),fbuckl,MinLambdaFL,freqNat,Poids,...
Cout,Twist,tsaiHill,MaxHoffman,PropMechTherm) ;
% S = donnees connexes
% val = valeur de l’objectif
134
return
b = length(Options);
switch Probleme
end
val = obj;
S(1) = fbuckl;
S(2) = MinLambdaFL;
nb = plyContiguityCount(sol); % Nombre de plis contigus
%** Penality
fP = 1.25;
Pc = -500*nb;% 1/(fP^nb); % Le Riche & Haftka
val = Pc + val;% Pc*(val);
% Pc vaut 1 si la contrainte n’est pas violee et < 1 sinon
%** fin case 31,32,33,34
case {32}
val = fbuckl;
g(1) = MinLambdaFL - fbuckl;
pen = Options(b);
nb = plyContiguityCount(sol); % Nombre de plis contigus
%** Penality
fP = 1.25;
Pc = 1/(fP^nb); % Le Riche & Haftka
%val = Pc*(val);% Pc vaut 1 si la contrainte n’est pas violee et < 1 sinon
val = val - pen*nb;
if g(1) < 0 % Pénalise val
val = val + pen*g(1) ;
end
S(1) = fbuckl;
S(2) = MinLambdaFL;
case {34}
val = fbuckl;
S(1) = fbuckl;
S(2) = MinLambdaFL;
end
T = g(1) + g(2);
if Sc == 0 % si gmin est >=0, on favorise val (diminue)
val = val*(1-0.001*T);
else % on defavorise val (augmente)
val = val + pen*Sc;
end
%** fin case 8
end
if gt < 0 % On viole la contrainte et on defavorise la solution
val = val + pen*gt;
else
if g(1) > 0.2
%g(1) = 0.2;
end
if g(2) > 0.2
%g(2) = 0.2;
end
gt = g(1)+g(2);
val = val*(1-0.001*gt);
end
%** fin case 10
case {121,122,123,124,125}
%***** Probleme 12: Grosset & Haftka *******%
fpond = Options(b-1); % facteur de ponderation
% Transformation des unites (Input: Poids --> N ; Output: Poids -->lbs
Poids = Poids/9.9*2.205;
F = fpond*Poids + (1-fpond)*Cout;
val = -F; % minimise
fMin = 25.0; % freq Naturelle minimale % 25.23 (alpha = 0.96)
g(1) = freqNat/fMin-1; % contrainte freq >= fMin
pen = Options(b); % facteur de penalite
S(1) = Cout;
S(2) = Poids;
S(3) = freqNat;
S(4) = F;
%** Penality
gmin = g(1);
if gmin >= 0 % si gmin est >=0, on favorise val (diminue)
val = val*(1-0.001*gmin);
%val = val;
else % on defavorise val (augmente)
val = val + pen*gmin;
end
S(5) = val; % Objectif penalise ou favorise
%** fin case 12
end %** fin switch Probleme
return
% ***Input***
% popSize: nombre d’individus dans la population
139
% initOps: [prec type]: type --> 1 pour var. entieres et 0 pour var. continues
% bounds: frontiere des variables
% evalFN: nom de la fonction objectif
% evalOps: options de la fonction objectif
% megaOps: [epsilon prob_ops display]
% prob_ops = 1 --> on applique les operateur un certain nombre de fois
% prob_ops = 0 --> on applique les operateur avec une certaine
% probabilite a chaque individus
% termFN: nom de la fonction d’arret
% termOps: options de la fonction d’arret
% selectFN: fonction de selection
% selectFN: options de la fonction de selection
% xOverFNs: noms des fonctions de croisements
% xOverOps: options des fonctions de croisements
% mutFNs: noms des fonctions de mutation
% mutOps: options des fonctions de mutation
%
% ***Output***
% x : solution optimale
% endpop: population finale
% bPop:
% traceInfo:
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% definition des variables locales de MEGA: %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
c1 = zeros(1,posFit); % Un individu
c2 = zeros(1,posFit); % Un individu
140
indice2 = 0;
for i=1:nbChromos
if bounds(i,3) == -1
indice(i,1) = indice2 + 1;
bits = calcbits(bounds(i,1:2),bounds(i,4));
indice2 = indice(i,1)+bits*nbPlis-1;
indice(i,2) = indice2;
else
%indice(i,1) = indice2 + 1;
%indice2 = indice(i,1)+nbPlis-1;
%indice(i,2) = indice2;
indice(i,1) = indice2 + 1;
indice2 = indice(i,1) + bounds(i,5) - 1;
indice(i,2) = indice2;
end
end
if collectTrace
traceInfo(gen,1)=gen; %Generation courante
traceInfo(gen,2)=max(pop(:,posFit),[],1); %Meilleur objectif
traceInfo(gen,3)=mean(pop(:,posFit)); %Moyenne
traceInfo(gen,4)=std(pop(:,posFit)); %Variante
val = traceInfo(gen,2);
VAL = val;
GEN = gen;
end
%*** Option d’affichage
if display
fprintf(1,’\n%d %f\n’,gen,traceInfo(gen,2));
VAL = traceInfo(gen,2);
GEN = 1;
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Boucle principale de l’algorithme genetique %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
fin = 0;
while ~fin
startPop = pop;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%****** (??) Amélioration locale d’un nombre aléatoire d’individus dans la pop ********%
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%noImprove = 0;
%noChange = 8;
if ameliorationLocale %& (noChange <= 50 | noImprove==0)
% On ne le fait pas apres 25 fois sans changement
% sélection aléatoire des individus à améliorer
i = round(rand*(Nk-1))+1;
[individual, evalCost,better]= localSearch(startPop(i,:),evalFN,evalOps,...
evalCost,bounds,plisVide);
if better % S’il y a amélioration
trouver = duplicata(individual,startPop,[],[posFit,evalOps(3)]);
if trouver ~= 1
startPop(i,:) = individual;
else % L’individu amélioré se trouve déjà dans la population
end
else % aucune amélioration n’est apportée
end
142
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%**********************************************%
% (5-b) Operateurs de croisements INT %
%**********************************************%
for k=1:numXOversInt
xN=deblank(xOverIntFNs(k,:)); %Nom de la fonction de croisement
for i=1:nbEnfants
enfChromo(i,indice(j,1):indice(j,2))=feval(xN,parents1(i,indice(j,1):indice(j,2)),...
143
parents2(i,indice(j,1):indice(j,2)),startPop(:,indice(j,1):indice(j,2)),,,,
bounds(j,:),[gen xOverIntOps(k,:)]);
end
end
else % chromFloat == -1 % Ce chromosome est BINAIRE
%**********************************************%
% (5-c) Operateurs de croisements BINAIRE %
%**********************************************%
for k=1:numXOversBin
xN=deblank(xOverBinFNs(k,:)); %Nom de la fonction de croisement
for i=1:nbEnfants
enfChromo(i,indice(j,1):indice(j,2))=feval(xN,parents1(i,indice(j,1):indice(j,2)),...
parents2(i,indice(j,1):indice(j,2)),startPop(:,indice(j,1):indice(j,2)),...
bounds(j,:),[gen xOverBinOps(k,:)]);
end
end
end
end
enfants = enfChromo;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Modification: (7/11/2005)
% Permettre l’Addition et la soustraction de plis aux enfants
% de m^
eme qu’au Nk meilleurs individus de la pop précédente
enfants = [enfants ; startPop(1:Nk,:)];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%****************************************************%
% (6-b & 7-b) Operateurs de mutation INT %
%****************************************************%
for k=1:numMutsInt
mutFN=deblank(mutIntFNs(k,:));
for i=1:(nbEnfants)%+Nk)
enfants(i,indice(j,1):indice(j,2)) = feval(mutFN,enfants(i,indice(j,1):indice(j,2)),...
bounds(j,:),[gen mutIntOps(k,:)]);
end
end
else % chromFloat == -1 % Ce chromosome est BINAIRE
144
%****************************************************%
% (6-c & 7-c) Operateurs de mutation Binaire %
%****************************************************%
for k=1:numMutsBin
mutFN=deblank(mutBinFNs(k,:));
for i=1:(nbEnfants)%+Nk)
enfants(i,indice(j,1):indice(j,2)) = feval(mutFN,enfants(i,indice(j,1):indice(j,2)),...
bounds(j,:),[gen mutBinOps(k,:)]);
end
end
end
end
%*****************************************************************************%
% (6-d & 7-d) Operateurs de Addition supression de plis INT/FLOAT %
%*****************************************************************************%
if plisVide % Verification du type de probleme (nbPlis fixe ou indetermine)
for k=1:numAddDelMutsInt
mutFN=deblank(mutAddDelIntFNs(k,:));
prob = mutAddDelIntOps(k,2);
for i=1:(nbEnfants+Nk)
num = rand; % Tirage d’un nombre aleatoire [0,1]
if num < prob % On effectue l’operation
if probleme == 6000 % Formulation avec Angle/Core
enfants(i,1:bounds(1,5)) = feval(mutFN,enfants(i,1:bounds(1,5)),bounds,...
[gen mutAddDelIntOps(k,:)]);
else % formulation Matérau/angle
enfants(i,1:posFit-1) = feval(mutFN,enfants(i,1:posFit-1),bounds,...
[gen mutAddDelIntOps(k,:)]);
end
end
end
end
end
%**** (9) Ordonner les enfants selon leur objectif decroissant ****
enfants = sortrows(enfants,-posFit);
newGen(j,:) = startPop(k-1,:);
% Introduction de l’individu k de la pop précédente
else
newGen(j,:) = enfants(i-1,:);
% Introduction de l’enfant i
end
end
%*************************%
% Affichage et resultats %
%*************************%
%newGen
gen = gen + 1; % compteur de generations
%******** (...) Collecte d’infos
if collectTrace
traceInfo(gen,1)=gen; %Generation courante
traceInfo(gen,2)=max(newGen(:,posFit),[],1); %Meilleur objectif
traceInfo(gen,3)=mean(newGen(:,posFit)); %Moyenne
traceInfo(gen,4)=std(newGen(:,posFit)); %Variante
end %**** (...)
%*** Option d’affichage
if traceInfo(gen-1,2) ~= traceInfo(gen,2)
[tempMax,ind] = max(newGen,[],1);
x = newGen(ind(posFit),:);
eval([’[x val S]=’ evalFN ’(x,bounds,evalOps);’]);
GEN = [GEN; gen];
VAL = [VAL; val];
bFoundIn = gen;
noImprove = 0; % Il y a eu amelioration de la solution
if trace % *** Impression de la trace
if length(S) < 3
S(3) = 0;
end
% Impression de la trace des meilleures sol.
printTrace(probleme,gen,traceInfo(gen,2),x(1:nbVar),S(3));
end
if display
fprintf(1,’\n%d %f\t’,gen,traceInfo(gen,2));
fprintf(1,’%d ’,x(1:nbVar));
if length(S) > 2
fprintf(1,’ %.3f\n’,S(3));
end
end
else % il n’y a pas eu d’amelioration
noImprove = noImprove + 1;
if display
fprintf(1,’%d ’,gen);
end
end
%% Multi-élitisme variables
if VE
%%%%%%%%%% Modifs: 15 nov. 2005 pour prob 84-85
if noImprove ~= 0
tranche = tranche + 1;
else
tranche = 0;
147
end
if tranche == 20
Nk = Nk + 1 ;
nbEnfants = popSize - Nk;
tranche = 0;
if Nk > (popSize-5)
Nk = popSize-5;
nbEnfants = popSize - Nk;
end
end
end
end
%% Fin de la boucle d’optimization
%% Traitement des donnees
if graph
a = length(GEN);
b = GEN(a);
xGen = [1:b];
GEN = [GEN;gen];
VAL = [VAL;val];
tGEN = GEN;
tVAL = VAL;
j=0;
for i=2:a+1
if GEN(i-1) ~= GEN(i)-1
g = GEN(i)-1;
v = VAL(i-1);
tGEN = [tGEN(1:(i+j-1),1) ; g ;GEN(i:a,1)];
%tGEN(i,1) = g;
tVAL = [tVAL(1:(i+j-1),1) ; v ;VAL(i:a,1)];
%tVAL(i,1) = v;
j=j+1;
end
end
xGen = [tGEN;gen];
yVal = [tVAL;tVAL(length(tVAL))];
plot(xGen,yVal,’b+:’);
end
[tempMax,ind] = max(pop,[],1);
x = pop(ind(posFit),:);
% Impression facultative
fprintf(1,’\n x = ’);
fprintf(1,’%d ’,x(1:nbVar));
fprintf(1,’\n Obj = %.2f’,x(posFit));
fprintf(1,’\n\n****** Terminé ****** \n’);
return
148
b = length(evalOps);
nbGene = bounds(:,5); % Nombre de genes par chromosome
nbChromos = size(bounds,1); % Nombre total de chromosomes pour chaque individu
rng = (bounds(:,2)-bounds(:,1))’; %The variable ranges’
n = length(options);
% Nombre de plis vide max accepter lors de la generation (si plisVide ==1)
nbPVMax = floor(nbGene/3) + 1 ;
plisVide = options(2) == 1; % Construction --> nb de plis indetermine [E E E var(i)]
probleme = evalOps(b-2);
for k=1:popSize
ind = [];
Chromos = [];
if plisVide % Le nombre de plis est indetermine
% Position du premier plis plein [1,nbPlis]: (pos0-1:1)
pos0 = round(rand*(nbPVMax-1)) + 1; --> plis vide)
else % Le nombre de plis est fixe
pos0 = 1;
end
for i=1:nbChromos
Integer = bounds(i,3); % Variables entieres
Chromos = [0];
for j=pos0:nbGene(i)
if Integer == 1 % Les genes de ce chromosome sont discrets
Chromos(1,j) = round(rand*rng(i)) + bounds(i,1);
elseif Integer==-1 % Les genes de ce chromosomes sont binaires
% Il faut que plisVide = 0
pos0 = 1;
precision = bounds(i,4);
bits = calcbits(bounds(i,1:2),precision);
Chromos(1,(j-1)*bits+1:j*bits) = round(rand(1,bits));
else % Les genes de ce chromosome sont continus
Chromos(1,j) = rand*rng(i) + bounds(i,1);
end
end
ind = [ind Chromos(1,:)];
end
pop(k,:) = [ind 0];
end
149
b = length(options);
nbEnfants = options(2); % nombre de couples de parents distincts a generer
k = 1;
while k <= 2
i = 1; % indice de la roulette
continuer = 1; % variable booleene
while continuer
if n(k) >= roulette(i) & n(k) < roulette(i+1)
parent(k,:) = pop(i,:); % assignagtion du parent i
k=k+1; % un parent est selectionne
continuer = 0; % sortie de la boucle
else
i=i+1; % incrementation
end
end
end
% verification que les deux parents sont differents
p1 = parent(1,:);
p2 = parent(2,:);
if ~isequal(p1,p2) % -> p1 est different de p2
distinct = 0; % sortie de la boucle
else % p1 == p2: on recommence !
end
end
parent1(j,:) = p1;
parent2(j,:) = p2;
end
return
else % Oui
enfant(k,:) = enf;
end
else % on copie un des parents
enfant(k,:) = epais(k,:); % on copie le parent epais
end
end
return
for k=1:nbEnfants
P1n0 = length(find(p1(k,1:nbVar))); % Nombre de plis plein du P1
P2n0 = length(find(p2(k,1:nbVar))); % Nombre de plis plein du P2
if P1n0 >= P2n0 % lequel est plus le epais (P1 ??)
epais = p1(k,:);
mince = p2(k,:);
% position du premier pli plein sur le stratifie le plus epa
pos = nbVar - P2n0 + 1; is
else % p2 plus epais que p1
epais = p2(k,:);
mince = p1(k,:);
% position du premier pli plein sur le stratifie le plus Mince
153
n = length(Ops);
nbVar = length(parent1); % dimensions des parents
enfants(1:nbVar) = 0; % Initialisation de la 1ere de la matrice enfants
% Lequel des parents est le plus epais
pos1=1;
while parent1(pos1) == 0 % pos: position du premier plis qui n’est pas vide
pos1=pos1+1;
end
pos2=1;
while parent2(pos2) == 0 % pos: position du premier plis qui n’est pas vide
pos2=pos2+1;
end
if pos1 <= pos2 % parent1 est plus epais que parent2
p1 = parent1;
p2 = parent2;
pos = pos1;
else % parent2 est plus epais que parent1
p1 = parent2;
p2 = parent1;
pos = pos2;
end
% Pick a random mix amount %%%%%%
a = rand;
% Create the children
enfant = p1*a + p2*(1-a); %%%%%%%
return
A.6.1 Mutation
n = length(Ops);
mutProb = Ops(n); % Probabilite de muter un gene
Integer = (Ops(n-1)==1); % optimisation en variables entieres
plisVide = (Ops(n-2)==1); % Presence de variable pour plis vide
df = bounds(2) - bounds(1); % Etendu de frontieres de ce gene
% **** Output
% Enfants: nouvelle liste des enfants
end
end
return
for k=1:nbEnfants
a = rand; % tirage d’un nombre aleatoire
if a < probMut
indiv = enfant(k,:);
pos=1;
while indiv(pos) == 0 % pos: position du premier plis qui n’est pas vide
pos=pos+1;
end
cg=Ops(1); % Current Generation
mg=Ops(3); % Maximum Number of Generations
b=Ops(4); % Shape parameter
% Pick a variable to mutate randomly from 1 to number of vars
mPoint = round(rand * (nbVar-pos)) + pos;
md = round(rand); % Choose a direction of mutation
if md % Mutate towards upper bound
newValue=indiv(mPoint)+delta(cg,mg,bounds(2)-indiv(mPoint),b);
else % Mutate towards lower bound
newValue=indiv(mPoint)-delta(cg,mg,indiv(mPoint)-bounds(1),b);
end
indiv(mPoint) = newValue; % Make the child
enfant(k,:) = indiv;
end
end
return
indiv = enfant(k,:);
pos=1;
while indiv(pos) == 0 % pos: position du premier plis qui n’est pas vide
pos=pos+1;
end
cg=Ops(1); % Current Generation
mg=Ops(3); % Maximum Number of Generations
b=Ops(4); % Shape parameter
% Now mutate that point
md = round(rand(1,nbVar));
for i = pos:nbVar
if md(i)
indiv(i)=indiv(i)+delta(cg,mg,bounds(2)-indiv(i),b);
else
indiv(i)=indiv(i)-delta(cg,mg,indiv(i)-bounds(1),b);
end
end
enfant(k,:) = indiv;
end
end
return
% **** Input
% Enfants: Listes des enfants dont il faut permuter les genes
% Bounds: frontiere des variables
% Ops: options [#gen probMut] : probMut -> probabilite de permuter
% une paire de genes pour chaque individus
% **** Output
% Enfants: nouvelle liste des enfants
%
enftmp = enfant((nbPlis)*(i-1)+2:i*nbPlis);
if bounds(i,3) == 1 % Variables entieres
newValue = bounds(i,1) + round(rand*(df(i,1))); % nouvelle valeur
elseif bounds(i,3) == 0
newValue = bounds(i,1) + (rand*(df));
end
enftmp(nbPlis) = newValue;
enfant((nbPlis)*(i-1)+1:i*nbPlis) = enftmp; % Copie de l’enfant generes
end
end
end
return
n = length(ops);
currentGen = ops(1); % Generation courante
maxGen = ops(n); % #Gen limite (si on atteint pas l’optimum pratique)
knownOptimum = ops(n-2); % Optimum connu
practOptimum = ops(n-1);
[taille,posFit] = size(newGen); % Taille et position de l’objectif
% Meilleur individu ds newGen
best = max(newGen(:,posFit));
% ecart entre l’optimum connu et la meilleure solution trouvee
delta = abs((knownOptimum - abs(best)) / knownOptimum) ;
if delta <= practOptimum | currentGen >= maxGen
fin = 1; % On arrete
else
fin = 0; % On continue
end
return
% Input:
% individual : Solution à améliorer
161
%Variables internes:
posFit = length(individual); % Position de la fitness
nbgene = posFit - 1; % Nombre de gènes total
nbChromo = size(bounds,1) ; % Nombre de chromosome
upgrade = individual; % On retourne l’individu s’il n’y a pas d’amélioration
better = 0;
if nbChromo > 1
%%%%%%%%%% Recherche de meilleur voisin à partir des matériaux
% Définition des voisins pour les matériaux
Nm = neighborMat(mat,bounds,[]);
% Évaluation de voisins pour les matériaux
for i=1:size(Nm,1)
new = [angle Nm(i,:) fitness];
eval([’[new new(posFit)]=’ evalFN ’(new,bounds,[0 evalOps]);’]);
evalCost = evalCost + 1;
if new(posFit) > fitness
fitness = new(posFit);
upgrade = new;
better = 1;
end
end
end
%%%%%%%%%% Recherche de meilleur voisin à partir de la fin du chromosome angle
lang = length(angle);
pos=1; % pos: position du premier plis qui n’est pas vide
while angle(pos) == 0
pos=pos+1;
end
n0 = pos - 1; % Nombre de plis vide
nplis = lang - n0; % Nombre de plis existant
modPli = round(rand(1,nplis));
%modPli = [zeros(1,n0) modPli];
for i=1:nplis
new = upgrade;
%new(pos:lang)
if modPli(i)
Na = neighborAng(new(pos:lang),bounds,i,[]);
162
b = size(Na,1);
for k=1:b
new(pos:lang) = Na(k,:);
eval([’[new new(posFit)]=’ evalFN ’(new,bounds,[0 evalOps]);’]);
evalCost = evalCost + 1;
if new(posFit) > fitness % amélioration de la solution
fitness = new(posFit);
upgrade = new;
better = 1;
else % aucune amélioration --> prochain voisin
end
end
end
end
%%%%%%%%%% Recherche de meilleur voisin à partir
%%%%%%%%%% mut un gène matériaux plus addition d’un pli pareil que la mutation
if nbChromo > 1
new = upgrade;
% Définition des voisins pour les matériaux
Nm = neighborMat2(new,bounds,[]);
% Évaluation de voisins pour les matériaux
for i=1:size(Nm,1)
new = [Nm(i,:) individual(posFit)];
eval([’[new new(posFit)]=’ evalFN ’(new,bounds,[0 evalOps]);’]);
evalCost = evalCost + 1;
if new(posFit) > fitness
fitness = new(posFit);
upgrade = new;
better = 1;
end
end
end
return
if nlMat == 2
a1 = bounds(2,1) + lMat(1,1) - 1;
a(1:lMat(2,1)) = a1;
b1 = bounds(2,1) + lMat(1,2) - 1;
b(1:lMat(2,2)) = b1;
N(1,:) = [zeros(1,n0) a b]; % [matA matB]
N(2,:) = [zeros(1,n0) b a]; % [matB matA]
elseif nlMat == 3
a(1:lMat(2,1)) = bounds(2,1) + lMat(1,1) - 1;
b(1:lMat(2,2)) = bounds(2,1) + lMat(1,2) - 1;
c(1:lMat(2,3)) = bounds(2,1) + lMat(1,3) - 1;
N(1,:) = [zeros(1,n0) a b c];
N(2,:) = [zeros(1,n0) a c b];
N(3,:) = [zeros(1,n0) b a c];
N(4,:) = [zeros(1,n0) b c a];
N(5,:) = [zeros(1,n0) c a b];
N(6,:) = [zeros(1,n0) c b a];
end
if nlMat ~= 1 % Il y au moins un voisin différent
M = [];
for k=1:size(N,1)
comp = (N(k,:) ~= chromo);
q = find(comp); % Si comp est null alors N(k,:) et chromo sont identiques
if length(q) ~= 0
M = [M ; N(k,:)];
end
end
N = M;
else % Il n’y a pas de voisin
N = [];
end
return
new0 = zeros(1,(n0-1));
for i=1:nrang
N(i,:) = [new0 ang new0 neig(i,:)];
end
else
N = []; % Il n’y a pas de voisin
end
return