Vous êtes sur la page 1sur 182

FRÉDÉRIC GIRARD

OPTIMISATION DE STRATIFIÉS EN UTILISANT UN


ALGORITHME GÉNÉTIQUE

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.)

FACULTÉ DES SCIENCES ET DE GÉNIE


UNIVERSITÉ LAVAL
QUÉBEC

2006

c Frédéric Girard, 2006



Résumé

Ces travaux portent sur l’optimisation de structures stratifiées en utilisant un algo-


rithme génétique. Un programme d’optimisation est développé et est ensuite appliqué
à la résolution d’une série de problèmes d’optimisation pour lesquels les variables de
design peuvent appartenir soit à un domaine discret soit à un domaine continu. Tout
d’abord, il est question de problèmes où le nombre de plis, le matériau et l’épaisseur
des plis sont fixés. Les variables de design sont alors l’orientation de chaque pli qui peut
prendre, dans un premier cas, des valeurs discrètes (0◦ , ±45◦ , 90◦ ) puis des valeurs conti-
nues (de 0◦ à 90◦ ). Deuxièmement, il est question de problèmes pour lesquels le nombre
de plis et le matériau des plis deviennent des variables de design qui s’ajoutent alors à
l’orientation des plis. Dans ces cas, la valeur des variables de design (matériaux et orien-
tations) est choisie dans une liste de valeurs. L’objectif de ces problèmes est, en premier
lieu, la minimisation du poids ou du coût de la structure sous différentes contraintes et
finalement, la minimisation du poids et du coût simultanément avec une formulation
multi-objectifs. L’algorithme génétique développé utilise une stratégie multi-élitiste et
empêche la présence d’individus identiques dans la population. Finalement, un algo-
rithme génétique hybride, combinant l’algorithme génétique et une recherche locale, est
développé et ensuite testé sur ces mêmes problèmes. Cette hybridation de l’algorithme
résulte en une diminution du temps de calcul exigé et en une amélioration substantielle
des résultats.

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

Table des matières iii

Liste des tableaux vi

Liste des figures ix

Liste des symboles x

Introduction 1

1 Revue de littérature 3

2 Mécanique des stratifiés 9


2.1 Nomenclature d’une structure stratifiée . . . . . . . . . . . . . . . . . . 10
2.2 L’hypothèse de Kirchoff . . . . . . . . . . . . . . . . . . . . . . . . . . 12
2.3 Relations contraintes vs déformations . . . . . . . . . . . . . . . . . . . 15
2.4 Relations efforts résultants vs déformations . . . . . . . . . . . . . . . . 16
2.5 Déformations dans chaque pli . . . . . . . . . . . . . . . . . . . . . . . 17
2.6 Comportement des plaques stratifiées . . . . . . . . . . . . . . . . . . . 19

3 Les algorithmes génétiques 22


3.1 Les schèmes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.2 Représentation génétique des stratifiés . . . . . . . . . . . . . . . . . . 26
3.3 Génération de la population initiale . . . . . . . . . . . . . . . . . . . . 29

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

4 Validation du programme d’optimisation 49


4.1 Problèmes d’optimisation avec des variables discrètes . . . . . . . . . . 50
4.1.1 Problème de validation 1 . . . . . . . . . . . . . . . . . . . . . . 52
4.1.2 Problème de validation 2 . . . . . . . . . . . . . . . . . . . . . . 56
4.1.3 Problème de validation 3 . . . . . . . . . . . . . . . . . . . . . . 58
4.1.4 Problème de validation 4 . . . . . . . . . . . . . . . . . . . . . . 60
4.2 Problème d’optimisation avec des variables continues . . . . . . . . . . 63
4.3 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

5 L’épaisseur, l’orientation et le matériau des plis comme variables 70


5.1 Minimisation du poids et du coût séparément . . . . . . . . . . . . . . 71
5.2 Minimisation du poids et du coût en tant qu’objectifs multiples . . . . 88
5.3 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97

6 Hybridation de l’algorithme génétique 98


6.1 Définition du voisinage . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
6.2 Résolution des problèmes . . . . . . . . . . . . . . . . . . . . . . . . . . 105
6.3 Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111

Conclusion 113

Bibliographie 116

A Code Matlab du programme 119


A.1 Fonctions satellites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119

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

3.1 Quatre individus et leur mesure de performance . . . . . . . . . . . . . 25


3.2 Codage d’un individu en utilisant deux chromosomes . . . . . . . . . . 28
3.3 Décodage d’un individu composé de deux chromosomes . . . . . . . . . 28
3.4 Codage du domaine discret Ωi par le domaine discret Ω′i . . . . . . . . 29
3.5 Exemple d’un stratifié de 12 plis codé à l’aide d’un seul chromosome . . 29
3.6 Population initiale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
3.7 Formulation du problème d’optimisation avec des variables continues . 33
3.8 Solution optimale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
3.9 Représentation d’un stratifié symétrique de six plis avec trois variables 34
3.10 Représentation d’un stratifié équilibré de six plis avec trois variables . . 34
3.11 Comparaison entre les deux méthodes de sélection . . . . . . . . . . . . 37
3.12 Opérateur à un point de croisement . . . . . . . . . . . . . . . . . . . . 39
3.13 Opérateur à deux points de croisement . . . . . . . . . . . . . . . . . . 39
3.14 Représentation de deux individus d’épaisseurs différentes . . . . . . . . 39
3.15 Opérateur à un point de croisement à partir du plus épais . . . . . . . 40
3.16 Opérateur à un point de croisement à partir du plus mince . . . . . . . 40
3.17 Exemple d’une mutation simple . . . . . . . . . . . . . . . . . . . . . . 42
3.18 Exemple d’une permutation . . . . . . . . . . . . . . . . . . . . . . . . 42
3.19 Exemple de l’addition d’un pli . . . . . . . . . . . . . . . . . . . . . . . 45
3.20 Exemple de la soustraction d’un pli . . . . . . . . . . . . . . . . . . . . 45
3.21 Critères d’arrêt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48

4.1 Propriétés du matériau . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

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

5.1 Géométrie et chargement . . . . . . . . . . . . . . . . . . . . . . . . . . 72


5.2 Propriétés du Carbone–époxy (C–E) et du Verre–époxy (V–E) . . . . . 72
5.3 Codage et décodage des deux chromosomes . . . . . . . . . . . . . . . . 73
5.4 Exemple d’un individu codé et décodé . . . . . . . . . . . . . . . . . . 73
5.5 Formulation générale des problèmes (i), (ii) et (iii) . . . . . . . . . . . 75
5.6 Définition de l’objectif et des contraintes des problèmes (i) à (iii) . . . 75
5.7 Paramètres de l’algorithme génétique . . . . . . . . . . . . . . . . . . . 76
5.8 Résultats du problème (i) . . . . . . . . . . . . . . . . . . . . . . . . . 77
5.9 Résultats du problème (ii) . . . . . . . . . . . . . . . . . . . . . . . . . 78
5.10 Résultats du problème (iii) . . . . . . . . . . . . . . . . . . . . . . . . 80
5.11 Formulation générale du problème (iv) . . . . . . . . . . . . . . . . . . 83
5.12 Résultats du problème (iv) . . . . . . . . . . . . . . . . . . . . . . . . . 84
5.13 Résultats du problème (v) . . . . . . . . . . . . . . . . . . . . . . . . . 87
5.14 Formulation générale du problème à objectifs multiples (vi) . . . . . . . 90

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

6.1 Exemple d’un individu à deux chromosomes . . . . . . . . . . . . . . . 101


6.2 Définition du voisinage à partir du chromosome orientations . . . . . . 102
6.3 Définition du voisinage à partir du chromosome matériaux . . . . . . . 103
6.4 Définition du voisinage à partir des chromosomes c1 et c2 . . . . . . . . 104
6.5 Paramètres de l’algorithme génétique hybride . . . . . . . . . . . . . . 106
6.6 Résultats du problème (i) . . . . . . . . . . . . . . . . . . . . . . . . . 106
6.7 Résultats du problème (ii) . . . . . . . . . . . . . . . . . . . . . . . . . 107
6.8 Résultats du problème (iii) . . . . . . . . . . . . . . . . . . . . . . . . 107
6.9 Résultats de problème (iv) . . . . . . . . . . . . . . . . . . . . . . . . . 108
6.10 Résultats de problème (v) . . . . . . . . . . . . . . . . . . . . . . . . . 108
6.11 Résultats du problème (vi) . . . . . . . . . . . . . . . . . . . . . . . . . 109
6.12 Résultats du problème (vii) . . . . . . . . . . . . . . . . . . . . . . . . 110

viii
Liste des figures

2.1 Nomenclature d’un stratifié – Orientation d’un pli . . . . . . . . . . . . 10


2.2 Exemple d’un stratifié [(±45, 0)2 ]T . . . . . . . . . . . . . . . . . . . . . 11
2.3 Exemple d’un stratifié [±45, 0]S . . . . . . . . . . . . . . . . . . . . . . 12
2.4 Forme déformée (plan (x, z)) . . . . . . . . . . . . . . . . . . . . . . . . 14
2.5 Forme déformée (plan (y, z)) . . . . . . . . . . . . . . . . . . . . . . . . 14
2.6 Plaque simplement supportée . . . . . . . . . . . . . . . . . . . . . . . 20

3.1 Structure de l’algorithme génétique . . . . . . . . . . . . . . . . . . . . 24


3.2 Représentation génétique . . . . . . . . . . . . . . . . . . . . . . . . . . 27

4.1 Plaque simplement supportée . . . . . . . . . . . . . . . . . . . . . . . 51

5.1 Plaque simplement supportée . . . . . . . . . . . . . . . . . . . . . . . 72

6.1 Structure de l’algorithme génétique hybride . . . . . . . . . . . . . . . 100

ix
Liste des symboles

[A] Matrice de rigidité en membrane

a Dimension de la plaque le long de l’axe x (m)

B Bassin formé par l’union de E et des Nk individus élites de P

[B] Matrice de couplage membrane-flexion

b Dimension de la plaque le long de l’axe y (m)

bi Borne inférieure du domaine d’une variable continue

bs Borne supérieure du domaine d’une variable continue

C Coût d’une structure stratifiée (U)

cj Chromosome j de l’individu x

[D] Matrice de rigidité en flexion

d Nombre aléatoire compris entre ]0, 1[

E Ensemble d’enfants

Ex , Ey Modules de Young apparents

E1 Module longitudinal

E2 Module transverse
x
ei Enfant i

F (x) Fonction d’évaluation de l’individu x

Fβ Valeur de la fonction d’évaluation d’un optimum connu au


problème

f (x) Objectif du problème d’optimisation de l’individu x

fmin Valeur d’une contrainte minimale sur la fréquence naturelle

fn (x) Fréquence naturelle d’un individu x

Gxy Module de cisaillement apparent

G12 Module de cisaillement dans le plan

gc Somme de la valeur des s contraintes d’un individu

gi (x) Évaluation de la contrainte i de l’individu x

H Épaisseur totale

h Épaisseur d’un pli

l Nombre aléatoire valant 0 ou 1

Mx Moment de flexion autour de l’axe x (N·m/m)

My Moment de flexion autour de l’axe y (N·m/m)

Mxy Moment de torsion (N·m/m)

m Nombre de demi-sinus dans la direction x

matk Matériau du pli k

N Nombre d’individus dans la population

Nc Nombre de plis contigus d’une même orientation d’un stratifié

N Valeur du chargement nominal (N/m)

Nk Nombre d’individus élites conservés d’une génération à l’autre

Nx Chargement appliqué à l’axe neutre de la plaque et perpendi-


culaire au côté b (N/m)

xi
Ny Chargement appliqué à l’axe neutre de la plaque et perpendi-
culaire au côté a (N/m)

Nxy Cisaillement appliqué à l’axe neutre de la plaque (N/m)

Nxf Charge de flambement critique dans la direction x

Nyf Charge de flambement critique dans la direction y

n Nombre de demi-sinus dans la direction y

nc Nombre de chromosomes d’un individu

ng Nombre de gènes d’un chromosome

nf Coût de calcul donné en nombre d’appels de la fonction


d’évaluation

nf Coût de calcul moyen

np Nombre total de plis d’un stratifié

npv Nombre gènes d’un chromosome représentant un pli vide

P Population, ensemble d’individus

pi Parent i

ps (x) Probabilité de sélection de l’individu x

R Ensemble de reproduction

r Nombre d’enfants dans E et nombre de couple de parents dans


R

S Somme de la valeur des contraintes qui sont violées d’un in-


dividu

s Nombre de contraintes du problème d’optimisation

T Nombre de générations maximal

t Âge de la population (génération courante)

u◦ Déplacement du plan moyen du point (x, y) dans la direction


x

xii
v◦ Déplacement du plan moyen du point (x, y) dans la direction
x

vk Gène k d’un chromosome

W (x) Poids d’un individu x (N)

Wmax Valeur d’une contrainte maximale sur le poids d’un stratifié


(N)

w◦ Déplacement transverse du plan moyen au point (x, y)

(x, y, z) Coordonnées d’un point

x Individu de la population P

y Voisin de x

Lettres grecques

α Compromis entre le poids et le coût de la fonction convexe


αW + (1 − α)C

β Facteur de bonification

γi Constante de restriction de la contrainte wi


0
γxy Déformation en cisaillement du plan moyen

γ12F Déformation en cisaillement ultime admissible dans le repère


(1,2) d’un pli

∆ Distance maximale entre deux individus permettant de les


considérer comme étant égaux

δi Constante de relaxation de la contrainte wi

ǫ0x Déformation dans la direction x du plan moyen

ǫ0y Déformation dans la direction y du plan moyen

xiii
ǫ1C Déformation ultime admissible en compression dans la direc-
tion des fibres

ǫ1T Déformation ultime admissible en tension dans la direction


des fibres

ǫ2C Déformation ultime admissible en compression dans la direc-


tion perpendiculaire aux fibres

ǫ2T Déformation ultime admissible en tension dans la direction


perpendiculaire aux fibres

η Distance entre deux individus codés sur un chromosome de


gènes continus

θk Orientation par rapport à l’axe x des fibres unidirectionnelles


du pli k. L’angle θk est positif selon la règle de la main droite

κ0x Courbure dans la direction x

κ0y Courbure dans la direction y

κ0xy Courbure dans la direction x et y

λi Facteur de pénalisation sur la contrainte wi

λf (m, n) Facteur de flambement selon les modes m et n

λf c Facteur de flambement critique

λmin Valeur d’une contrainte minimale sur la facteur de flambement


critique

λǫ Facteur de rupture par déformation

νxy Coefficient de Poisson apparent

ν12 Coefficient de Poisson dans le plan (1–2)

ν21 Coefficient de Poisson dans le plan (2–1)

ρ Densité du matériau

σ1 Contrainte normale dans la direction 1

xiv
σ2 Contrainte normale dans la direction 2

τ12 Contrainte de cisaillement dans la direction (1–2)

ψ Écart maximal entre un optimum et un optimum pratique (%)

Ω Domaine des variables d’un problème

Ω′j Domaine des gènes d’un chromosome cj

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.

En effet, les propriétés globales d’une structure stratifiée dépendent du design de


celle-ci. C’est-à-dire, elles dépendent de l’épaisseur, de l’orientation et du matériau de
chaque pli ainsi que de la séquence d’empilement de ces plis. Ce caractère indéterminé
est avantageux par rapport à d’autres matériaux, car il donne la possibilité à l’ingénieur
de concevoir des structures aux propriétés répondant à des besoins précis. Cependant,
cette liberté, à l’étape de la conception, rend la tâche de l’ingénieur plus complexe
compte tenu des nombreux choix qu’il doit faire afin de déterminer la structure globale
du stratifié. D’autre parts, les structures faites de matériaux composites coûtent cher.
C’est pourquoi il faut en utiliser le moins possible afin de diminuer les coûts. Ainsi,
dans un monde où la compétitivité est un facteur prédominant et où les exigences de
l’industrie sont de plus en plus pointues, ces choix ont une importance majeure sur
la qualité du produit final. C’est pourquoi des outils d’optimisation sont utilisés afin

1
2

d’aider la prise de décision et concevoir des structures aux propriétés optimisées.

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

sélectionner, parmi ces variables, lesquelles permettront la conception d’une structure


plus avantageuse par rapport à un problème donné.

De façon générale, un problème d’optimisation comprend une fonction coût, c’est-


à-dire un objectif qu’on minimise ou maximise en changeant la valeur des variables de
design. Des contraintes peuvent aussi être ajoutées. Cet ajout a pour effet de restreindre
l’espace dans lequel la recherche de solution s’effectue. Donc, la recherche d’une solution
optimale, répondant à un objectif et à des contraintes donnés, se fait en variant ces
variables de design. Pour l’optimisation d’une structure stratifiée, les variables de design
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. Tout dépendant du problème, le nombre
de variables diffère. Pour ce qui est des objectifs et des contraintes, ils peuvent aussi
être variés. Toutefois, compte tenu du comportement général des matériaux composites
et de leurs champs d’applications, certains objectifs et certaines contraintes sont plus
fréquemment utilisés.

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]).

Deuxièmement, il est aussi très intéressant de considérer le poids comme objectif au


problème, car cette propriété est souvent un élément décisif dans les problèmes de l’in-
dustrie et une des raisons de l’utilisation de tels matériaux. Toutefois, la minimisation
du poids passe, presque toujours, par l’utilisation de matériaux plus performants et
qui sont aussi plus coûteux. Par conséquent, il peut donc être aussi utile de considérer
le coût lors de la prise de décision. La caractéristique propre aux structures stratifiées
5

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.

Le problème d’optimisation des structures stratifiées peut être posé de différentes


façons. Originalement, il a été formulé comme un problème d’optimisation en continu
ayant comme variables de décision l’épaisseur et l’orientation des plis. Toutefois, pour
des raisons pratiques, ces variables sont souvent limitées à des valeurs discrètes imposées
par les techniques de fabrication pour l’orientation (par exemple : 0◦ , ±45◦ ,90◦ ) et par
6

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.

D’autre part, certains auteurs proposent l’utilisation d’heuristiques pour la réso-


lution de problèmes d’optimisation appliqués au design de structures stratifiées com-
posites. Par exemple, Erdal et Sonmez [11] utilisent le recuit simulé pour maximiser
le facteur de flambement. Pai et coll. [12] utilisent, quant à eux, la technique de la
recherche Tabou appliquée au même problème. Rao et coll. [4] quant à eux, utilisent la
méthode du « Scatter search » afin de résoudre différents problèmes propres au design
de structures stratifiées composites.

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.

L’objectif de ces travaux est de s’approprier les connaissances de la littérature por-


tant sur l’optimisation de structures stratifiées afin de concevoir un logiciel d’optimi-
sation fiable et pratique pour le groupe de recherche. Une approche se basant sur les
algorithmes génétiques a été préconisée. Dans un premier temps, divers éléments per-
formants tirés de la littérature ont été utilisés afin de concevoir et tester une première
version de l’algorithme génétique. Par après, des améliorations sont faites à cet al-
gorithme génétique afin de permettre l’hybridation de celui-ci avec une technique de
recherche dans le voisinage. Une approche similaire est proposée par Lin et Lee [17].
Toutefois, nos travaux proposent une définition du voisinage originale et plus complète.
Chapitre 2

Mécanique des stratifiés

Le but de ce mémoire est de présenter des exemples d’optimisation de structures


stratifiées. Avant d’aborder ce sujet, un résumé de la théorie classique des stratifiés
est présenté dans ce chapitre. Précisons cependant que seul un résumé est présenté. Le
lecteur intéressé par plus de détails est prié de consulter les ouvrages de Berthelot [2],
Hyer [18] ou de Jones [19]. Dans la première section de ce chapitre, on décrit la nomen-
clature utilisée afin de décrire une structure stratifiée. Dans la seconde, l’hypothèse de
Kirchoff est détaillée. Les deux sections suivantes donnent les équations qui relient les
déformations aux contraintes en premier lieu et aux efforts ensuite. La cinquième section
décrit le calcul des déformations dans chaque pli de même que le critère de rupture par
déformation maximale. Finalement, la sixième section décrit certains comportements
des plaques stratifiées utilisés dans ce document.

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

Fig. 2.1 – Nomenclature d’un stratifié – Orientation d’un pli

2.1 Nomenclature d’une structure stratifiée

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◦

Fig. 2.2 – Exemple d’un stratifié [(±45, 0)2 ]T

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.

Afin de pouvoir caractériser une structure stratifiée, il faut connaı̂tre la séquence


d’empilement des plis qui la constitue. C’est-à-dire, il faut déterminer l’orientation de
chaque pli et l’ordre dans lequel ils sont empilés. Par exemple, considérons des structures
stratifiées dont les plis sont d’épaisseur constante et sont composés d’un même matériau.
La séquence d’empilement du stratifié montré à la figure 2.2 est [+45, −45, 0, +45,
−45, 0]T . L’orientation de chaque pli est définie entre les crochets en commençant par
le pli extérieur inférieur, en passant par le plan moyen jusqu’au pli extérieur supérieur.
L’indice T à l’extérieur des crochets signifie que la séquence est définie au complet.
Toutefois, on peut simplifier cette représentation en regroupant les séquences qui se
répètent à l’intérieur de l’empilement en utilisant un indice signifiant le nombre de
fois que cette séquence est répétée. Dans ce cas, la séquence (+45, −45, 0) est répétée
deux fois à l’intérieur de la structure. De plus, si deux plis consécutifs sont de mêmes
orientations mais de signes opposés, on peut utiliser le signe ± devant cette orienta-
tion afin d’alléger la représentation. La nomenclature simplifiée de ce stratifié est alors
[(±45, 0)2 ]T .

On peut réduire davantage la nomenclature d’une structure stratifiée si celle-ci est


symétrique par rapport au plan moyen (z = 0). La façon de faire est de simplement
12
z

+45◦
−45◦
0◦ x
0◦
−45◦
+45◦

Fig. 2.3 – Exemple d’un stratifié [±45, 0]S

représenter la première moitié de la séquence et d’utiliser l’indice S à l’extérieur des


crochets afin d’indiquer la symétrie. Par exemple, la séquence d’empilement du stra-
tifié donné à la figure 2.3 est la suivante [+45, −45, 0, 0, −45, +45]T . Ce stratifié est
symétrique par rapport à son plan moyen et peut alors être représenté de façon sim-
plifiée par [±45, 0]S . Concentrons-nous maintenant sur la mécanique des structures
stratifiées.

2.2 L’hypothèse de Kirchoff

Les fondements de la théorie classique des stratifiés se basent sur l’hypothèse de


Kirchoff qui stipule que toute section perpendiculaire au plan moyen reste plane et
perpendiculaire à ce plan moyen déformé. De plus, comme les structures stratifiées
sont minces, on suppose aussi un état plan de contraintes. L’hypothèse de Kirchoff
est illustrée aux figures 2.4 et 2.5. Elle se traduit analytiquement par l’équation des
déplacements u, v et w d’un point (x, y, z) en fonction des déplacements du plan moyen
(u◦ , v ◦ et w ◦ ) et de la coordonnée z de ce point par rapport au plan moyen (voir
équation (2.1)).

∂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)

Les déformations ǫx , ǫy et γxy sont calculées en dérivant (2.1). Le résultat de cette


dérivation est donné à l’équation (2.2). Cette dernière peut être écrite de façon plus
compacte par l’équation (2.3) avec l’introduction des courbures κ◦x , κ◦y et κ◦xy définies
par l’équation (2.4). Finalement, les déformations du plan moyen sont donnés par les
variables ǫ◦x , ǫ◦y , γxy

.

∂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

ǫx (x, y, z) = ǫ◦x (x, y) + zκ◦x (x, y)


ǫy (x, y, z) = ǫ◦y (x, y) + zκ◦y (x, y) (2.3)

γxy (x, y, z) = γxy (x, y) + zκ◦xy (x, y)

∂ 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

Fig. 2.4 – Forme déformée (plan (x, z))

vA

∂w ◦
∂y
A

w◦ y v◦ < 0

z A Plan moyen
y

Fig. 2.5 – Forme déformée (plan (y, z))


15

2.3 Relations contraintes vs déformations

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
   

[Q] = [T ]−1 [Q][T ]−T (2.11)


16

 
cos2 θ sin2 θ2 sin θ cos θ
[T ] =  sin2 θ cos2 θ
−2 sin θ cos θ  (2.12)
 

− sin θ cos θ sin θ cos θ cos2 θ − sin2 θ

   
 ǫ1
 
  ǫx
 

ǫ2 = [T ] ǫy (2.13)

 1  
 1 
γ γ
 
2 12 2 xy

2.4 Relations efforts résultants vs déformations

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

Pour un stratifié symétrique, la matrice couplage membrane-flexion [B] est nulle.


De plus, si le stratifié est équilibré, les coefficients A16 et A26 sont aussi nuls. On
qualifie un stratifié d’équilibré lorsqu’il compte le même nombre de plis orientés à
+θk qu’à −θk sans tenir compte des orientations à 0◦ et 90◦ . Par exemple, le stratifié
[30, 0, 25, 90, −25, −30]T est équilibré tandis que le stratifié [30, 30, 0, 25, 90, −25, −30]T
ne l’est pas, car il ne compte pas autant de plis à +30◦ qu’à −30◦ . Ce dernier devien-
drait équilibré si un pli à −30◦ était ajouté à la séquence. Par conséquent, lorsqu’un
stratifié est symétrique et équilibré, les équations (2.14) et (2.15) sont simplifiées et
sont représentées par les équations (2.19) et (2.20). L’utilisation de ce type de stra-
tifié s’est répandue, car leur comportement ressemble à certains égards à celui d’un
matériau isotrope. C’est ce genre de structure qui est étudié dans ce document. De
plus, certaines propriétés deviennent alors faciles à calculer de façon analytique. C’est
le cas des charges de flambement et de la fréquence naturelle par exemple.

    ◦ 
 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
  

2.5 Déformations dans chaque pli

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

de déformation en compression ou en traction en fonction du signe de ǫ2 et que γ12F


prend une valeur positive ou négative de la limite admise en cisaillement en fonction du
signe de γ12 . Ensuite, pour chaque pli on détermine le rapport entre les limites ultimes
de déformations et les déformations calculées dans leurs directions respectives. Le plus
petit de ces rapports détermine la direction dans laquelle la déformation est le plus près
de la limite ultime pour ce pli. Ainsi, le pli ayant le plus petit de ces rapports est celui
le plus près de la rupture. C’est alors ce rapport qui détermine le facteur de rupture
par déformation λǫ .

ǫ1C < ǫ1 < ǫ1T


ǫ2C < ǫ2 < ǫ2T (2.23)
−γ12F < γ12 < γ12F

  
ǫ1F ǫ2F γ12F
λǫ = min min , , i pour i = 1, . . . , np (2.24)
ǫi1 ǫi2 γ12

2.6 Comportement des plaques stratifiées

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

Fig. 2.6 – Plaque simplement supportée

λf c = min(λf (m, n)), ∀ (m, n) (2.26)

" # " #
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

fn = min(f (m, n)), ∀ (m, n) (2.29)


21

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.

A11 A22 − A212


Ex ≡ (2.32)
A22 H

A11 A22 − A212


Ey ≡ (2.33)
A11 H

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

Les algorithmes génétiques

Ce mémoire porte sur l’optimisation de stratifiés en utilisant les équations de la


théorie classique des stratifiés présentées au chapitre précédent. Un programme d’op-
timisation est développé en se basant sur la méthode des algorithmes génétiques. Ce
programme est développé avec le logiciel MATLAB et le détail du code est donné à
l’annexe A. Les algorithmes génétiques font appel aux mécanismes de la sélection na-
turelle et de la génétique, en ce sens qu’ils simulent la survie des individus les mieux
adaptés d’une population ainsi que la transmission des gènes des parents aux enfants
par des processus de reproduction et de mutation. Ce chapitre décrit de façon détaillée
chacune des étapes de l’algorithme génétique utilisé dans cette étude.

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

Création des enfants

Génération de Classement
Reproduction l’ensemble de des individus
reproduction

Modification des enfants

Mutation

Épaisseur Non Évaluation Construction de


variable ? des enfants la nouvelle
génération
Oui

Addition Non
de plis Convergence ?

Oui

Soustraction Fin
de plis

Fig. 3.1 – Structure de l’algorithme génétique


25

3.1 Les schèmes

Avant de procéder à la description des étapes de l’algorithme génétique mentionnées


à la figure 3.1, il est important d’introduire le concept des schèmes. En fait, un schème
est un groupe de gènes à l’intérieur d’une série de gènes qui définit un individu (voir
Goldberg [20], Holland [21] et Davis [22]). Prenons l’exemple du tableau 3.1 où quatre
individus sont présentés. En regardant les gènes de ces individus, on remarque que les
deux premiers possèdent certaines similitudes. En effet, les gènes aux positions 1, 2 et
5, qui valent respectivement 5, 2 et 3, sont communs à ces deux individus. On dit alors
que ces deux individus partagent le schème 52##3. Le caractère « # » signifie que le
gène à cette position peut prendre n’importe quelle valeur. Dans ce tableau, on peut
identifier un second schème qui est commun aux deux derniers individus, soit le schème
1###4.

Tab. 3.1 – Quatre individus et leur mesure de performance

Individu Gènes F (x)


1 5 2 1 5 3 150
2 5 2 2 1 3 145
3 1 3 2 3 4 60
4 1 1 4 5 4 55

Sommairement, l’algorithme génétique oriente la recherche par la création de nou-


veaux individus à partir d’anciens individus considérés comme performants par rapport
à une certaine fonction d’évaluation F (x). Plus précisément, l’algorithme génétique
identifie les schèmes performants des individus déjà parcourus et construit de nou-
veaux individus en combinant ces schèmes entre eux. Un schème performant est défini
comme un groupe de gènes qui, lorsque présent chez un individu, permet à celui-ci
d’obtenir un degré de performance élevé, ou un F (x) élevé, par rapport aux autres
individus de la population. Dans l’exemple précédent, le premier schème identifié est
plus performant que le second car il permet aux deux premiers individus d’obtenir une
plus grande performance par rapport à la fonction d’évaluation F (x) (voir tableau 3.1).

Finalement, c’est par des processus pseudo-aléatoires que l’algorithme génétique


réussit à trouver et à combiner entre eux les schèmes performants. Cela est fait en favo-
risant la reproduction des individus les plus performants qui peuvent alors transmettre
26

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.

3.2 Représentation génétique des stratifiés

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
...

Fig. 3.2 – Représentation génétique


28

Tab. 3.2 – Codage d’un individu en utilisant deux chromosomes

Chromosome Type Gène


1 2 3
1 Orientation θ1 θ2 θ3
2 Matériau mat1 mat2 mat3

Tab. 3.3 – Décodage d’un individu composé de deux chromosomes

Pli Chromosome 1 Chromosome 2


Orientation Matériau
1 θ1 mat1
2 θ2 mat2
3 θ3 mat3

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.

Prenons un exemple appliqué aux structures stratifiées. Lorsque le domaine Ω com-


prend quatre orientations discrètes possible (0, +45, −45 et 90), il est nécessaire d’uti-
29

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.

Tab. 3.4 – Codage du domaine discret Ωi par le domaine discret Ω′i

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

3.3 Génération de la population initiale

La population initiale P0 (voir figure 3.1 : Génération de la population initiale)


est générée de façon aléatoire selon le nombre de chromosome nc de chaque individu,
le nombre de gènes de chaque chromosome ng (i), le domaine des gènes de chaque
chromosome Ω′i et le nombre d’individus dans la population N. Ainsi, pour tous les
individus de la population, on attribue aléatoirement un allèle appartenant à Ω′i à
chaque gène de chaque chromosome i.

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.

Tab. 3.6 – Population initiale P0 , (N = 5, Ω′1 = {1, 2, 3} et Ω′2 = {1, 2})

P0 (i) Chromosome 1, (c1 ) Chromosome 2, (c2 ) F (x)


Orientations Matériaux
1 0 0 1 2 3 3 2 1 0 0 2 2 2 1 1 1 F1
2 0 0 0 0 3 1 2 3 0 0 0 0 1 1 2 1 F2
3 0 0 0 0 0 0 3 2 0 0 0 0 0 0 2 2 F3
4 1 3 1 2 1 2 2 1 1 1 2 2 2 1 1 1 F4
5 0 0 0 2 1 2 3 2 0 0 0 1 1 2 1 2 F5

3.4 Évaluation des individus

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.

Pour des problèmes d’optimisation non contraints, la valeur de performance F (x)


est reliée directement à l’objectif f (x) du problème. D’autre part, si l’objectif d’un
problème est la maximisation de la charge de rupture (f (x) = λǫ ), alors le programme
de calcul des structures composites détermine cette valeur (voir équation (2.24)) et fixe
la performance de cet individu avec celle-ci (F (x) = λǫ (x)). Toutefois, la procédure est
différente pour des problèmes qui sont contraints. En effet, il faut alors déterminer une
façon d’inclure ces contraintes à même l’évaluation de la performance. Une manière d’y
arriver est d’utiliser une fonction de pénalisation. Cette technique est la plus répandue,
car elle peut s’appliquer à la plupart des contraintes. La fonction de pénalisation a pour
but de défavoriser un individu ne respectant pas une ou des contraintes au problème
par rapport à un autre qui les respecte. La façon d’y arriver est d’altérer la qualité
réelle d’un individu violant une ou des contraintes en diminuant l’objectif de celui-ci
de façon à ce qu’il soit moins intéressant qu’un autre individu appartenant au domaine
réalisable. Cet individu pénalisé aura donc moins de chance de se reproduire et tendra
à disparaı̂tre de la population. On peut formuler de différentes façons la fonction de
pénalisation. L’équation (3.1) pose le problème d’optimisation de façon générale tan-
dis que l’équation (3.2) définit la fonction de pénalisation linéaire F (x) associée à ce
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.

Il faut déterminer les facteurs de pénalisation λi (équation (3.2)) de façon à af-


fecter suffisamment l’objectif f (x) afin que l’algorithme ne considère par des solu-
tions irréalisables. En effet, souvent la solution optimale d’un problème d’optimisation
possède une ou des contraintes qui sont actives. Lorsqu’une contrainte d’une solution
est active, c’est que la solution se situe sur une des limites qui sépare le domaine
réalisable du domaine non réalisable. Par exemple, considérons le problème d’optimi-
sation donné au tableau 3.7 (tiré du chapitre 4.2 du présent document). L’objectif de
ce problème est la maximisation du module de rigidité Ex (voir équation (2.32)) tout
en ayant une module de cisaillement Gxy (voir équation (2.34)) supérieur à 12 GPa et
un coefficient de Poisson νxy (voir équation (2.35)) inférieur à 0,50. La solution opti-
male de ce problème, selon Luersen et coll. [7], possède deux contraintes actives (voir
tableau 3.8). En effet, le module de cisaillement Gxy et le coefficient de Poisson νxy de
la solution optimale valent respectivement 12,0 GPa et 0,5, soit les limites inférieures
et supérieures de ces contraintes. Dans ce cas, une solution violant une des contraites
aura probablement un objectif (Ex ) supérieur à la solution optimale. C’est pourquoi
il faut pénaliser suffisamment cette solution, qui viole la contrainte, afin de la rendre
moins attrayante par rapport à des solutions qui ne violent pas la contrainte. Sinon,
l’algorithme se concentrera sur une solution non réalisable et, par conséquent, générera
une solution violant une ou des contraintes. Par ailleurs, il n’est pas non plus avanta-
geux d’imposer de trop grands facteurs de pénalisation, car cela peut avoir pour effet de
limiter l’espace de recherche. Ces facteurs de pénalisation λi sont donc des paramètres
propres au problème qu’il faut déterminer adéquatement. C’est souvent l’expérience qui
permet de déterminer les valeurs adéquate des λi .

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

Tab. 3.7 – Formulation du problème d’optimisation avec des variables continues

Maximiser : Ex
Sous les contraintes : Gxy ≥ 12 GPa
νxy ≤ 0,50

Tab. 3.8 – Solution optimale

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

1 Représentation avec 3 variables (codage) [ θ1 /θ2 /θ3 ]s


2 Interprétation (décodage) [θ1 /θ2 /θ3 /θ3 /θ2 /θ1 ]t

Tab. 3.10 – Représentation d’un stratifié équilibré de six plis avec trois variables

1 Représentation avec 3 variables (codage) [ ±θ1 / ± θ2 / ± θ3 ]t


2 Interprétation (décodage) [+θ1 / − θ1 / + θ2 / − θ2 / + θ3 / − θ3 ]t

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.

3.5 Classement des individus

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.

3.6 Génération de l’ensemble de reproduction

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.

Pour simuler ce mécanisme, l’algorithme génétique favorise la reproduction des in-


dividus les mieux adaptés à leur environnement par rapport à d’autres qui le sont
moins. Pour y arriver, un certain nombre r de parents seulement est choisi parmi la
population pour former l’ensemble de reproduction (figure 3.1 : Génération de l’en-
semble de reproduction). Ces parents sont sélectionnés aléatoirement parmi la popu-
lation avec l’imposition d’un biais afin de rendre plus probable le tirage des meilleurs
individus, c’est-à-dire ceux ayant la plus grande valeur de la fonction d’évaluation F (x)
(équation (3.2)). Différentes façons peuvent être utilisées afin de déterminer la probabi-
lité de sélection de chacun des individus. Par exemple, on peut répartir les probabilités
proportionnellement au poids des qualités de chaque solution par rapport à la somme
totale des qualités de la population (roulette) ou en répartissant linéairement les pro-
babilités selon le rang des individus dans la population.
36

La répartition des probabilités de sélection des individus selon la méthode de la


roulette est donnée par l’équation (3.3). Cette méthode utilise directement la propor-
tion que fait la valeur de la fonction objectif F (xi ) (équation (3.2)), d’un individu xi ,
par rapport à la somme de tous les objectifs des N individus de la population pour
déterminer la probabilité ps de sélection de cet individu. De cette façon, plus un individu
a une forte qualité F par rapport au reste de la population, plus celui-ci a de chances
de se reproduire. Toutefois, comme la sélection se fait aléatoirement, les moins bons
individus ont tout de même une chance de faire partie de l’ensemble de reproduction.

F (xi )
ps (xi ) = PN (3.3)
k=1 F (xk )

Une variante de cette méthode est de déterminer la probabilité ps de l’individu xi


selon son rang k parmi la population. On rappelle ici que, suite au classement des
individus (voirs section 3.5), les individus de la population sont positionnés pour que
le meilleur soit inséré au premier rang et que le moins bon soit au rang k = N. Par
conséqent, la probabilité de sélection d’un individu xi est définie selon son rang k par
l’équation (3.4).

2(N − k + 1)
ps (xi ) = (3.4)
N(N + 1)

Le tableau 3.11 compare le probabilités de sélection des individus d’une population


de trois individus (N = 3). Par la suite, chaque individu se voit attribuer un intervalle
sur une droite de 0 à 1 qui est défini selon sa probabilité. Par exemple, en utilisant
la méthode de linéarisation selon le rang (tableau 3.11), les intervalles sont [0 à 0,50[
pour le premier individu, [0,50 à 0,833[ pour le second et [0,833 à 1,0] pour le dernier.
Ainsi, pour faire la sélection d’un parent, on procède à un tirage aléatoire d’un nombre
compris entre 0 et 1 et l’intervalle dans lequel ce nombre se situe détermine l’individu
qui devient parent.

La méthode de linéarisation est plus efficace que la méthode de la roulette dans


certaines situations (voir Gürdal et coll. [24]). En effet, lorsque les individus de la
population ont des objectifs similaires, ce qui survient souvent vers la fin de la recherche,
la méthode de la roulette différencie moins les individus entre eux que la méthode
37

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.

Finalement, l’ensemble de reproduction R est formé de r couples de parents. Chaque


couple est composé de deux parents distincts choisis aléatoirement avec la méthode de
sélection. En effet, le croisement de deux parents identiques ne peut que générer une
copie de ces parents. Les opérateurs de reproduction agissent alors avec chaque couple
de parents de l’ensemble de reproduction afin de produire les enfants. Dans la section
qui suit, le fonctionnement de ces opérateurs de reproduction est expliqué.

Tab. 3.11 – Comparaison entre les deux méthodes de sélection

xi F (xi ) Roulette selon le rang


ps
1 1000 82,6% 50,0%
2 200 16,5% 33,3%
3 10 0,8% 16,7%

3.7 La reproduction

L’étape de la reproduction est le moteur de la recherche faite par l’algorithme


génétique. C’est par celle-ci que les caractéristiques dominantes des parents sont trans-
mises aux enfants et que de nouveaux individus plus performants sont possiblement
créés. Fidèle au principe général qui guide les algorithmes génétiques, la reproduc-
tion se fait en se basant sur une mécanique aléatoire. Il existe une grande quantité
d’opérateurs de reproduction. En effet, afin de construire un algorithme génétique effi-
cace, il faut souvent concevoir ou utiliser des opérateurs spécialisés pour répondre aux
besoins d’une application particulière. De plus, les opérateurs de croisement diffèrent en
fonction du type de gène constituant les chromosomes d’un individu. Plus précisément, il
38

existe des opérateurs de croisements applicables à des chromosomes constitués de gènes


représentés par des variables discrètes et d’autres pour des chromosomes constitués de
gènes représentés par des variables continues.

Comme il a été mentionné précédemment, c’est à partir de chaque couple de parents


(p1 , p2 ) de l’ensemble de reproduction R que les opérateurs de reproduction travaillent.
Un enfant e est créé avec chaque couple de parents. Donc, pour créer les r enfants de
l’ensemble E, il faut utiliser r couples de parents. Pour des individus représentés par plu-
sieurs chromosomes ci , les opérateurs de reproduction sont appliqués indépendemment
entre chaque paires de chromosomes respectifs des parents. Par exemple, pour des indi-
vidus composés de deux chromosomes, le chromosome c1 de l’enfant e(c1 , c2 ) est généré
par le croisement des chromosomes c1 des parents p1 et p2 . Par le fait même, le chro-
mosome c2 de l’enfant e(c1 , c2 ) est construit par le croisement des chromosomes c2 des
parents p1 et p2 . Dans la littérature, des opérateurs de reproduction générant deux en-
fants sont fréquemment utilisés. Dans ces travaux, nous avons volontairement décidé,
pour des raisons pratiques, de ne créer qu’un seul enfant par opération de reproduction.
Définissons maintenant ces opérateurs de reproduction applicables aux chromosomes
discrets.

3.7.1 Chromosomes discrets

Prenons un exemple général afin de visualiser les opérateurs de reproduction. Dans


cet exemple, chaque individu est composé d’un seul chromosome. Le domaine des gènes
de celui-ci est Ω′ = {1, 2, 3} qui représentent respectivement des plis à 0◦2 , ±45◦ et 90◦2 .
Le tableau 3.12 démontre le croisement à un point (X1P) d’un couple de parents p1
et p2 tirés de l’ensemble de reproduction R. Pour créer l’enfant e, il faut tout d’abord
tirer un nombre au hasard afin de déterminer le point de croisement qui est défini par
le caractère « | » dans les prochains tableaux. Ce nombre aléatoire est compris entre
1 et ng − 1, où ng est le nombre total de gènes du chromosome. L’enfant e est alors
constitué des gènes du parent 1 (p1 ) précédant le point de croisement et des gènes du
parent 2 (p2 ) suivant le point de croisement. L’enfant e généré par le croisement à un
point des parents [02 / ± 45/902 /02 / ± 45/902]s et [902 / ± 45/02 /902 /±45/02 ]s est le
stratifié [02 / ± 45/902/02 / ± 45/02]s .
39

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).

Tab. 3.12 – Opérateur à un point de croisement (X1P)

p1 : 1 2 3 1 | 2 3 e: 1 2 3 1 | 2 1
p2 : 3 2 1 3 | 2 1

Tab. 3.13 – Opérateur à deux points de croisement (X2P)

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.

Tab. 3.14 – Représentation de deux individus d’épaisseurs différentes à l’aide de 8 gènes

xi (c1 ) Codage de xi (c1 ) Décodage de xi (c1 )


1: 0 0 1 2 3 1 2 3 [02 / ± 45/902/02 / ± 45/902]s
2: 0 0 0 0 3 2 1 3 [902 / ± 45/02 /902 ]s

Dans ce cas, Le Riche et Haftka [13] proposent l’utilisation d’opérateurs de repro-


duction spécifiques. Le tableau 3.15 définit l’opérateur à un point de croisement à partir
du plus épais des parents (X1P-épais). Donc, le croisement se fait à partir du parent
40

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

3.7.2 Chromosomes continus

Deux opérateurs de croisement sont utilisés pour des chromosomes continus. Le


premier est identique à l’opérateur à un point de croisement X1P du tableau 3.12 qui
transmet à l’enfant e les gènes du premier parent p1 précédant le point de croisement
et ceux du deuxième parent p2 suivant ce même point. Le second opérateur se nomme
croisement arithmétique et réalise une combinaison linéaire des gènes des deux parents
41

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

Comme dans la nature, l’algorithme génétique simule des processus de mutation.


La mutation est nécessaire afin de diversifier la recherche et de permettre, à l’occa-
sion, d’introduire dans la population des schèmes nouveaux qui n’auraient pas pu être
générés par la simple reproduction. En effet, la mutation modifie certains gènes des
individus d’une population de façon aléatoire pour les remplacer par d’autres valeurs
déterminées aussi aléatoirement. Dans l’algorithme génétique, les opérateurs de muta-
tion interviennent après l’étape de croisement et s’appliquent à l’ensemble d’enfants E
généré par la reproduction (voir figure 3.1 : Mutation).

3.8.1 Chromosomes discrets

La mutation simple est appliquée à certains enfants de l’ensemble E selon une


probabilité pm . Lors de la muation, un gène vk d’un certain enfant e est choisi au hasard.
Ce gène est alors modifié aléatoirement par une valeur différente de vk appartenant au
domaine Ω′ = Ωk \vk (voir tableau 3.17). Dans ce tableau, le quatrième gène (v4 ) est
muté et sa valeur change de 3 à 1. Dans cette situation, cela signifie le remplacement
d’un pli à 902 par un pli à 02 . Lorsque le problème considère des stratifiés d’épaisseur
variables, la mutation ne s’applique que sur les gènes différents de « 0 » (représentant
des plis vides) et elle ne peut non plus introduire le gène « 0 » à un des gènes. En
résumé, ce type de mutation n’intervient pas sur l’épaisseur des stratifiés, car d’autres
42

opérateurs jouent ce rôle particulier : les opérateurs d’addition et de soustraction de


plis. De plus, la mutation ne peut modifier qu’un gène par individu de la population
selon la probabilité pm de l’opérateur. En contrepartie, il est parfois souhaitable de
perturber davantage les gènes de la population en permettant la mutation de plus d’un
gène par individu. Ainsi, la mutation multiple est une variante de la mutation simple.
Elle s’applique alors à tous les gènes de chaque individu de la population avec une
probabilité plus faible que la mutation simple. Donc, avec ce dernier opérateur, il est
possible que plus d’un gène soit muté à l’intérieur d’un même individu.

Tab. 3.17 – Exemple d’une mutation simple

Codage de e(i) Décodage de e(i)


Avant : 0 0 1 2 3 1 2 3 [02 / ± 45/902 /02 / ± 45/902 ]s
Après : 0 0 1 2 1 1 2 3 [02 / ± 45/02 /02 / ± 45/902 ]s

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é.

Tab. 3.18 – Exemple d’une permutation

Chromosome Séquence d’empilement


Avant : 0 0 1 2 3 1 2 3 [02 /±45/902 /02 / ± 45/902 ]s
Après : 0 0 1 3 3 1 2 2 [02 /904 /02 /±452 ]s
43

3.8.2 Chromosomes continus

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]◦ .

Donc, la mutation uniforme sélectionne aléatoirement un gène vk parmi les n gènes


d’un chromosome cj (cj = [v1 , . . . , vk , . . . , vn ] ) pour le remplacer par une valeur vk′
choisie aussi aléatoirement à l’intérieur du domaine Ω′j du chromosome. La mutation non
uniforme (voir Michalewicz [23]), quant à elle, détermine la valeur de vk′ différemment
(voir équation (3.7)). Pour muter un gène vk , on doit tirer un nombre aléatoire l valant
soit 0 soit 1 afin de déterminer laquelle des équations (3.7) il faut appliquer. La fonction
Λ(t, y) est définie à l’équation (3.8). Cette dernière dépend des deux paramètres fixes
T et q qui sont respectivement le nombre maximal de générations et le degré de non-
uniformité de la mutation. La variable r est un nombre réel aléatoire compris entre 0
et 1 et la variable t est l’âge de la population (génération courante). Cet opérateur a
la propriété de générer des mutations réparties uniformément sur l’espace au début de
la recherche (t étant petit) et des mutations réparties sur un espace plus restreint ou
local lorsque t s’approche du nombre maximal de générations T .

(
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)

Les mutations uniformes et non uniformes s’appliquent subséquemment à chaque


individu de la population selon une probabilité qui leur est propre. C’est-à-dire que pour
chacune de celles-ci, un test est passé à tous les individus de la population afin de savoir
si la mutation est appliquée ou non. Si le test est affirmatif, ces opérateurs sélectionnent
44

un gène aléatoirement parmi ceux de l’individu en question et procèdent à la mutation


de ce gène. Des variantes de ces opérateurs peuvent aussi être utilisées. Elles consistent
plutôt à tester chacun des gènes de chaque individu de la population afin de déterminer
si une mutation est effectuée ou non. Ces mutations peuvent alors modifier plus d’un
gène d’un même individu. On nomme alors les variantes de la mutation uniforme et
non-uniforme, la mutation uniforme multiple et la mutation non-uniforme multiple.

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.

3.9 Épaisseur variable

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 .

Tab. 3.19 – Exemple de l’addition d’un pli

Codage de e(i) Décodage de e(i)


Avant : 0 0 1 2 3 1 2 3 [02 / ± 45/902/02 / ± 45/902]s
Après : 0 1 2 3 1 2 3 1 [02 / ± 45/902/02 / ± 45/902/02 ]s

Tab. 3.20 – Exemple de la soustraction d’un pli

Codage de e(i) Décodage de e(i)


Avant : 0 0 1 2 3 1 2 3 [02 / ± 45/902/02 / ± 45/902]s
Après : 0 0 0 1 2 3 2 3 [02 / ± 45/902/ ± 45/902]s

3.10 Évaluation des enfants

L’étape qui suit la création et la modification de l’ensemble d’enfants E est l’éva-


luation de la performance de ceux-ci. La performance des enfants est calculée de la
même façon qui a été définie à la section 3.4. Par conséquent, à chaque génération le
coût de calcul nf , défini par le nombre d’appel de la fonction d’évaluation ou par le
nombre d’individus évalués, est fonction du nombre d’enfants r compris dans l’ensemble
E. Comme r est constant, le coût de calcul du programme, en fonction du nombre de
génération effectué t, est donné par l’équation (3.9).

nf = N + tr (3.9)
46

3.11 Construction de la nouvelle génération

Avec les valeurs de performances des enfants de l’ensemble E, il est possible de


construire la nouvelle génération Pt+1 . Pour ce faire, le principe de sélection élitiste
est souvent utilisé. Cette technique consiste à transmettre à la nouvelle génération le
meilleur individu de la génération précédente et de compléter la population par les r
enfants générés (où r = N − 1). Dans ces travaux, on utilise une variante de cette
méthode, étudiée par Soremekun [5] qui est le multi-élitisme. Cette méthode consiste à
construire la nouvelle génération en conservant plutôt les Nk meilleurs individus de la
population et en complétant la population avec les r enfants générés (où r = N − Nk ).
De plus, un enfant est inclus dans la nouvelle génération seulement s’il n’existe pas
déjà parmi celle-ci. Cette façon de faire empêche la présence d’individus identiques
dans la population et permet une diversification des solutions et la recherche de plu-
sieurs solutions performantes différentes. Si l’ensemble E ne permet pas de compléter
la nouvelle génération, c’est-à-dire que |Pt+1 | < N, les N − |Pt+1 | individus manquant
sont sélectionnés parmi les individus de la génération précédente (Pt ) tout en respectant
le critère de diversité. Cette technique est une forme générale du principe élitiste. En
effet, utiliser un multi-élitisme avec Nk valant 1 est équivalent à utiliser simplement
l’élitisme standard.

Le contrôle de la diversité de la population se fait différemment en fonction du


domaine des gènes des chromosomes. En effet, lorsque deux individus sont représentés
par des gènes appartenant à un domaine discret Ω′d , il suffit qu’un seul gène soit différent
pour considérer ces deux individus comme distincts. Il faut toutefois utiliser un autre
critère pour différencier deux individus lorsque ceux-ci sont représentés par des gènes
appartenant à un domaine continu Ω′c . En effet, comme les gènes peuvent prendre
n’importe qu’elle valeur continue appartenant à Ω′c , cela implique donc que deux gènes
peuvent être différents d’un point de vue mathématique, mais identiques d’un point
de vue pratique. Dans notre cas, lorsque Ω′c est le domaine des gènes représentant les
orientations des plis d’un stratifié, on considère qu’une variation d’un centième sur un
seul gène n’est pas assez significative pour que ces deux individus soient traités comme
distincts. De plus, dans certains cas, la position relative des gènes dans le chromosome
n’importe pas sur l’évaluation des individus. C’est-à-dire que, pour certains problèmes,
l’empilement des plis n’a pas d’effet sur l’objectif. Cela se produit lorsque le problème
d’optimisation traite des propriétés équivalentes du stratifiés Ex , Gxy et νxy par exemple.
47

À 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)

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.

Tab. 3.21 – Critères d’arrêt

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

Au cours de ce chapitre, un algorithme d’optimisation basé sur les principes des


algorithmes génétiques a été présenté. Dans les prochains chapitres, cet algorithme est
appliqué à la résolution d’une série de problèmes d’optimisation reliés au design de
structures stratifiées.
Chapitre 4

Validation du programme
d’optimisation

Ce chapitre est consacré à la validation du programme d’optimisation qui se base sur


les principes des algorithmes génétiques tels qu’ils ont été décrits au chapitre précédent.
Pour ce faire, le programme est appliqué à la résolution de problèmes d’optimisation
de structures stratifiées tirés de la littérature. Les équations utilisées pour évaluer les
individus de la population résultent de la théorie classique des stratifiés. Ces équations
ont été présentées au chapitre 2. Les premiers exemples correspondent à des problèmes
d’optimisation avec des variables discrètes. Ensuite, un problème d’optimisation avec
des variables continues est étudié. Le but de ce chapitre est de valider les résultats
obtenus par l’algorithme génétique développé en les comparant à ceux donnés dans la
littérature.

49
50

4.1 Problèmes d’optimisation avec des variables


discrètes

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.

Les paramètres de l’algorithme génétique utilisés lors de la génération des résultats


sont donnés au tableau 4.3. En résumé, les résultats sont obtenus avec une population
de 20 individus dont les 5 meilleurs sont conservés à chaque génération (stratégie multi-
51

y
Ny

x
Nx Nx
b

Ny

Fig. 4.1 – Plaque simplement supportée

Tab. 4.1 – Propriétés du matériau

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

Tab. 4.2 – Représentation génétique des variables

Domaine Variables/allèles
Ωi (décodé) 02 ±45 902
Ω′i (codé) 1 2 3
52

Tab. 4.3 – Paramètres de l’algorithme génétique

N Nk Reproduction Mutation Critère d’arrêt


X2P Multiple Permutation tn
20 5 1,00 0,20 0,20 200

é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.

4.1.1 Problème de validation 1

La première optimisation correspond à la maximisation du facteur de rupture cri-


tique (λcr ) sous une contrainte sur la contiguı̈té des plis. La formulation générale de
ce problème est donnée au tableau 4.4. La contrainte de contiguı̈té est une règle empi-
rique qui limite le nombre de plis consécutifs de même orientation afin d’empêcher la
53

Tab. 4.4 – Formulation des problèmes d’optimisation 1 et 2

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

Tab. 4.5 – Définition de l’épaisseur, des dimensions et du chargement (N = 175 N/m)

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 λǫ .

λcr = min(λf c , λǫ ) (4.1)

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.

Afin de pouvoir résoudre ce problème avec l’algorithme génétique, il faut déterminer


une façon de considérer les contraintes. Comme il a été mentionné précédemment, les
contraintes de symétrie et d’équilibrage des plis sont considérées par la représentation
des variables. Pour ce qui est de la contrainte de contiguı̈té, une fonction de pénalisation
54

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.

F (x) = f (x) + λmin(0, g(x)) (4.2)

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

Tab. 4.6 – Résultats du problème 1 (f (x) = λcr , np = 48, b = a/4 et Nx = N ,


Ny = N/8, N = 175 N/m)

n◦ Séquence d’empilement réf. λf c λǫ λcr


a [902 , ±454 , 04 , ±45, 04, ±45, 02 ]s [1] 14181.57 13531.54 λǫ
b [±453 , 02 , ±452 , 02 , 902 , 04 , ±45, 02]s [1] 14148.24 13531.54 λǫ
c [902 , ±453 , 02 , ±45, 02, ±45, 04 , ±45, 02 ]s [1] 14026.99 13531.54 λǫ
d [±452 , 02 , ±452 , 902 , 04 , ±45, 02, ±45, 02 ]s [1] 13675.55 13531.54 λǫ
1 [±45, 902 , ±453 , 04 , ±45, 04 , ±45, 02 ]s AG 14380,82 13531,54 λǫ
2 [±454 , 04 , ±452 , 04 , 902 , 02 ]s AG 14260,59 13531,54 λǫ
3 [902 , ±454 , 04 , ±45, 04, ±45, 02 ]s AG 14181,57 13531,54 λǫ
4 [±453 , 04 , ±452 , 04 , ±45, 902, 02 ]s AG 13561,59 13531,54 λǫ

solutions optimales (voir solutions a à d du tableau 4.6). Le mode de rupture critique


(λcr ) se fait alors par déformation maximale (λǫ ) et vaut 13531, 54. Les résultats ob-
tenus par notre algorithme génétique confirment ce mode de rupture (voir solutions 1
à 4 du même tableau) et permettent aussi de trouver d’autres designs optimaux qui
maximisent l’objectif tout en respectant la contrainte de contiguı̈té. On peut expli-
quer pourquoi, pour ce problème, il existe plusieurs solutions optimales. En effet, les
solutions sont toutes symétriques et il n’y a aucun moment appliqué sur la structure
ce qui implique que les déformations, au plan moyen (z = 0), dépendent seulement
de la matrice [A]. La matrice [A], telle que définie par l’équation (2.16), est fonction
de zk − zk−1 qui est une valeur constante pour tous les plis car ils ont tous la même
épaisseur. Par conséquent, l’empilement des plis n’influence pas le calcul des éléments
de cette matrice. Ainsi, toutes les solutions données dans le tableau précédent ont le
même facteur de rupture par déformation, car ils ont toutes la même matrice [A]. Cette
dernière est obtenue par différents empilements comptant tous 10 plis orientés à 0◦2 , 12
plis orientés à ±45◦ et 2 plis orientés à 90◦2 (voir tableau 4.7). Toutefois, l’empilement
a un impact sur le calcul du facteur de flambement critique (λf c ), car celui-ci dépend
z 3 −z 3
de certains coefficients de la matrice [D], qui eux, dépendent de la distance k 3 k−1
des plis par rapport à l’axe neutre (voir l’équation (2.18)). C’est pourquoi ces valeurs
varient d’une solution à l’autre dans le tableau 4.6. En résumé, toutes combinaisons
de cette configuration permettant l’obtention d’un λf c supérieur à λǫ est une solution
optimale de ce problème. Appliquons maintenant le programme à la résolution d’un
56

second problème d’optimisation.

Tab. 4.7 – Design optimal

Orientation 0◦2 ±45◦ 90◦2 λf c λǫ


nb. plis 10 12 2 ≥ λǫ 13531,54

4.1.2 Problème de validation 2

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).

Tab. 4.8 – Définition de l’épaisseur, des dimensions et du chargement (N = 175 N/m)

np a/b Nx Ny
48 4 N N /2

Le tableau 4.9 regroupe les solutions optimales et quasi optimales de ce problème


obtenues par Le Riche et Haftka [1] (solutions a à c) et quelques-unes des meilleures
solutions obtenues par notre algorithme (solutions 1 à 4) après avoir lancé 100 fois le
programme d’optimisation. La meilleure solution obtenue par l’algorithme génétique
(solution 1), après les 100 essais, confirme l’optimum défini par Le Riche et Haftka [1]
(solution a). Une solution quasi optimale est une solution dont la valeur de l’objectif
est légèrement inférieure à celle de l’optimum. En ce sens, on définit un optimum pra-
tique comme étant une solution quasi optimale à une certaine distance, en pourcentage,
de la solution optimale. Par exemple, le facteur de flambement (λf c ) de la solution 4
de ce tableau a comme valeur 10004,24 comparativement à 10007,75 pour la solution
optimale (solution a ou 1). À ce moment, cette solution est considérée comme un opti-
mum pratique à 0,04 % de l’optimum. Par conséquent, pour ce problème l’algorithme
génétique réussit à obtenir un optimum pratique à 0,04 % à toutes les tentatives. Le
57

coût moyen (nf ) de ce problème, calculé sur un échantillon total de 100 tentatives, est
alors de 4825.

Tab. 4.9 – Résultats du problème 2 (f (x) = λcr , np = 48, b = a/4 et Nx = N ,


Ny = N/2, N = 175 N/m)

n◦ Séquence d’empilement réf. λf c λǫ


a [902 , ±452 , 902, ±45, 902 , ±456 ]s [1] 10007,75 10405,39
b [902 , ±452 , 902, ±452 , 902 , ±45, 902, ±453 ]s [1] 10007,17 10195,35
c [±45, 904 , ±45, 902, ±455 , 902, ±45]s [1] 9986,12 10195,35
1 [902 , ±452 , 902, ±45, 902 , ±456 ]s AG 10007,75 10405,39
2 [902 , ±452 , 902, ±45, 902 , ±455 , 902]s AG 10007,17 10195,35
3 [±45, 902 , ±45, 904, ±454 , 902, ±452 ]s AG 10004,47 10195,35
4 [904 , ±457 , 902, ±452 ]s AG 10004,24 10405,39

Les résultats de ce problème diffèrent de ceux du précédent. En effet, il n’existe


qu’une solution optimale à ce problème comparativement à plusieurs pour le premier.
L’augmentation du chargement Ny par un facteur quatre provoque la diminution de
la valeur nominale des facteurs de flambement et de rupture par déformations car la
plaque est alors sollicitée de façon plus importante. Ils étaient de l’ordre de 14, 3 × 103
et de 13, 5 × 103 respectivement pour le premier problème (voir tableau 4.6) et sont
maintenant de l’ordre de 10, 0 × 103 et de 10, 4 × 103 (voir tableau 4.9). L’augmenta-
tion de Ny a aussi un effet sur le flambement qui devient alors critique par rapport
au facteur de rupture par déformation. Cela a donc un impact sur le design des so-
lutions optimales car la séquence d’empilement est maintenant à considérer pour le
calcul du facteur de flambement, ce qui n’est pas nécessaire pour le calcul du facteur
de rupture par déformation pour ce type de chargement. Prenons, par exemple, les
solutions 1 et 4 du tableau 4.9. Elles ont chacune le même nombre de plis orientés
à 90◦2 et à ±45◦ , soit 6 et 18 respectivement. Elles ont le même facteur de rupture
par déformation (λǫ = 10405, 39) mais elles ont un facteur de flambement différent
(λf c = 10007, 75 vs 10004.24). C’est la même chose qui se produit entre les solutions
b, c, 1 et 3. Ils ont le même nombre de plis à 90◦2 et à ±45◦ sauf que leur empilement
est différent (n90◦2 = 8 et n±45◦ = 16). Leurs facteurs de rupture par déformation sont
alors identiques, mais leurs facteurs de flambement sont différents. À ce moment, le
programme doit, non seulement déterminer le nombre optimal de plis de chaque orien-
58

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.

4.1.3 Problème de validation 3

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).

Tab. 4.10 – Formulation du problème d’optimisation 3

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

Tab. 4.11 – Définition de l’épaisseur, des dimensions et du chargement (N = 175 N/m)

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.

Tab. 4.12 – Résultats du problème 3 (f (x) = λf c , np = 48, b = a/4 et Nx = N ,


Ny = N/4, N = 175 N/m)

no Séquence d’empilement réf. λf c λǫ


a [902 , ±455 , 02 , ±45, 04 , ±45, 02]s [1] 12686,97 12690,69
1 [902 , ±455 , 02 , ±45, 04 , ±45, 02]s AG 12686,97 12690,69
2 [±452 , 902 , ±453 , 04 , ±45, 02 , ±45, 02]s AG 12634,43 12690,69
3 [±453 , 902 , ±452 , 02 , ±45, 04 , ±45, 02]s AG 12580,86 12690,69
4 [±45, 902 , ±453 , 02 , ±452 , 04 , ±45, 02]s AG 12576,13 12690,69

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

permuter le premier pli à 0◦2 avec le cinquième pli à ±45◦ .

De plus, comme la charge Ny a diminué par rapport au problème précédent, il


est normal de constater que les facteurs de rupture aient augmenté. Ils étaient de
l’ordre de 10, 0 × 103 et de 10, 4 × 103 respectivement pour le second problème (voir
tableau 4.9) et les deux sont maintenant de l’ordre de 12, 7 × 103 (voir tableau 4.12).
Il est aussi intéressant de remarquer que le facteur de rupture par flambement est tout
juste inférieur au facteur de rupture par déformations pour la solution optimale. En
effet, seulement quatre unités séparent ces deux facteurs de rupture. Aussi, les solutions
de ce problème ressemblent à celles du premier où on comptait 10 plis orientés à 0◦2 ,
12 plis orientés à ±45◦ et 2 plis orientés à 90◦2 (voir tableau 4.6). Donc, ces designs
comptent deux plis de plus à ±45◦ et deux plis de moins à 0◦2 . Cela ne les différencie
alors que d’une seule variable.

4.1.4 Problème de validation 4

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

Tab. 4.13 – Formulation du problème d’optimisation 4

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é

Tab. 4.14 – Définition de l’épaisseur, des dimensions et du chargement (N = 175 N/m)

np a/b Nx /Ny
64 2 1

évaluations de la fonction d’évaluation.

D’après les résultats tirés de la littérature (solutions a à f), on remarque que ce


problème compte plusieurs solutions optimales. À ce moment, les designs optimaux ont
un facteur de flambement, qui est critique pour ce problème, de 3976,64. Les facteurs
de rupture par déformations varient alors entre 8942,60 et 14217,63. Les résultats ob-
tenus par notre programme confirment le mode de rupture critique par flambement,
mais un design optimal différent est généré. En effet, la solution 1 donne un facteur
de flambement de 3976,85 qui est légèrement supérieur à celui des solutions optimales
mentionnées précédemment. Cette différence n’est pas significative d’un point de vue
pratique, mais d’un regard mathématique, ce résultat confirme la sensibilité du pro-
gramme face à l’objectif du problème d’optimisation.

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

Tab. 4.15 – Résultats du problème 4 (f (x) = λf c , np = 64, b = a/2 et Nx = N ,


Ny = N, N = 175 N/m)

n◦ Séquence d’empilement réf. λf c λǫ


a [9010 , ±452 , 902, ±453 , 902, ±454 ]s [1] 3976,64 14217,63
b [±45, 9010 , ±45, 908 , ±45, 908]s [1] 3976,64 8942,60
c [904 , ±452 , 9016 , ±45, 906 ]s [1] 3976,64 8942,60
d [902 , ±45, 906 , ±45, 908, ±45, 9010 ]s [1] 3976,64 8942,60
e [908 , ±45, 902 , ±45, 902, ±45, 902 , ±456 ]s [1] 3976,64 14217,63
f [±45, 908 , ±45, 9018 , ±45]s [15] 3976,64 8942,60
1 [904 , ±45, 902 , ±45, 9010, ±45, 904 , ±45, 904]s AG 3976,85 9845,70
2 [9010 , ±45, 902, ±457 , 902 , ±45]s AG 3976,64 14217,63
3 [906 , ±45, 902 , ±45, 904 , ±45, 904 , ±45, 902 , ±452 , 902 ]s AG 3976,20 11629,44
4 [902 , ±45, 9010 , ±452 , 906 , ±45, 904, 02 ]s AG 3976,02 7463,41
5 [906 , ±45, 904 , ±45, 904, ±454 , 904 , ±45]s AG 3975,88 12506,56

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.

Le tableau 4.17 résume la performance de l’algorithme génétique lors de la résolution


des quatre problèmes précédents. La taille du domaine des problèmes est donnée de
même que l’optimum pratique que le programme est assuré d’atteindre pour tous les
essais et finalement le coût de calculs moyen sur 100 essais. On remarque que l’obtention
d’un optimum pratique d’au moins 0,1% est assurément atteinte pour tous les problèmes
à chaque essai. De plus, le coût d’évaluation varie de 4800 à 5600 pour des problèmes
où la taille est de 5, 3 × 105 et 4, 3 × 107 . On peut donc conclure que le programme
63

Tab. 4.16 – Nombre de plis de chaque orientation pour les designs quasi optimaux

numéro 0◦2 ±45◦ 90◦2 Empilements


distincts
1 0 18 14 3
2 0 6 26 4
3 0 8 24 1
4 0 12 20 1
5 0 14 18 1
6 2 8 22 1

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.

Tab. 4.17 – Résumé de la performance de l’algorithme génétique pour les quatre


problèmes aux variables discrètes

problème taille du domaine optimum pratique nf


5
1 5, 3 × 10 0,00% 4831
2 5, 3 × 105 0,04% 4825
3 5, 3 × 105 0,10% 5570
4 4, 3 × 107 0,02% 4887

4.2 Problème d’optimisation avec des variables


continues

Cette section est réservée à la validation du programme d’optimisation lorsqu’ap-


pliqué à la résolution de problèmes à variables continues. À cet effet, un problème tiré
de Luersen et coll. [7] est étudié dans cette section. La formulation de ce problème
est donnée au tableau 4.18. L’objectif est la maximisation du module de rigidité en
64

membrane Ex d’un stratifié symétique et équilibré de 16 plis d’épaisseur. Le problème


est contraint sur le module de cisaillement Gxy qui doit être supérieur à 12 GPa et sur
le coefficient de Poisson νxy qui ne doit pas dépasser 0,50. Les propriétés du matériau
utilisé sont données dans le tableau 4.19. Les orientations sont définies par le domaine
continu Ω = {−90◦ , . . . , 90◦ }. Afin de s’assurer de l’équilibre des stratifiés, chaque
gène gk du problème est considéré comme un empilement de deux plis orientés à ±θk .
Par conséquent, le domaine des gènes continus des quatre variables à déterminer est
Ω′ = {0◦ , . . . , 90◦}.

Tab. 4.18 – Formulation du problème d’optimisation 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

Tab. 4.19 – Propriétés du matériau

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

Afin d’utiliser l’algorithme génétique et de considérer les contraintes, une fonc-


tion de pénalisation est utilisée. La fonction d’évaluation des individus de l’algorithme
génétique, incluant la pénalisation, est alors donnée par l’équation (4.4). Dans cette
équation, x représente un design donné, Ex est le module de rigidité en membrane de
ce design, Ex est la moyenne des modules de rigidité en membrane des individus de
la population initiale et le terme suivant est la pénalisation. La valeur de Ex est fixée
au départ et reste constante par la suite. De cette façon, la fonction d’évaluation est
65

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

g1 (x) = Gxy (x)/12, 0 − 1 − γ


(4.5)
g2 (x) = 1 − νxy (x)/0, 5 − γ

Les paramètres de l’algorithme génétique utilisés pour ce problème sont résumés au


tableau 4.20. Les résultats sont obtenus avec une population de 20 individus dont les 5
meilleurs sont conservés à chaque génération (stratégie multi-élitiste : chapitre 3). Dans
ce cas, les facteurs λi sont les mêmes pour les deux contraintes et valent chacun 4. Pour
maintenir la diversité des solutions dans la population, les équations (3.10) et (3.11) sont
utilisées avec un ∆ valant 0,8. Chaque analyse est stoppée après tn = 200 générations
sans amélioration de la meilleure solution de la population.

Tab. 4.20 – Paramètres de l’algorithme génétique

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.

Tab. 4.21 – Définition des probabilités des opérateurs de l’algorithme génétique

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)

n◦ Séquence d’empilement réf. f (x) g1 (x) g2 (x)


Ex (GPa) Gxy (GPa) νxy
a [±36, 6/ ± 43, 1/ ± 50, 1/ ± 54, 9]s [7] 14,54 12,00 0,50
b [±39, 5/ ± 41, 7/ ± 46, 2/ ± 57, 7]s [7] 14,54 12,00 0,50
c [±35, 4/ ± 45, 4/ ± 49, 7/ ± 54, 2]s [7] 14,54 12,00 0,50
1 [±34, 2/ ± 48, 4/ ± 49, 8/ ± 52, 0]s AG 14,56 12,00 0.50
2 [±38, 9/ ± 41, 4/ ± 47, 5/ ± 57, 1]s AG 14,55 12,00 0.50
3 [±38, 4/ ± 40, 2/ ± 52, 6/ ± 53, 6]s AG 14,55 12,00 0.50
4 [±39, 0/ ± 40, 0/ ± 50, 5/ ± 55, 4]s AG 14,54 12,00 0.50

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.

Ce comportement de proximité est aussi présent entre les Nk individus élites de


68

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

de calcul moyen nf , en incluant le coût des tn générations nécessaires à l’atteinte du


critère d’arrêt, est de 5742 appels de la fonction d’évaluation.

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

Ce chapitre porte sur l’étude de problèmes d’optimisation qui diffèrent de ceux


étudiés au chapitre précédent par l’ajout de deux variables. Ainsi, l’épaisseur du stra-
tifié, donc le nombre de plis, et le matériau dont est constitué chaque pli du stratifié
deviennent des inconnues au problème d’optimisation. Ces variables s’ajoutent à l’orien-
tation des plis considérée au chapitre précédent. Cela a pour conséquence d’agrandir
considérablement le domaine réalisable, ou encore d’augmenter le nombre de solutions
possibles de ces problèmes. Ces nouvelles variables nécessitent aussi des modifications à
la représentation des individus ainsi que l’ajout de nouveaux opérateurs. En effet, pour
représenter l’épaisseur d’un individu, on introduit un nouvel allèle « 0 » représentant un
pli vide (voir tableau 3.14). Pour définir les matériaux de chacun des plis, un deuxième
chromosome est utilisé (voir tableau 3.2). Par conséquent, un individu est maintenant

70
71

constitué de deux chromosomes, chaque chromosome comptant un même nombre ng de


gènes. Le premier chromosome définit l’orientation des plis et le second le matériau
de ces mêmes plis. De plus, l’algorithme génétique doit considérer deux nouveaux
opérateurs afin de gérér la variation de l’épaisseur des plis : l’addition de plis et la
soustraction de plis (voir figure 3.1 : Addition de plis et Soustraction de plis).

La fonction objectif des problèmes de ce chapitre porte sur la minimisation du


poids et du coût de façon distincte ou de façon simultanée sous forme d’objectifs mul-
tiples. Le but de ce chapitre est d’évaluer la capacité de l’algorithme à résoudre divers
problèmes pratiques. Par conséquent, le programme est utilisé pour résoudre une gamme
de problèmes dont certains sont inspirés de la littérature et d’autres sont originaux. Les
résultats obtenus ne sont pas comparés avec ceux de la littérature comme c’était le cas
au chapitre précédent. L’emphase est plutôt mise sur l’analyse des résultats et de la
performance du programme d’optimisation.

5.1 Minimisation du poids et du coût séparément

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

Fig. 5.1 – Plaque simplement supportée

Tab. 5.1 – Géométrie et chargement (N = 175 N/m)

a b Nx Ny
(m) (m) (N/m) (N/m)
0,9144 0,762 N N

Tab. 5.2 – Propriétés du Carbone–époxy (C–E) et du Verre–époxy (V–E)

Propriétés Carbone–époxy Verre–époxy


(C–E) (V–E)
Module longitudinal, E1 138,0 GPa 43,4 GPa
Module transverse, E2 9,0 GPa 8,9 GPa
Module de cisaillement dans le plan, G12 7,1 GPa 4,55 GPa
Coefficient de Poisson dans le plan, ν12 0,30 0,27
Densité, ρ 1605 kg/m3 1993 kg/m3
Épaisseur d’un pli, t 0,127 mm 0,127 mm
Coût (U/kg) 8 1
73

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).

Tab. 5.3 – Codage et décodage des deux chromosomes

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

Tab. 5.4 – Exemple d’un individu codé et décodé

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

g(x) = fn (x)/fmin − 1 (5.2)

g(x) = λf c (x)/λmin − 1 (5.3)

Les paramètres de l’algorithme génétique sont donnés dans le tableau 5.7. En


résumé, les résultats sont obtenus avec une population de 20 individus dont les 5
meilleurs sont conservés à chaque génération (stratégie multi-élitiste chapitre 3). En-
suite, un opérateur à deux points de croisement à partir du parent le plus épais (voir
section 3.7.1 : X2P–épais) est appliqué à l’ensemble de parents de l’ensemble de re-
production. Ensuite, quatre opérateurs de mutation sont appliqués subséquemment à
75

Tab. 5.5 – Formulation générale des problèmes (i), (ii) et (iii)

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)

Problème Objectif Contrainte


f (x) g(x)
(i) W (poids) fn (x) ≥ fmin
(ii) W (poids) λf c (x) ≥ λmin
(iii) C (coût) fn (x) ≥ fmin
76

l’ensemble d’enfants généré par le croisement. Ainsi, l’opérateur de mutation multiple


(voir section 3.8.1) a la possibilité de muter 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 avec une probabilité de 0, 20. Les deux autres opérateurs de
mutation sont nécessaires pour modifier l’épaisseur des individus. Un pli est ajouté à
un enfant avec une probabilité de 0,05 et un pli est éliminé avec un probabilité de 0,10.
Le critère d’arrêt utilisé est l’atteinte de 600 générations sans amélioration du meilleur
individu de la population. Le facteur de pénalisation λ vaut 500 tandis que le facteur de
bonification β vaut 0,001. De plus, pour les problèmes (i) et (ii), les deux chromosomes
comptent 16 gènes (ng ) tandis que pour le problème (iii) ils en comptent 25 chacun.

Tab. 5.7 – Paramètres de l’algorithme génétique

N Nk λ β Reproduction Mutation Arrêt


X2P–épais Multiple Permut. Add. Sous. tn
20 5 500 0,001 1,00 0,20 0,20 0,05 0,10 600

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.

Le problème (i) considère la minimisation du poids (W ) avec une contrainte sur la


fréquence naturelle minimale (fmin ). Les résultats de ce problème sont donnés dans le
tableau 5.8 pour différentes valeurs de fmin . Tout d’abord, on remarque que les solu-
tions sont toutes composées de plis de carbone–époxy orientés à ±45◦ mais d’épaisseurs
différentes. Ce résultat s’explique par le fait que les plis de carbone–époxy sont plus
77

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.

Tab. 5.8 – Résultats du problème (i) (f (x) = W et fn ≥ fmin )

no fmin Empilement Nb. C-E/ C W fn λf c nf


plis V-E (U) (N) (Hz)
1 25 [±456 ]s 24 24/0 27,28 33,75 27,19 28,34 10310
2 30 [±457 ]s 28 28/0 31,82 39,38 31,72 45,00 11130
3 35 [±458 ]s 32 32/0 36,37 45,01 36,26 67,17 12900
4 40 [±459 ]s 36 36/0 40,91 50,63 40,79 95,64 15070
5 45 [±4510 ]s 40 40/0 45,46 56,26 45,32 131,20 19800

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

donné, si on peut, après n changements à ce dernier, obtenir la solution optimale.

Le problème (ii) a comme objectif la minimisation du poids (W ) avec une contrainte


sur le facteur de flambement critique (λf c ). Donc, c’est le même objectif que celui du
problème précédent sauf que la contrainte sur la fréquence naturelle est remplacée
par une contrainte sur le facteur de flambement. Les résultats de ce problème sont
donnés dans le (tableau 5.9) pour différentes valeurs minimales du facteur de flambe-
ment critique (λmin ). Les mêmes remarques que celles faites au problème précédent sont
portées à ces résultats. En effet, les solutions optimales sont aussi composées seulement
de plis de carbone–époxy orientés à ±45◦ qui varient seulement en épaisseur. L’effet
de l’utilisation de plis orientés à ±45◦ est donc aussi bénéfique pour la satisfaction de
la contrainte sur le flambement que pour la fréquence naturelle comparativement aux
autres orientations possibles.

Tab. 5.9 – Résultats du problème (ii) (f (x) = W et λf c ≥ λmin )

no λmin Empilement Nb. C-E/ C W fn λf c nf


plis V-E (U) (N) (Hz)
1 90 [±459 ]s 36 36/0 40,91 50,63 40,79 95,64 14320
2 125 [±4510 ]s 40 40/0 45,46 56,26 45,32 131,20 18115
3 225 [±4512 ]s 48 48/0 54,55 67,51 54,38 226,71 27180
4 275 [±4513 ]s 52 52/0 59,10 73,14 58,92 288,24 27160

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 .

Pour le premier sous-problème (λmin = 90), la solution optimale est obtenue à


tous les essais et compte 18 paires de plis à ±45◦ pour un poids de 50,63 N et un
facteur de flambement de 95,64. La solution optimale du second sous-problème, donnée
79

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.

Pour le dernier sous-problème (λf c = 275), la solution optimale compte 26 paires


de plis faits de carbone–époxy orientés à ±45◦ . Le poids minimal est alors de 73,14 N
et le facteur de flambement est de 288,24. Par conséquent, en augmentant la contrainte
de 50 U, λmin passant de 225 à 275, il faut ajouter 4 plis au stratifié précédent, soit
un gène à chaque chromosome, afin de toujours respecter la contrainte. Contrairement
aux résultats du sous-problème 3, l’algorithme génétique génère, dans ce cas, à toutes
les fois une solution au poids minimal. La différence entre les solutions est alors au
niveau du chromosome orientation qui affecte seulement la contrainte sur le facteur de
flambement (λf c ). Le design optimal (tableau 5.9 : 4) est obtenu intégralement 22 fois
sur 50. Des voisins différents d’un seul gène sont obtenus 14 fois sur 50, des voisins
de deux gènes 9 fois sur 50, de trois gènes 4 fois sur 50 et finalement le programme
génère une seule fois un voisin de quatre gènes. En résumé, pour ce sous-problème, le
80

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 .

Tab. 5.10 – Résultats du problème (iii) (f (x) = C et fn ≥ fmin )

no fmin Empilement Nb. C-E/ C W fn λf c nf


plis V-E (U) (N) (Hz)
1 25 [±4511 ]s 44 0/44 7,76 76,82 26,87 62,98 16250
2 30 [±4513 ]s 52 0/52 9,17 90,79 31,76 103,96 33664
3 35 [±4515 ]s 60 0/60 10,58 104,76 36,64 159,70 39817
4 40 [±4517 ]s 68 0/68 11,99 118,72 41,53 232,48 33763
5 45 [±4519 ]s 76 0/76 13,40 132,69 45,34 309,78 29211

Quant à la performance de l’algorithme génétique pour ce problème, l’obtention de


la solution optimale [±4511 ]s , pour un fmin de 25 Hz, se fait 45 fois sur 50. Le coût de
ce design est alors de 7,76 U et la fréquence naturelle est 26,87 Hz. Les autres designs
obtenus sont des voisins de cet optimum qui diffèrent par un seul gène du chromosome
des orientations ce qui a un effet uniquement sur la fréquence naturelle. Pour ce qui
81

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

supérieur de 16 % de l’optimum. L’algorithme génétique est alors resté pris dans un


optimum local et n’a pu en sortir. Par contre, les ±45 de C–E ont été placés à l’extérieur
du stratifié. La difficulté que l’algorithme rencontre dans ce cas est que cet optimum
local est loin de l’optimum global. En effet, il faut procéder à plusieurs changements
consécutifs à partir de ce minimum local afin de se déplacer vers le minimum global.
Tout d’abord, il faut changer le gène du matériau de carbone–époxy en un gène de
verre–époxy et ensuite procéder à l’addition de trois autres plis pour ainsi remplacer
trois gènes « 0 ». C’est pour cela que l’algorithme stagne à ce point.

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.

Le comportement du programme est similaire pour une fréquence minimale de 45


Hz. C’est-à-dire qu’il génère aussi des solutions non optimales 17 fois sur les 50 es-
sais. Toutefois, à 11 occasions, le design final en est un qui compte un total de 80 plis
de verre–époxy comparativement à 76 pour le design optimal. Ces solutions sont des
voisins de l’optimum, car ils comptent seulement un gène supplémentaire dans chaque
chromosome. Cette différence implique l’ajout de quatre plis et augmente le coût de ces
stratifiés de 5,3% par rapport à l’optimum. Leur coût est alors de 14,11 U comparati-
vement à 13,40 U pour l’optimum. On considère alors ces designs comme étant quasi
optimaux, car une différence de 5,3% est acceptable. Par conséquent, le programme
résout ce problème de façon quasi optimale à 5,3% avec une probabilité 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.

Tab. 5.11 – Formulation générale du problème (iv)

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

no λmin Empilement Nb. C–E/ C W λf c nf


plis V–E (U) (N)
1 90 [±45, ±4510 ]s 44 4/40 11,60 75,46 90,75 22515
2 150 [±453 , ±459 ]s 48 12/36 19,99 79,73 165,56 23945
3 250 [±456 , ±457 ]s 52 24/28 32,21 82,64 259,47 27345
4 300 (*) 56 36/20 44,44 85,55 300,78 9897
5 350 [±4510 , ±454 ]s 56 40/16 48,28 84,19 354,64 32586
6 375 [±4515 ]s 60 60/0 68,19 84,39 442,79 24894

(*) [902 , ±453 , 902 , ±453, 02 , 906 , ±452 ]s

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.

Étudions maintenant la performance du programme face à l’obtention des solutions


optimales données dans le tableau 5.12. Tout d’abord, le programme trouve les stratifiés
au coût minimal pour toutes les valeurs du facteur de flambement imposé (λmin = 90,
150, 250, 300, 350, 375). C’est-à-dire qu’à toutes les fois, le design final compte une
proportion de plis faits de chaque matériau tel que donné dans le tableau des résultats
à la cinquième colonne du tableau. Dans ce cas, toutes les solutions ont le même coût
et le même poids, mais diffèrent dans la valeur du facteur de flambement. Finalement,
pour ce problème, le programme réussit à trouver l’optimum assurément à tous les
essais. Au chapitre du coût de calcul, il varie de 22, 5 × 103 à 27, 3 × 103 appels de la
fonction d’évaluation sauf pour le sous-problème 4 où il est seulement de 9, 9 × 103 .
La raison de cette différence majeure est que l’algorithme n’a pas passé de temps à
chercher une séquence d’empilement permettant une grande valeur du facteur de flam-
bement, c’est-à-dire, des plis de C–E orientés à ±45◦ , car la formulation l’en empêchait.
En effet, comme une des contraintes, celle sur le poids, est violée, la valeur de S dans
l’équation (5.4) est non nulle et F (x) prend nécessairement la forme pénalisée. Cette
86

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.

Tab. 5.13 – Résultats du problème (v) : minimisation du coût (f = C) avec des


contraintes sur le facteur de flambement (λmin ) et une limite sur le poids de 85 N
(δ = 0.01)

no λmin Empilement Nb. C–E/ C W λf c nf


plis V–E (U) (N)
1 90 [±45, ±4510 ]s 44 4/40 11,60 75,46 90,75 20593
2 150 [±453 , ±459 ]s 48 12/36 19,99 79,73 165,56 23810
3 250 [±456 , ±457 ]s 52 24/28 32,21 82,64 259,47 27099
4 300 [±459 , ±455 ]s 56 36/20 44,44 85,55 349,52 26844
5 350 [±459 , ±455 ]s 56 36/20 44,44 85,55 349,52 28764
6 375 [±4514 , ±45]s 60 56/4 64,35 85,74 442,71 21505

Au niveau de la performance du programme avec cette nouvelle formulation des


contraintes, le programme réussit à obtenir la proportion optimale de plis de chaque
matériau. En effet, comme pour le problème précédent, à tous les essais et pour toutes
les valeurs de la contrainte de flambement, le nombre de plis de chaque matériau des
designs finaux est le même. Ainsi, le programme génère des solutions au coût minimal
à toutes les fois. Le coût de calcul des problèmes avec cette formulation est similaire à
ceux de la formulation précédente.

Dans cette section, il a été question de problèmes portant sur la minimisation du


poids et du coût de stratifiés de façon indépendante. Des contraintes sur le facteur de
flambement critique, sur la fréquence naturelle et même sur le poids minimal ont été im-
88

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.

5.2 Minimisation du poids et du coût sous une


formulation à objectifs multiples

Il peut être intéressant de considérer des problèmes d’optimisation visant à mini-


miser le poids et le coût simultanément. En effet, la principale qualité des matériaux
composites est leur grand rapport rigidité–poids, mais l’utilisation de matériaux per-
formants entraı̂ne pratiquement toujours l’augmentation du coût du stratifié (voir sec-
tion 5.1). Par conséquent, lors de la conception il faut souvent faire des compromis entre
le coût et la performance d’une structure donnée. Ainsi, selon le critère qui prévaut
entre le poids et le coût lors de la conception, des solutions peuvent être avantageuses
par rapport à d’autres. Dans ce cas-ci, l’optimisation à objectifs multiples est un outil
afin de trouver ces solutions optimales en fonction de l’importance accordée entre les
89

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.

f (x) = αW + (1 − α)C (5.9)

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

Deux problèmes de minimisation du poids et du coût sous une formulation à mul-


90

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.

Tab. 5.14 – Formulation générale du problème à objectifs multiples (vi)

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

Tab. 5.15 – Formulation générale du problème à objectifs multiples (vii)

Minimiser : W (lbs) et C simultanément


En changeant : l’orientation (θk ) et le matériau des plis (matk )
θk = {0, ±(5, 10, 15, 20, 25, 30, 35, 40, 45, . . .
. . . , 50, 55, 60, 65, 70, 75, 80, 85), 90}
matk = {carbone/époxy, verre/époxy}
Sous les contraintes : – symétrique et équilibré
– fn (x) ≥ fmin

g1 (x) = fn (x)/fmin − 1 + δ ≥ 0 (5.14)

Tab. 5.16 – Géométrie et chargement (N = 175 N/m)

Problème a b Nx Ny fmin λmin


(m) (m) (N/m) (N/m) Hz
(vi) 0,9144 0,7620 N N 25 80
(vii) 0,9144 0,7620 – – 25 –

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

Tab. 5.17 – Codage et décodage des deux chromosomes (problème (vii))

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.

Tab. 5.18 – Paramètres de l’algorithme génétique

N Nk γ β Reproduction Mutation Critère


X2P–épais Multiple Permut. Add. Sous. d’arrêt
20 5 500 0,001 1,00 0,20 0,20 0,05 0,10 tn = 600

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)

α Empilement Nb. C–E/ C W λf c fn nf


plis V–E (U) (N) (Hz)
0,0 [±4512 ]s 48 0/48 8,47 83,80 81,77 29,31 26168
0,3 [±452 , ±458 ]s 40 8/32 14,74 67,12 88,25 34,03 18103
0,5 [±454 , ±455 ]s 36 16/20 21,71 57,42 85,16 36,14 16224
1,0 [±459 ]s 36 36/0 40,91 50,63 95,64 40,79 13587

design précédent, son poids est inférieur de 16,68 N et son coût est supérieur de 6,27 U.

Il y a une autre transition au niveau de la solution optimale pour un α de 0,5. Le


design optimal est maintenant fait de 16 plis de carbone–époxy et de 20 plis de verre–
époxy tous orientés à ±45◦ . Il compte alors un total de 36 plis soit 4 plis de moins
que lorsque α valait 0,3. Il compte aussi 8 plis de plus de C–E et 12 plis de moins de
V–E. Il y a une diminution du poids de 10 N et une augmentation du coût de 7 U. Les
contraintes sont encore une fois respectées.

Pour le problème où α vaut 1, l’optimisation est équivalent à la minimisation du


poids sous les contraintes sur le flambement et la fréquence naturelle. Par conséquent, il
est normal que la solution optimale soit faite seulement de plis de carbone–époxy. Elle
compte alors un total de 36 plis soit le même nombre que pour le problème précédent.
En effet, il est impossible de diminuer l’épaisseur, par le stratifié [±458 ]s par exemple,
car cela entraı̂nerait la violation de la contrainte sur le flambement qui serait alors
inférieure à 80 (λf c = 67, 17).

Le programme obtient le rapport optimal entre le nombre de plis de carbone–époxy


et de verre–époxy (C–E / V–E) donné dans le tableau à toutes les occasions. En effet,
le programme termine toutes les fois avec des stratifiés ayant le même nombre de plis
de chaque matériau tel que donné dans la quatrième colonne du tableau 5.19. Même
que pour des α valant 0,5 et 1, le programme génère à tous les coups les designs donnés
dans le tableau. Cela se produit 48 fois sur 50 pour un α de 0,3 et 35 fois sur 50 pour
un α nul. Les autres fois, le poids et le coût sont équivalents à la solution optimale,
94

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%.

Pour un α de 0,7 maintenant, la solution optimale compte un total de 32 plis dont


4 sont faits de carbone–époxy et 28 de verre–époxy. Pour cette valeur de α, il est utile
d’inclure des plis de carbone–époxy car le poids intervient dans l’objectif du problème.
Le coût de ce design est alors de 20,91 U, son poids est de 12,14 lbs ce qui donne un
f (x) de 14,77. Le gène définissant les plis de carbone est placé à la première position du
chromosome ou aux faces extérieures du stratifié. Le programme génère des populations
finales dont le meilleur individu est de la forme [±#, ±#7 ]s seulement 13 fois sur 50.
À ce moment, le poids est de 20,91 lbs et le coût est de 12,14 U pour une valeur f (x)
de 14,77. Le programme propose aussi deux autres designs différents. Le premier est
95

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)

α Schèmes Nb. C–E/ C W nf


plis V–E (U) (lbs)
0,0 [±#10 , 90]s 42 0/42 16,33 16,33 24072
0,7 [±#, ±#7 ]s 32 4/28 20,91 12,14 30712
0,8 [±#2 , 90, ±#4 ]s 26 10/16 31,28 9,35 41555
0,9 [±#3 , 90, ±#2 , 90]s 24 14/10 38,97 8,27 33728
1,0 [±#5 , 90]s 22 22/0 55,12 6,89 32590

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 0,9, la solution optimale compte 14 plis de carbone–époxy et 10 plis de


verre-époxy pour un total de 24 plis. Le poids et le coût optimal sont alors de 8,27 lbs et
38,97 U respectivement pour un f (x) de 11,34. L’utilisation de C–E augmente encore et
passe de 10 à 14 plis et c’est l’inverse pour le V–E qui passe de 16 à 14 plis. Le schème
de l’empilement optimale est [±#3 , 90, ±#2 , 90]s . Donc, les plis de C–E sont insérés
à l’extrémité du stratifié tandis que les plis de V–E sont plutôt utilisés à l’intérieur
de l’empilement. De plus, deux plis à 90◦ sont utilisés afin de réduire l’épaisseur de
la structure. Le premier est placé à la quatrième position du chromosome orientation
tandis que le deuxième est placé à la dernière position de ce même chromosome. De plus,
le premier est fait de C–E et le second de V–E. Le programme génère une population
finale dont le meilleur individu possède le schème performant 27 fois sur 50. D’autre
part, 19 fois sur 50 le meilleur individu de la population finale est à 2,6% du f (x)
optimal et il est à 1,8% 4 fois sur 50. En résumé, le programme génère une solution
quasi optimale à au moins 2,6% de l’optimum à toutes les fois pour ce problème et avec
un α de 0,9.

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.

Cette étude a aussi permis de vérifier les opérateurs d’addition et de soustraction de


plis qui sont nécessaires lorsque le nombre de plis est une variable au problème. De plus,
l’utilisation de deux chromosomes, un pour les orientations et l’autre pour les matériaux
des plis, a été vérifiée. Aussi, une formulation générale de la fonction d’évaluation des
individus F (x) et des contraintes gi (x) a été démontrée. Finalement, une optimisation
à objectifs multiples a été résolue par le programme et son comportement face à ce
genre de problème a pu être évalué.
Chapitre 6

Hybridation de l’algorithme
génétique

Ce chapitre porte sur l’hybridation de l’algorithme génétique. Cette technique est


utilisée afin d’améliorer les performances de l’algorithme génétique en combinant celui-
ci avec une autre technique d’optimisation. Différents auteurs ont proposés des algo-
rithmes génétiques hybrides pour des problèmes d’optimisation de structures stratifiées.
Kogiso et coll. [25] proposent un algorithme génétique hybride avec une heuristique
d’amélioration locale. Toutefois, cette méthode est applicable seulement à des problèmes
de flambement. Gantovnik et coll. [16] proposent une technique semblable mais qui est
applicable seulement à des variables continues. Lin et Lee [17], quant à eux, proposent
une hybridration avec une technique de recherche dans le voisinage qui s’applique à des
variables discrètes. Ils utilisent un modèle de régression afin de remplacer le calcul réel,
autrement fait par éléments finis, lors de la recherche dans le voisinage. Une approche

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.

Le fonctionnement de cette heuristique de recherche dans le voisinage est simple.


En effet, à toutes les générations, un individu est sélectionné aléatoirement parmi les
Nk meilleurs de la population. À partir de celui-ci, un ensemble de solutions définissant
son voisinage est construit. Ensuite, chacun de ces voisins est évalué afin de vérifier
s’il y a amélioration de la fonction d’évaluation. Le voisinage d’un individu consiste en
de petites modifications systématiques appliquées aux gènes de celui-ci. La définition
de ce voisinage doit être établie avant de lancer le programme. Dans ces travaux, une
définition originale du voisinage par rapport à ce que l’on retrouve dans la littérature
est proposée.

La figure 6.1 donne la structure de l’algorithme génétique hybride. L’heuristique


d’amélioration locale est insérée au début de la boucle principale. Une autre modifica-
tion est introduite à l’algorithme comparativement au précédent (voir figure 3.1). En
effet, on ajoute à l’ensemble d’enfants E, généré lors de la reproduction, les Nk meilleurs
individus de la population pour former un bassin d’individus B à partir desquels il est
possible d’appliquer les opérateurs de mutation, d’addition et de soustraction de plis.
Auparavant, ces opérateurs n’étaient appliqués que sur l’ensemble d’enfants généré par
la reproduction. Il est maintenant possible de procéder à de petites modifications di-
rectement sur les Nk meilleurs individus de la population. Définissons maintenant le
voisinage d’un individu fait de deux chromosomes.
100

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

Épaisseur Non Évaluation Construction de


variable ? des enfants la nouvelle
génération
Oui

Addition Non
de plis Convergence ?

Oui

Soustraction Fin
de plis

Fig. 6.1 – Structure de l’algorithme génétique hybride


101

6.1 Définition du voisinage

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})

Ind. Chromosome orientations Chromosome matériaux qualité


xi (c1 , c2 ) c1 c2 F (x)
i 4 2 3 1 2 4 2 2 1 1 2 1 2 1 2 1 1 2 fi

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

sélectionnés aléatoirement. À partir d’un gène sélectionné vk on définit deux voisins.


Dans le premier voisin, le gène vk est remplacé par l’allèle le précédent dans le domaine
Ω′1 . Pour le second voisin, le gène vk est plutôt remplacé par l’allèle le suivant dans Ω′1 .
Le tableau 6.2 donne un exemple de deux voisins définis à partir du chromosome c1 d’un
individu donné. Le gène sélectionné est le cinquième de ce chromosome qui porte alors
l’allèle « 2 ». Donc, le gène v5 est remplacé par l’allèle « 1 » pour le premier voisin y1 et
par l’allèle « 3 » pour le second voisin y2 . Par la suite, ces deux voisins sont évalués par
la fonction d’évaluation afin de déterminer si un de ceux-ci est plus avantageux. Si tel
est le cas, l’individu initial est remplacé par le voisin plus performant. Ces étapes sont
répétées sur ce même chromosome pour les a gènes choisis aléatoirement. Si la valeur du
gène vk sélectionné équivaut à une des bornes du domaine Ω′1 , soit l’allèle « 1 » et « 4 »
dans l’exemple précédent, on considère alors que l’allèle précédant la borne inférieure
est celui de la borne supérieure et que l’allèle suivant la borne supérieure est celui de
la borne inférieure.

Tab. 6.2 – Définition du voisinage à partir du chromosome orientations (c1 et Ω′1 =


{1, 2, 3, 4})

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

Deuxièmement, on définit d’autres voisins d’un individu x(c1 , c2 ) à partir du chromo-


some matériau (c2 ) et ce, en fonction du domaine des gènes de celui-ci (Ω′2 ). Le chromo-
some c1 de ces voisins reste inchangé. L’idée est de séparer les matériaux différents en les
regroupant à chacune des extrémités. Les designs optimaux des problèmes étudiés dans
ces travaux, lorsque ceux-ci comptaient au moins deux matériaux, ont tous ce genre de
configuration. Donc, ce voisinage sert à faciliter cette recherche qui n’est principalement
faite, par l’algorithme génétique de base, que par l’opérateur de permutation. Certes,
ce type de voisinage est propre aux problèmes étudiés au chapitre précédent, toutefois,
il est fort probable qu’il soit applicable, de façon générale, à d’autres problèmes. Le
tableau 6.3 donne un exemple de ce type de voisinage créé à partir du chromosome
matériau (c2 ) d’un individu x. Le domaine de c2 comprend deux allèles (Ω′2 = {1, 2}).
Dans ce cas, le chromosome c2 compte cinq gènes contenant l’allèle « 1 » et quatre gènes
contenant l’allèle « 2 ». À ce moment, deux voisins sont définis. Le premier (y1 ) insère
103

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 ».

Tab. 6.4 – Définition du voisinage à partir des chromosomes c1 et c2 (Ω′1 = {1, 2, 3, 4}


et Ω′2 = {1, 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

6.2 Résolution des problèmes

Dans cette section, on applique l’algorithme génétique hybride à la résolution des


problèmes déjà étudiés au chapitre 5. Le but est alors de déterminer si les changements
proposés permettent l’amélioration de la performance de l’algorithme comparativement
aux résultats déjà obtenus.

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

Tab. 6.5 – Paramètres de l’algorithme génétique hybride

N Nk λ β Reproduction Mutation Arrêt


X2P–épais Multiple Permut. Add. Sous. tn
20 5 500 0,001 1,00 0,08 0,80 0,05 0,20 100

Le tableau 6.6 compare le coût de calcul n′f de l’algorithme génétique hybride à


celui de l’algorithme génétique standard nf pour la résolution du problème (i) (voir
tableau 5.8). Tout d’abord, on remarque que les améliorations apportées ont permis
une réduction du coût de calcul pour ce problème variant de 57% à 93%. De plus, à
toutes les occasions le programme génère la solution optimale donnée dans le tableau
et ce pour toutes les valeurs de fmin .

Tab. 6.6 – Résultats du problème (i) (f (x) = W et fn ≥ fmin )

n◦ fmin Empilement n′f nf %


(tab. 5.8) de réd.
1 25 [±456 ]s 566 1310 57%
2 30 [±457 ]s 578 2130 73%
3 35 [±458 ]s 613 3900 84%
4 40 [±459 ]s 635 6070 89%
5 45 [±4510 ]s 720 10800 93%

Le tableau 6.7 compare le coût de calcul du nouveau programme à celui de l’ancien


pour la résolution du problème (ii) (voir tableau 5.9). Encore une fois, les solutions
données dans ce tableau sont obtenues à toutes les fois et le coût de calcul est diminué
considérablement. Dans ce cas, la diminution varie de 86% à 94% en fonction du sous-
problème.

Le tableau 6.8 procède au même genre de comparaison mais pour la résolution du


problème (iii) (voir tableau 5.10). On remarque une fois de plus que le coût de calcul
est diminué de façon importante et que les solutions optimales sont obtenues à tous
les essais par l’algorithme génétique hybride. La diminution du coût de calcul varie de
77% à 95% en fonction de la valeur de fmin .
107

Tab. 6.7 – Résultats du problème (ii) (f (x) = W et λf c ≥ λmin )

n◦ λmin Empilement n′f nf %


(tab. 5.9) de réd.
1 90 [±459 ]s 737 5320 86%
2 125 [±4510 ]s 830 9115 91%
3 225 [±4512 ]s 1078 18180 94%
4 275 [±4513 ]s 1182 18160 93%

Tab. 6.8 – Résultats du problème (iii) (f (x) = C et fn ≥ fmin )

n◦ fmin Empilement n′f nf %


(tab. 5.10) de réd.
1 25 [±4511 ]s 1687 7250 77%
2 30 [±4513 ]s 1520 24664 94%
3 35 [±4515 ]s 1406 30817 95%
4 40 [±4517 ]s 1179 24763 95%
5 45 [±4519 ]s 1118 20211 94%
108

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 .

Tab. 6.9 – Résultats de problème (iv)

n◦ λmin Empilement n′f nf %


(tab. 5.12) de réd.
1 90 [±45, ±4510 ]s 1185 13515 91%
2 150 [±453 , ±459 ]s 1426 14945 90%
3 250 [±456 , ±457 ]s 2409 18345 87%
5 350 [±4510 , ±454 ]s 2302 23586 90%
6 375 [±4515 ]s 1480 25894 94%

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.

Tab. 6.10 – Résultats de problème (v) (δ = 0.01)

n◦ λmin Empilement n′f nf %


(tab. 5.13) de réd.
1 90 [±45, ±4510 ]s 1133 11593 90%
2 150 [±453 , ±459 ]s 1189 14810 92%
3 250 [±456 , ±457 ]s 1655 18099 91%
4 300 [±459 , ±455 ]s 1136 17844 94%
5 350 [±459 , ±455 ]s 2633 19764 87%
6 375 [±4514 , ±45]s 1294 12505 90%

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.

Deuxièmement, pour un α de 0,7, le design [±50, ±507 ]s est obtenu intégralement


40 fois sur 50. Les autres fois, le programme génère des designs optimaux au chapitre
du poids et du coût, comptant chacun quatre plis de carbone–époxy et 28 plis de verre–
époxy, mais avec des séquences d’empilement différentes. Ces designs utilisent alors des
plis à 90◦2 . Comme il a été mentionné précédemment, cela affecte l’épaisseur totale de
la même façon que l’utilisation d’un seul gène représentant un pli à ±50◦ . Dans ce cas,
c’est seulement la fréquence naturelle qui diffère. Encore une fois, le programme génère
à tous les coups des designs dont le poids et le coût sont optimaux.

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

Cette étude a permis de développer et de tester un programme d’optimisation basé


sur les algorithmes génétiques. Ce programme a de plus été appliqué à la résolution
de plusieurs types de problèmes reliés au design optimal de structures stratifiées. Pre-
mièrement, des problèmes avec seulement les orientations des plis comme variables
ont été résolus. Pour ceux-ci, le domaine des orientations est soit discret soit continu.
La représentation des variables ne nécessitait alors qu’un chromosome. Ensuite, des
problèmes plus complexes ont été testés. En effet, deux types de variables s’ajoutent
alors à l’orientation des plis, soit le matériau et le nombre de plis. Ces nouvelles in-
connues ont deux conséquences directes sur l’algorithme. En premier lieu, les variables
définissant le matériau des plis sont représentées par un second chromosome. Par la
suite, l’épaisseur variable du stratifié impose l’ajout de deux opérateurs servant à faire
varier le nombre de plis : les opérateurs d’addition et de soustraction de plis. La flexi-
bilité de la structure générale du programme a permis de traiter ces différents types de
problèmes.

D’autre part, une formulation générale de la fonction d’évaluation des individus


de même que des contraintes (voir équations (5.10) à (5.13)) a été démontrée comme
étant efficace lorsqu’utilisée par le programme. Les contraintes sont alors ajoutées à la
fonction objectif en la pénalisant. Plus encore, les paramètres de l’algorithme génétique
sont restés constants pour tous les problèmes étudiés. On peut donc conclure que ceux-ci
sont une bonne base de départ pour des utilisations futures du logiciel pour la résolution

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.

De plus, il serait intéressant de vérifier l’effet de la variation de certains paramètres


sur la performance des programmes standard et hybride. Les paramètres du programme
sont la taille de la population, le nombre d’individus élites conservés à chaque généra-
tion, les opérateurs utilisés ainsi que leur probabilité d’application. Dans le même ordre
d’idées, il pourrait être envisageable de considérer une variation dynamique de certains
de ces paramètres. En effet, lorsque la recherche s’effectue depuis un certain nombre
de générations, il pourrait être pertinent de faire varier certains de ceux-ci afin de
concentrer la recherche autour de solutions déjà générées. Il faudrait donc étudier l’effet
de la variation des probabilités de mutation (permutation, addition et soustraction
de plis, etc.), la variation du nombre d’individus élites conservés d’une génération à
l’autre ou la variation de la taille de la population par exemple. Pour ce qui est de
la variation du nombre d’individus élites conservés d’une génération à l’autre, cela
pourrait permettre de retrouver un plus grand nombre de bonnes solutions parmi la
population finale.

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

[1] R. Le Riche et R.T. Haftka. « Optimization of laminate stacking sequence for


buckling load maximization by genetic algorithm ». AIAA Journal, 31(5) :951–
956, 1993.
[2] J.-M. Berthelot. Matériaux composites - Comportement mécanique et analyse
des structures. Masson, 2e édition, 1996.
[3] L. Grosset, S. Venkataraman et R.T. Haftka. « Genetic optimization of two-
material composite laminates ». Dans 16th Annual Technical Conference American
Society for Composites, septembre 2001.
[4] A. Rama Mohan Rao et N. Arvind. « A scatter search alogrithm for stacking
sequence optimisation of laminate composites ». Composite Structures, 70 :383–
402, 2005.
[5] G. Soremekun. « Genetic algorithms for composite laminate design and optimi-
zation ». Thèse de maı̂trise, Virginia Polytechnic Institute and State University,
1997.
[6] R. Le Riche et J. Gaudin. « Design of dimensionally stable composites by
evolutionary optimization ». Composite Structures, 41 :97–111, 1998.
[7] M.A. Luersen, R. Le Riche et F. Guyon. « A constrained, globalized, and
bounded Nelder-Mead method for engineering optimization ». Struc Multidisc.
Optim., 27 :43–54, 2004.

116
117

[8] S. Nagendra, R.T. Haftka, Z. Gürdal et J.H. Starnes Jr.. « Design of a


blade-stiffened composite panel with a hole ». Composite Structures, 18 :195–219,
1991.
[9] R.T. Haftka et J.L. Walsh. « Stacking-sequence optimization for buckling of
laminated plates by integer programming ». AIAA Journal, 30 :814–819, mars
1992.
[10] S. Nagendra, R.T. Haftka et Z. Gürdal. « Stacking sequence optimization of
simply supported laminates with stability and strain constraints ». AIAA Journal,
30(8) :2132–2137, 1992.
[11] O. Erdal et F.O. Sonmez. « Optimum design of composite laminates for maxi-
mum buckling load capacity using simulated annealing ». Composite Structures,
71 :45–52, 2005.
[12] N. Pai, A. Kaw et M. Weng. « Optimization of laminate stacking sequence for
failure load maximization using tabu search ». Composites : Part B, 34 :405–413,
2003.
[13] R. Le Riche et R.T. Haftka. « Improved genetic algorithm for minimum thi-
ckness composite laminate design ». Composite Engineering, 5(2) :143–161, 1995.
[14] Z. Gürdal, R.T. Haftka et S. Nagendra. « Genetic algorithms for the design
of laminated composite panels ». SAMPE, 30(3) :29–35, 1994.
[15] G. Soremekun, Z. Gurdal, R.T. Haftka et L.T. Watson. « Composite lami-
nate design optimisation by genetic algorithm with generalized elitist selection ».
Computers and Structures, 79 :131–143, 2001.
[16] V.B. Gantovnik, Z. Gürdal et L.T. Watson. « A genetic algorithm with
memory for optimal design of laminated sandwich composite panels ». Composite
Structures, 58 :513–520, 2002.
[17] C.-C Lin et Y.-J. Lee. « Stacking sequence optimization of laminated composite
structures using genetic algorithm with local improvement ». Composite Struc-
tures, 63 :339–345, 2004.
[18] M.W. Hyer. Stress analysis of Fiber-Reinforced Composite Materials. McGraw-
Hill, 1998.
[19] R.M. Jones. Mechanics of Composite Materials. Taylor and Francis, 2e édition,
1999.
[20] D.E. Goldberg. Algorithmes génétiques : Exploration, optimisation et appren-
tissage automatique. Addison-Wesley France, S.A, 1994.
118

[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

Code Matlab du programme

A.1 Fonctions satellites

A.1.1 Fonction principale

%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 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

prob = [61,62,63,64,65,71, 72, 73, 74,81,82,83,84,85,101, 102, 103, 104,121,122,123,124, 125,...


88, 88, 88, 88, 88, 88,89, 89, 89, 89, 89, 89];

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];

probleme = prob(i); % ID du probleme

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
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

megaOps = [1 0 display trace];

evalOps = [listeMat alpha pen probleme]; % [#probleme autreOption] options pour la fonction objectif

elitistOps = [ME Nk VE VEd]; % 1--> ME1 : Nk meilleurs parents


% 2--> ME2 : Nk meilleurs parmis parents et enfants

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Appel fonctions principales %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% definition des bornes des variables selon le probleme


[bounds,evalFN,selectFN,selectOps,xOverFloatFNs,xOverFloatOps,xOverIntFNs,xOverIntOps,xOverBinFNs,...
xOverBinOps,mutFloatFNs,mutFloatOps,mutIntFNs,mutIntOps,mutBinFNs,mutBinOps,mutAddDelIntFNs,...
mutAddDelIntOps,termFN,termOps,initOps] = defBounds(probleme);

termOps = [termOps maxGen]; % options de la fonction d’arret [#genMax]

evalOps = [initOps(1) listeMat probleme alpha pen];

% Fonction MEGA: Algorithme genetique de type multi-elitiste


[x,endPop,bFoundIn,traceInfo,evalCost,evalOps] = MEGAChromoMulti(popSize,initOps,bounds,evalFN,...
121

evalOps,megaOps,termFN,termOps,selectFN,selectOps,xOverFloatFNs,xOverFloatOps,xOverIntFNs,...
xOverIntOps,xOverBinFNs,xOverBinOps,mutFloatFNs,mutFloatOps,mutIntFNs,mutIntOps,mutBinFNs,...
mutBinOps,mutAddDelIntFNs,mutAddDelIntOps,elitistOps);

%%%%%%%%%% Fin Programme %%%%%%%%%%%


return

A.1.2 Codage des variables

function [bounds,evalFN,selectFN,selectOps,xOverFloatFNs,xOverFloatOps,...
xOverIntFNs,xOverIntOps,xOverBinFNs,xOverBinOps,mutFloatFNs,...
mutFloatOps,mutIntFNs,mutIntOps,mutBinFNs,mutBinOps,mutAddDelIntFNs,...
mutAddDelIntOps,termFN,termOps,initOps] = defBoundsChrmoMulti(probleme)

% Fonction definissant les frontieres des variables pour chaque problemes


% et les operateurs de selection, de croisement et de mutations

switch probleme

case {1} % Probleme 1: Continue [0,90] --> 16 plis


% 4 variables continues

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 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}

case {31,32,33} % Probleme 3 : cas 1,2,3 --> 48 plis


% 12 variables --> 3 choix d’angles [1,3]
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Options d’initialisation %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
nbGene1 = 12; % 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 {31,32,33,41,42,43,51,52,53}

case {34} % Probleme 3,4,5 : cas 4 --> 64 plis


% 16 variables -> 3 choix d’angles [1,3]
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
122

% 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}

case {61,62,63,64,65} % Probleme 6 : nb de variables indetermines ??????


% 16 variables (plis-max) -> 3 choix d’angles [1,3] et 2 choix matétiaux
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Options d’initialisation %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
nbGene1 = 16; % par chromosome (--> nbPlis)
nbGene3 = 1;
plisVide = 1;
initOps = [nbGene1 plisVide];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Definition de frontiere et du domaine %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
bounds = [1,3,1,1,nbGene1;1,2,1,1,nbGene1] ; %1,2,1,1,nbGene3];
% 1 Chromosome [borneInf;borneSup;[Continu(0),Discret(1) ou Float(-1)]; precision]
% fin cas {6}

case {71,72,73,74} % Probleme 7 : nb de variables indetermines ??????


% 16 variables (plis-max) -> 3 choix d’angles [1,3] et 2 choix matétiaux
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Options d’initialisation %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
nbGene1 = 16; % par chromosome (--> nbPlis)
plisVide = 1;
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;1,2,1,1,nbGene1];
% fin cas {7}

case {81,82,83,84,85} % Probleme 8 : nb de variables indetermines ??????


% 16 variables (plis-max) -> 3 choix d’angles [1,3] et 2 choix matétiaux
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Options d’initialisation %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
nbGene1 = 26; % par chromosome (--> nbPlis)
plisVide = 1;
initOps = [nbGene1 plisVide];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Definition de frontiere et du domaine %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
bounds = [1,3,1,1,nbGene1;1,2,1,1,nbGene1];
123

% 1 Chromosome [borneInf;borneSup;[Continu(0),Discret(1) ou Float(-1)]; precision]


% fin cas {8}

case {10,101,102,103,104,105,106} % Probleme 10 : nb de variables indetermines ??????


% 22 variables (plis-max) -> 3 choix d’angles [1,3] et 2 choix matétiaux
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Options d’initialisation %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
nbGene1 = 16; % par chromosome (--> nbPlis)
plisVide = 1;
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;1,2,1,1,nbGene1];
% fin cas {8}
% Resultats 28 a 64 plis (donc 7 a 16 variables) -> 3 choix d’angles et 2 choix materiaux

case {12,121,122,123,124,125,126,127,14} % Probleme 12: construction (44 plis)


% 13 variables -> 19 choix d’angles et un choix de plis vide [1,19]
% -> 2 choix de matériaux
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Options d’initialisation %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
nbGene1 = 22;
plisVide = 1;
initOps = [nbGene1 plisVide];
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Definition de frontiere et du domaine %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
bounds = [1,19,1,1,nbGene1; 1,2,1,1,nbGene1]; % 3 Chromosomes [continu;discret;discret]
% fin cas {12}
end

% fin switch probleme


%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

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

xOverFloatFNs = ’arithXover simpleXover’; % nom des fonctions de croisements


xOverFloatOps = [0.5 3;0.5 3];% options des fonctions de croisements [prob #essaisMax]
%INTEGER
xOverIntFNs = ’X2ThickM’; % 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
mutFloatFNs = ’boundaryMutation multiNonUnifMutation nonUnifMutation unifMutation’;
% nom des fonctions de mutation
Gmax = 1000;
mutFloatOps = [0 0 0.02; Gmax 3 0.3; Gmax 3 0.3; 0 0 0.02];
%INTEGER
mutIntFNs = ’Mutation Permutation’;% ’MutAng MutMat PermAng PermMat AddMatAng DelMatAng’;
% nom des fonctions de mutation
mutOps = 0.08;
permOps = 0.8;
mutIntOps = [1 mutOps ;1 permOps];
% options des fonctions de mutation
%BINAIRE
mutBinFNs = ’binaryMutation’;
mutBinOps = [0.3];
%%%%%%%%%%%%%%%%%%%%%
% FNs Add/DEL %
%%%%%%%%%%%%%%%%%%%%%
mutAddDelIntFNs = ’Addition Deletion’; %
addOps = 0.05;
delOps = 0.2;
mutAddDelIntOps = [1 addOps ;1 delOps];
%%%%%%%%%%%%%%%%%%%%%
% FNs d’arret %
%%%%%%%%%%%%%%%%%%%%%
termFN = ’TermNoImprove’; % ’TermMaxGen’; % ’TermPracticalOptimum’; %
termOps = []; % On defini le nombre max d’iteration ds MEGAstart
% fin switch probleme
end

if strcmp(termFN,’TermPracticalOptimum’) % il faut definir l’optimum

switch probleme % definition de l’optimum connu

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

termOps = [knownOpt practOpt];


% On defini le nombre max d’iteration ds MEGAstart
case {83}
knownOpt = 10.5808897602; % Optimum connu Table 4:1
practOpt = 0.0000000001;%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 {84}
knownOpt = 11.9917796849; % Optimum connu Table 4:1
practOpt = 0.0000000001;%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 {85}
knownOpt = 13.402668242; % Optimum connu Table 4:1
practOpt = 0.0000000001;%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
end
end
return

A.1.3 Décodage des chromosomes

function [layup,listeMat] = BuiltLam(probleme,sol,bounds,options)

% Cette fonction construit le stratifié dependamment de probleme


% Probleme = # du probleme etudie

% Entrees:
% Probleme: # identification du probleme
% sol: solution sans la valeur de l’objectif

b = length(options);
nbPlis = options(b-4);

switch probleme

case {1} % Probleme #1: (LeRiche et al. 2004) :


nbVar = length(sol);
for i=1:nbVar
mat(i) = 3; % Problemes {1}
angle(i) = sol(i);
h(i) = 0.1250e-03; % epaisseur bidon
end
[layup] = BalanceSym2(mat,angle,h,probleme); % stratifié balance symetrique
listeMat = [3];
%** fin cas {1}

case {31,32,33,34}
127

% Problemes {3} trois choix d’angles [0,+-45,90], 1 materiau (#6), 1 epaisseur


nbVar = length(sol);
for i=1:nbVar
switch sol(i)
case 1
angle(i) = 0;
mat(i) = 6; % Problemes {3,4,5}
h(i) = 0.1270e-03;
case 2
angle(i) = 45;
mat(i) = 6;
h(i) = 0.1270e-03;
case 3
angle(i) = 90;
mat(i) = 6;
h(i) = 0.1270e-03;
end
end
%**********************************%
% layup balance symetrique %
%**********************************%
[layup] = BalanceSym2(mat,angle,h,probleme);
listeMat = [6];
%** fin cas {31,32,33,34}

%**********************%
% 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

A.1.4 Définition du problème

function [defProb charge] = DefinitionProb(Probleme)

% Fonction definissant les donnees physiques du probleme


% Entrees:
% Options: [ ... (n-1) n]
% Options(n-1): probleme (#)
% Sorties:
% defProb(1): prob vaut 1--> force exterieur, prob vaut 0--> deformation imposee
% defProb(2): changement de temperature deltaT
% defProb(3): 0 [epsX0(m/m); epsY0; gammaXY0,kappaX0(1/m);kappaY0; kappaXY0]
% defProb(4): longueur ’la’ de la plaque (m)
% defProb(5): longueur ’lb’ de la plaque (m)
% charge: chargement exterieur [Nx(N/m);Ny;Nxy;Mx(N*m/m),My,Mxy]

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}

case {31} % Probleme #3: cas de chargement 1


defProb(1) = 1;
defProb(2) = 0;
defProb(3) = 0;
defProb(4) = 0.508;
131

defProb(5) = 0.127;
charge = [-175; -21.875; 0; 0; 0; 0];
%** fin case 31,41,51

case {32} % Probleme #3: cas de chargement 2


defProb(1) = 1;
defProb(2) = 0;
defProb(3) = 0;
defProb(4) = 0.508;
defProb(5) = 0.127;
charge = [-175; -43.75; 0; 0; 0; 0];
%** fin case 32

case {33} % Probleme #3: cas de chargement 3


defProb(1) = 1;
defProb(2) = 0;
defProb(3) = 0;
defProb(4) = 0.508;
defProb(5) = 0.127;
charge = [-175; -87.5; 0; 0; 0; 0];
%** fin case 33

case {34} % Probleme #3: cas de chargement 4


defProb(1) = 1;
defProb(2) = 0;
defProb(3) = 0;
defProb(4) = 0.508;
defProb(5) = 0.254;
charge = [-175; -175; 0; 0; 0; 0];
%** fin case 34

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}

case {12,121,122,123,124,125}% Probleme #12


defProb(1) = 1;
defProb(2) = 0;
defProb(3) = 0;
defProb(4) = 0.9144;
defProb(5) = 0.7620;
charge = [-175; -175; 0; 0; 0; 0];
%** fin case {12}
end %** fin switch Problem
return
132

A.1.5 Construction du stratifié

function [layup] = BalanceSym2(mat,angle,h,probleme)


% Contruit un layup balance et symetrique
% mat: materiau de chaque couche
% angle: orientation de chaque couche
% h: epaisseur de chaque couche
% Si angle = 90 ou 0 degre --> 1 seul plis

lmat = length(mat); % si lmat == 1, on a seulement un materiau


lh = length(h); % si lh == 1, on a seulement une epaiseur
nbVar = length(angle); % nombre de variables

% 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

A.1.6 La fonction d’évaluation

function [sol, val, S] = fctObj(sol,bounds,options)


133

% contrainte: vecteur contenant les contraintes du probleme


% varOpt: valeur de la fonction objective sans penalite
% beta:facteur de penalitee
% sol: [var1, var2,...,varn, fct(objectif)]
%
% % Test:
% sol = [0 12 10 13 11 18 14 12 13 7 3 19 19 0 2 2 2 2 2 2 2 2 2 2 2 2 150];
% bounds = [1,19,1,1; 1,2,1,1];
% options = [0 13 13 2 121 0 100];
%options = [];

%%%%%%%%% Debut %%%%%%%%


b = length(options);
nbVar = length(sol) - 1; % nb variable dans sol sans fct(objectif)
probleme = options(b-2);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 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

function [val, S] = ParamFctObj(Probleme,Options,sol,fbuckl,MinLambdaFL,freqNat,...


Poids,Cout,Twist,tsaiHill,hoffman,PropMechTherm)
% La variable à MAXIMISER est attibuée à fx
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Les contraintes sont normalisees et incluses dans le vecteur cx %
% sous la forme: c(x) = c’(x)/d - 1 <= 0 ( c’(x) <= d ) %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Type : 0 -> definition du probleme et du chargement
% 1 -> definition de l’optimisation
%
% Entrees:
% PropMechTherm = [Exm,Eym,Gxym,NUxy,NUyx,Exf,Eyf,coeffxm,coeffym,coeffxym];

b = length(Options);

switch Probleme

case {1,1111} % Probleme #1: (LeRiche et al. 2004)


Ex = PropMechTherm(1);
Gxy = PropMechTherm(3);
nuxy = PropMechTherm(4);
fmoy = Options(b);
delta = -0.0002;
%delta2 = -0.0002;
val = Ex/fmoy; % Max Ex
g(1) = Gxy/12e+09 - 1 + delta; % Gxy >= 12 GPa ; g(i) >= 0 --> OK
g(2) = 1 - nuxy/0.5 + delta; % nuxy <= 0.5 ; g(i) < 0 --> penalite
pen = 0;
facPond = [4,4];
S(1) = Ex;
S(2) = Gxy;
S(3) = nuxy;
%** Penality
penality = 0;
for i=1:length(g)
penality = penality + facPond(i)*min(0,g(i));
end
val = val + penality;
S(4) = min(0,g(1));
S(5) = min(0,g(2));
S(6) = fmoy;
S(7) = facPond(1);
S(8) = facPond(2);
S(9) = delta;
%** fin case {1}

case {31,33} % Probleme #3: pour les 4 cas de chargement


%val = fbuckl; % maximiser le facteur de flambement
if fbuckl <= MinLambdaFL
obj = fbuckl;
else
obj = MinLambdaFL;
135

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;

case {61,62,63,64,65} %***** Probleme 6 Table-16 (Rao et al. 2004) *******%


val = -Poids; % minimise le poids
fMin = Options(b-1); % frequence minimale
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) = fbuckl;
%** 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;

%** fin case 6

case {71,72,73,74} %***** Probleme 7 Table-17 (Rao et al. 2004) *******%


val = -Poids; % minimise le poids
136

bMin = Options(b-1); % facteur de flambement minimal


g(1) = fbuckl/bMin - 1; % contrainte fbuckl >= bMin
pen = Options(b); % facteur de penalite
S(1) = Cout;
S(2) = Poids;
S(3) = freqNat;
S(4) = fbuckl;
%** 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;
%** fin case 7

%***** Probleme 8 Table-18 (Rao et al. 2004) *******


case {81,82,83,84,85,} %
val = -Cout; % minimise le cout
fMin = Options(b-1); % frequence minimale
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) = fbuckl;
%** 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;
%** fin case 8

case {88} % sans la relaxation delta


delta = 0;%0.01; % On accepte une violation des contrainte de delta(%)
val = -Cout; % minimise le cout
bMin = Options(b-1); % frequence minimale
g(1) = fbuckl/bMin - 1; % contrainte fbuckl >= bMin
Wmax = 85;%Options(b-2);
g(2) = 1 - Poids/Wmax; % contrainte Poids <= Wmax
pen = Options(b); % facteur de penalite
S(1) = Cout;
S(2) = Poids;
S(3) = freqNat;
S(4) = fbuckl;
%** Penality
Sc = 0;
for i=1:2
Sc = Sc + min(g(i),0);
137

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

case {89} % avec la relaxation delta


delta = 0.01; % On accepte une violation des contrainte de delta(%)
val = -Cout; % minimise le cout
bMin = Options(b-1); % frequence minimale
g(1) = fbuckl/bMin - 1 + delta; % contrainte fbuckl >= bMin
Wmax = 85;%Options(b-2);
g(2) = 1 - Poids/Wmax + delta; % contrainte Poids <= Wmax
pen = Options(b); % facteur de penalite
S(1) = Cout;
S(2) = Poids;
S(3) = freqNat;
S(4) = fbuckl;
%** Penality
Sc = 0;
for i=1:2
Sc = Sc + min(g(i),0);
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

%***** Probleme 10 Table-20 (Rao et al. 2004) *******%


case {101,102,103,104,105,106}
p = Options(b-1); % facteur de pondération
lambdaC = p*Poids + (1-p)*Cout;
val = -lambdaC; % minimise le poids et le cout ensemble
bMin = 80;
fMin = 25;
g(1) = (fbuckl/bMin) - 1; % contrainte fbuckl >= bMin
g(2) = (freqNat/fMin) - 1; % contrainte freq >= fMin
pen = Options(b); % facteur de penalite
S(1) = Poids;
S(2) = Cout;
S(3) = fbuckl;
S(4) = freqNat;
S(5) = lambdaC;
%** Penality
gt = 0; % Somme de la violation des contraintes
for i=1:length(g)
if g(i) < 0
gt = gt + g(i);
end
138

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

A.2 L’algorithme génétique

function [x,pop,bFoundIn,traceInfo,evalCost,evalOps] = MEGAChromoMulti(popSize,initOps,bounds,...


evalFN,evalOps,megaOps,termFN,termOps,selectFN,selectOps,xOverFloatFNs,xOverFloatOps,xOverIntFNs,...
xOverIntOps,xOverBinFNs,xOverBinOps,mutFloatFNs,mutFloatOps,mutIntFNs,
mutIntOps,mutBinFNs,mutBinOps,mutAddDelIntFNs,mutAddDelIntOps,elitistOps)

% ***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:

%**** (1) Definition de la population initiale et ****


%**** (2) Evaluation de l’obj. ****
[pop,S,evalOps] = popInitChromoMulti(popSize, bounds, evalFN,evalOps,initOps);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% definition des variables locales de MEGA: %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

posFit = size(pop,2); % position de la valeur de l’objectif


nbVar = posFit - 1; % nombre de variables

xOverFloatFNs = parse(xOverFloatFNs); % Fonctions de croisement en FLOAT


xOverIntFNs = parse(xOverIntFNs); % Fonctions de croisement en Int
xOverBinFNs = parse(xOverBinFNs); % Fonctions de croisement en Binaire
mutFloatFNs = parse(mutFloatFNs); % Fonctions de mutation en FLOAT
mutIntFNs = parse(mutIntFNs); % Fonctions de mutation en Int
mutBinFNs = parse(mutBinFNs); % Fonctions de mutation en Binaire
mutAddDelIntFNs = parse(mutAddDelIntFNs); % Fonctions d’addidion et de suppression de plis

numXOversFloat = size(xOverFloatFNs,1); % Nombre d’operateurs de croisements Float


numXOversInt = size(xOverIntFNs,1); % Nombre d’operateurs de croisements Int
numXOversBin = size(xOverBinFNs,1); % Nombre d’operateurs de croisements Binaire
numMutsFloat = size(mutFloatFNs,1); % Nombre d’operateurs de mutations Float
numMutsInt = size(mutIntFNs,1); % Nombre d’operateurs de mutations Int
numMutsBin = size(mutBinFNs,1); % Nombre d’operateurs de mutations Binaire
numAddDelMutsInt = size(mutAddDelIntFNs,1); % Nombre d’operateurs de mutations Binaire

nbChromos = size(bounds,1); % Nombre de chromosomes par individus


nbGene = nbVar/nbChromos; % Nombre de gene par chromosome

c1 = zeros(1,posFit); % Un individu
c2 = zeros(1,posFit); % Un individu
140

%epsilon = opts(1); %Threshold for two fittness to differ


%oval = max(startPop(:,posFit)); %Best value in start pop
%bFoundIn = 1; %Number of times best has changed
done = 0; % Booleen pour arreter le MEGA
gen = 1; % Compteur de generation
noImprove = 0; % Compteur de generations subsequentes sans amelioration
collectTrace = 1; %Should we collect info every gen
opProb = megaOps(2)==0;% Application des operaters de facon probabilistique a chaque individus
display = megaOps(3)==1; % Display progress
trace = megaOps(4)==1; % Print trace dans fichier
Nk = elitistOps(2); % Nombre de meilleurs individus selecionnes pour ME1 ou ME2
ME = elitistOps(1); % ME1 --> 1 et ME2 --> 2
VE = elitistOps(3); % Multi-élitisme variable
Ved = elitistOps(4); % Poucentage d’augmentation du Nk après 3/4 des génération max
bFoundIn = 1; % Génération ou le meilleur a été trouvé
evalCost = popSize; % Cout d’appel de la fonction d’evaluation
GEN = [];
VAL = [];
graph = 1;
probleme = evalOps(length(evalOps)-2);
nbPlis = evalOps(length(evalOps)-4);
plisVide = (initOps(2)==1);

noChange = 0; % Nombre de fois où la recherche dans le voisinage est infructueuse


ameliorationLocale = 1;

tranche = 0; % Variable pour VE prob 85-84 (15 nov. 2005)

%%% Position du debut et de la fin de chaque chromosomes (ind) %%%

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 ME==1 % ME1 : elitisme multiple de type 1


% on copie les Nk meilleurs parents directement a la nouv. gen.
% on complete la pop. en generant nbEnfants enfants
nbEnfants = popSize - Nk;
elseif ME==2 % ME2: elitisme multiple de type 2
141

% on prend les Nk meilleurs individus parmis les popSize parents et le


% popSize enfants
% Si Nk est plus petit que la taille de la population, on complete la
% nouv. gen. avec les meilleurs enfants qui ne se trouvent pas deja
% dans nouv. gen.
% nbEnfants = popSize;
% Modifs (15-11-2005)
nbEnfants = popSize - Nk;
else % ME = 0 : elitist standard, on genere nbPop enfants et on replace
% le pire par le meilleur parent
nbEnfants = popSize;
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

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%**** (3) Ordonner la population selon leur objectif decroissant ****


startPop = sortrows(startPop,-posFit);

%**** (4) Selection des parents (distincts) ****


[parents1,parents2] = feval(selectFN,startPop,[gen nbEnfants selectOps]);

%**** (5) Operateurs de croisements MODIFs ****


enfChromo = zeros(nbEnfants,posFit);
for j=1:nbChromos
chromFloat = bounds(j,3);
if chromFloat == 0 % Ce chromosome est FLOAT
somme = 0;
for i=1:numXOversFloat
% On calcule le nombre d’enfants generes par chaque operateur
xOverFloatOps(i,2) = round(xOverFloatOps(i,1)*nbEnfants);
somme = somme + xOverFloatOps(i,2);
end
del = somme-nbEnfants;
if del > 0
xOverFloatOps(numXOversFloat,2) = xOverFloatOps(numXOversFloat,2) - del;
end
% il faut determiner le choix des operateurs FLOAT
ind = 1:nbEnfants;
for i=1:numXOversFloat
for k=1:xOverFloatOps(i,2)
ind = ind(find(ind));
a = length(ind);
pos = round(rand*(a-1)) + 1;
string(ind(pos),1) = i;
ind(pos) = 0;
end
end
%**********************************************%
% (5-a) Operateurs de croisements FLOAT %
%**********************************************%
for i=1:nbEnfants
xN=deblank(xOverFloatFNs(string(i),:)); %Nom de la fonction de croisement
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 xOverFloatOps(string(i),:)]);
end

elseif chromFloat == 1 % Ce chromosome est INTEGER

%**********************************************%
% (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) Mutation et (7) Ply Swap MODIFs ****


for j=1:nbChromos
chromFloat = bounds(j,3);
if chromFloat == 0 % Ce chromosome est FLOAT
%******************************************************%
% (6-a & 7-a) Operateurs de mutation Float %
%******************************************************%
for k=1:numMutsFloat
mutFN=deblank(mutFloatFNs(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 mutFloatOps(k,:)]);
end
end

elseif chromFloat == 1 % Ce chromosome est INTEGER

%****************************************************%
% (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

%**** (8) Evaluation de l’objectif des enfants ****


%nbE = size(enfants,1);
for i=1:(nbEnfants+Nk)
eval([’[enfants(i,:) enfants(i,posFit)]=’ evalFN ’(enfants(i,:),bounds,[gen evalOps]);’]);
evalCost = evalCost + 1;
end

%**** (9) Ordonner les enfants selon leur objectif decroissant ****
enfants = sortrows(enfants,-posFit);

%**** (10) Selection elitiste de la nouvelle generation ****


if ME == 1 % Elitist ME1
bestInPop = startPop(1:Nk,:); % Nk meilleurs ind. de startPop
newGen = [bestInPop];
i = 1;
for j=1:(nbEnfants+Nk)
trouver = 1; % Flag
b = nbEnfants+Nk;
145

while trouver & i <= b


trouver = duplicata(enfants(i,:),newGen,[],[posFit,evalOps(3)]);
i = i + 1;
end
if (i > b ) & trouver % On doit completer avec l’ensemble des parents
trouver = 1; % Flag
k = 1;
while trouver % & k <= size(startpop,1)
trouver = duplicata(startPop(k,:),newGen,[],[posFit,evalOps(3)]);
k = k + 1;
if k == 21 & trouver == 1
trouver = 0; % On veut sortir de la boucle
end
end
if k >= (size(startPop,1) + 2)
k = size(startPop,1)+1;
end
newGen = [newGen ; startPop(k-1,:)];
else % On a trouve une solution unique dans l’ensemble des enfants
newGen = [newGen ; enfants(i-1,:)];
end
end
% Elitist ME2 *** Modif: 15-11-2005 **** Le pool est déjà compris dans [enfants]
elseif ME == 2
%Pool = [enfants;startPop];
%Pool = sortrows(Pool,-posFit);
%bestInPool = Pool(1:Nk,:); % Nk meilleures solution parmi les pop. init. et les enfants
%newGen = bestInPool; % Copie de meilleures sol. de bassin ds newGen
Pool = enfants;
newGen = startPop(1:Nk,:);
i=1;
j=1;
% On trouve la premiere sol. de enfants qui n’est pas dans bestInPool
% et on complete le reste de bestInPool
trouver = 1;
k = 1;
i = 1;
for j=Nk+1:popSize
trouver = 1; % Flag
b = nbEnfants+Nk;
while trouver & i <= b
trouver = duplicata(enfants(i,:),newGen,[],[posFit,evalOps(3)]);
i = i + 1;
end
if (i > b) & trouver % il n’y a pas assez d’enfants distincts
% on cherche dans la population précédente
while trouver % & k <= size(startpop,1)
trouver = duplicata(startPop(k,:),newGen,[],[posFit,evalOps(3)]);
k = k + 1;
if k == 21 & trouver == 1
trouver = 0; % On veut sortir de la boucle
% Il y a duplicata: on insère le dernier de startPop
k = popSize + 1;
end
end
146

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

%**** (11) Verification de la convergence ****


[fin] = feval(termFN,[gen termOps],newGen,startPop,noImprove);
pop = newGen; % Assignation de la nouvelle genetaion a pop.

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

A.3 La population initiale

function [pop, S, evalOps] = popInitChromoMulti(popSize, bounds, evalFN,evalOps,options)


% initialisation de la population

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];

%% Petit probleme à régler


if probleme >= 6000 & i == 2
pos0 = 1;
end
%%

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

% evaluation de la fonction objectif


posFit = size(pop,2); % Position de la valeur de l’objectif
for i=1:popSize
eval([’[pop(i,:) pop(i,posFit) S(i,:)]=’ evalFN ’(pop(i,:),bounds,...
[0 nbGene’’ evalOps]);’]);
end

if probleme == 1 % En continu il faut normaliser l’objectif en calculant


% la moyenne de la population initiale
fmoy = mean(S(:,1));
evalOps(b) = fmoy;
for i=1:popSize
eval([’[pop(i,:) pop(i,posFit) S(i,:)]=’ evalFN ’(pop(i,:),...
bounds,[0 nbGene’’ evalOps]);’]);
end
end
return

A.4 Opérateur de sélection

A.4.1 Sélection selon le rang dans la population

function [parent1,parent2] = LinearRankingSelect(pop,options)


% cette fonction selectionne un nombre de couple de parents distincts selon la repartition
% lineaire du rang des individus de la population
% la population doit etre ordonnee en ordre decroissant selon l’objectif
% **** Input
% pop: population
% options: [gen nbEnfants [SelectOps] ]
% **** Output
% p1: matrice des parents 1 du couple i
% p2: matrice des parents 2 du couple i

b = length(options);
nbEnfants = options(2); % nombre de couples de parents distincts a generer

[taille,posFit] = size(pop); % position de l’objectif et taille de la population


P = taille;
roulette(1) = 0;
for i=1:taille
% ref. Soremekum et Haftka : Computers and Structures 79 (2001) pp.131-143
roulette(i+1) = roulette(i) + 2*(P-i+1)/(P*(P+1));
end
for j=1:nbEnfants % creation de nbEnfants couple de parents distincts
distinct = 1; % variable booleene
while distinct % parents distincts ???
% selection de deux parents parmi la population
n = [rand,rand]; % tirage de deux nombre n1 et n2 entre [0,1]
150

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

A.5 Les opérateurs de reproduction

A.5.1 Un point de croisement à partir du plus épais

function [enfant] = X1ThickM(p1,p2,pop,bounds,Ops)

% X1ThickMatAng: Croisement a un point pour des parents


% [Angles(n), Materiau(n), fctObj] ou n est le nombre de plis (peut
% contenire des plis vide)
% On chosit une position au hasard dans la partie pleine du parent le plus
% epais. On copie la partie precedant cette position du parent1 a l’enfant.
% Le reste de l’enfant est determiner par la partie suivant la position du
% parent2
% Un seul enfant est genere avec deux parents
% Un enfant est rejette s’il existe deja dans la population ou s’il a deja
% ete cree (== autre enfant)
% On copie un des deux parents a l’enfant si apres nbIter on ne peut
% trouver un enfant different
% p1 - liste des parents 1
% p2 - liste des parents 2
% bounds - bornes des variables
% Ops - Options [gen (probXover EssaisMax)].
151

Taille = size(pop,1); % Taille de la population


[nbEnfants,nbVar] = size(p1); % dimensions des parents
probXover = Ops(2); % Probabilite d’effectuer le croisement
EssaisMax = Ops(3); % Nombre d’essais max avant de trouver un enfant unique
enfant(1:nbVar) = 0; % Initialisation de la 1ere de la matrice enfants
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 epais
pos = nbVar - P2n0 + 1;
else % p2 plus epais que p1
epais = p2(k,:);
mince = p1(k,:);
% position du premier pli plein sur le stratifie le plus Mince
pos = nbVar - P1n0 + 1;
end
faire = rand; % tirage d’un nombre aleatoire
if faire < probXover % proceder au croisement
trouver = 1; % booleen pour trouver un enfant unique
nbEssai = 1; % compteur d’essais pour generer un enfant unique
while trouver & (nbEssai <= EssaisMax)
trouver = 0; % si tout va bien on sort de la boucle
% Tirage du premier point de coupe [pos to nbVar-1]
cutPt = round(rand * (nbVar-1-pos)) + pos;
enf = [epais(1:cutPt) mince(cutPt+1:nbVar)]; % Creation de l’enfant
% Replacer les plis vides au debut du string : [E(n) Var(i)]
ind0 = find(enf); % Position des plis plein
nb0 = nbVar - length(ind0); % Nombre de plis vide
kidT = enf(ind0); % copie des plis plein dans kidT
% Les plis vides sont au debut et on introduit fctObj (a titre indicatif)
enf = [zeros(1,nb0) kidT];
% verification que l’enfant est unique ds enfants
for i=1:size(enfant,1)
if isequal(enf(1:nbVar),enfant(i,1:nbVar))
trouver = 1; % enf est egal a un ind. de enfants
nbEssai = nbEssai + 1; % compteur d’essais
end
end
% on evite de comparer enf a pop. si trouver == 1
if trouver ~= 1
for j=1:Taille % verification que l’enfant est unique ds pop
if isequal(enf(1:nbVar),pop(j,1:nbVar))
trouver = 1; % enf est egal a un ind. de pop
nbEssai = nbEssai + 1; % compteur d’essais manque
end
end
end
end
% enfant unique ?
if nbEssai > EssaisMax % Non: on copie un des parents vers enfants
enfant(k,:) = epais(k,:); % on copie le parent epais
152

else % Oui
enfant(k,:) = enf;
end
else % on copie un des parents
enfant(k,:) = epais(k,:); % on copie le parent epais
end
end
return

A.5.2 Deux points de croisement à partir du plus épais

function [enfant] = X2ThickM(p1,p2,pop,bounds,Ops)


% Frederic Girard : 06-04-2005

% X1ThickMatAng: Croisement a un point pour des parents


% [Angles(n), Materiau(n), fctObj] ou n est le nombre de plis (peut
% contenire des plis vide)

% On chosit une position au hasard dans la partie pleine du parent le plus


% epais. On copie la partie precedant cette position du parent1 a l’enfant.
% Le reste de l’enfant est determiner par la partie suivant la position du
% parent2

% Un seul enfant est genere avec deux parents


% Un enfant est rejette s’il existe deja dans la population ou s’il a deja
% ete cree (== autre enfant)
% On copie un des deux parents a l’enfant si apres nbIter on ne peut
% trouver un enfant different

% p1 - liste des parents 1


% p2 - liste des parents 2
% bounds - bornes des variables
% Ops - Options [gen (probXover EssaisMax)].

Taille = size(pop,1); % Taille de la population


[nbEnfants,nbVar] = size(p1); % dimensions des parents
probXover = Ops(2); % Probabilite d’effectuer le croisement
EssaisMax = Ops(3); % Nombre d’essais max avant de trouver un enfant unique
enfant(1:nbVar) = 0; % Initialisation de la 1ere de la matrice enfants

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

pos = nbVar - P1n0 + 1;


end
faire = rand; % tirage d’un nombre aleatoire
if faire < probXover % proceder au croisement
trouver = 1; % booleen pour trouver un enfant unique
nbEssai = 1; % compteur d’essais pour generer un enfant unique
while trouver & (nbEssai <= EssaisMax)
trouver = 0; % si tout va bien on sort de la boucle
% Tirage du premier point de coupe [pos-1 to nbVar-2]
cutPt1 = round(rand * (nbVar-1-pos)) + (pos - 1);
% Tirage du premier point de coupe [cutPt1+1 to numVar-1]
cutPt2 = round(rand * (nbVar-1-(cutPt1+1))) + (cutPt1+1);
% Creation de l’enfant
enf = [epais(1:cutPt1) mince(cutPt1+1:cutPt2) epais(cutPt2+1:nbVar)];
% Replacer les plis vides au debut du string : [E(n) Var(i)]
ind0 = find(enf); % Position des plis plein
nb0 = nbVar - length(ind0); % Nombre de plis vide
kidT = enf(ind0); % copie des plis plein dans kidT
% Les plis vides sont au debut et on introduit fctObj (a titre indicatif)
enf = [zeros(1,nb0) kidT];
% verification que l’enfant est unique ds enfants
for i=1:size(enfant,1)
if isequal(enf(1:nbVar),enfant(i,1:nbVar))
trouver = 1; % enf est egal a un ind. de enfants
nbEssai = nbEssai + 1; % compteur d’essais
end
end
% on evite de comparer enf a pop. si trouver == 1
if trouver ~= 1
for j=1:Taille % verification que l’enfant est unique ds pop
if isequal(enf(1:nbVar),pop(j,1:nbVar))
trouver = 1; % enf est egal a un ind. de pop
nbEssai = nbEssai + 1; % compteur d’essais manque
end
end
end
end
% enfant unique ?
if nbEssai > EssaisMax % Non: on copie un des parents vers enfants
enfant(k,:) = epais(k,:); % on copie le parent epais
else % Oui
enfant(k,:) = enf;
end
else % on copie un des parents
enfant(k,:) = epais(k,:); % on copie le parent epais
end
end
return

A.5.3 Croisement arithmétique

function [enfant] = arithXover(parent1,parent2,pop,bounds,Ops)


154

% Arith crossover takes two parents P1,P2 and performs an interpolation


% along the line formed by the two parents.
%
% function [c1,c2] = arithXover(p1,p2,bounds,Ops)
% p1 - the first parent ( [solution string function value] )
% p2 - the second parent ( [solution string function value] )
% bounds - the bounds matrix for the solution space
% Ops - Options matrix for arith crossover [gen #ArithXovers]

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 Les opérateurs de mutation

A.6.1 Mutation

function [enfant] = Mutation(enfant,bounds,Ops)


% **** Input
% Enfants: Listes des enfants dont il faut muter les genes
% Bounds: frontiere des variables
% Ops: options [#gen probMut type] : probMut -> probabilite que chaque genes soit
% type -> 1 (var. entiere) ou 2 (var. continue)
% **** Output
% Enfants: nouvelle liste des enfants
[nbEnfants,nbVar] = size(enfant); % nombre d’enfants
155

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

for k=1:nbEnfants % on considere chaque enfant de la liste


enf = enfant(k,:); % enfant courant
pos=1; % pos: position du premier plis qui n’est pas vide
while enf(pos) == 0
pos=pos+1;
end
for i=pos:nbVar % on considere chaque variables de chaque enfants
num = rand; % on mute ce gene ?
if num < mutProb % Oui
identique = 0;
while ~identique
identique = 1; % sortie si tout va bien
if Integer % variables entieres
newValue = bounds(1)+round(rand * df); % nouvelle valeur
else % variables continues
newValue = bounds(1)+(rand * df); % nouvelle valeur
end
% verification que le gene mute n’est pas le meme
if newValue ~= enfant(k,i)
enf(i) = newValue; % assignation de la mutation
enfant(k,:) = enf;
else % la mutation na pas modifier le gene
identique = 0;
end
% On ne mute pas un angle a une valeur de O --> E (on n’enleve
% pas de plis) si les variables incluent des plisVide
if plisVide & (newValue == 0)
identique = 0; % on cherche a nouveau
end
end
else % Non: On ne fait rien
end
end
end
return

A.6.2 Opérateur de permutation

function [enfant] = Permutation(enfant,bounds,Ops)


% Permutation est une fonction qui inverse deux genes entre eux
% Fonctionne avec variable contenant des plis vide (E) ou non
% **** 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
156

% **** Output
% Enfants: nouvelle liste des enfants

[nbEnfants,nbVar] = size(enfant); % nombre d’enfants


n = length(Ops);
probPermut = Ops(n); % Probabilite de proceder a la permutation de l’ind. (k)
plisVide = Ops(n-2)==1; % Variable contenant des plis vides
for k=1:nbEnfants % on considere chaque enfant de la liste
num = rand; % fait-on la permutation ???
if num < probPermut % oui
enf = enfant(k,1:nbVar); % Copie de l’enfant courant
% Recherche de la premiere position du plis plein
posP=1; % pos: position du premier plis qui n’est pas vide
while enf(posP) == 0
posP=posP+1;
end
pos1 = round(rand*(nbVar-posP)) + posP; % pos1 = [pos0 nbVar]
pos2 = pos1; % assignation temporaire de pos2
while pos2 == pos1 % on veut pos2 ~= pos1
pos2 = round(rand*(nbVar-posP)) + posP; % pos2 = [pos0 nbVar]
end
%% permutation
tmp = enf(pos1); % pos1 --> tmp
enf(pos1) = enf(pos2); % pos2 --> pos1
enf(pos2) = tmp; % tmp --> pos2
enfant(k,:) = enf;
else % non : rien
end
end
%%
return

A.6.3 Mutation uniforme

function [enfant] = unifMutation(enfant,bounds,Ops)


n = length(Ops);
[nbEnfants,nbVar] = size(enfant); % dimensions des parents
probMut = Ops(n); % Probabilite d’effectuer la mutation
df = bounds(2) - bounds(1); % Range of the variables
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
% Pick a variable to mutate randomly from 1-number of vars
mPoint = round(rand * (nbVar-pos)) + pos;
newValue = bounds(1)+ rand*df; % Now mutate that point
indiv(mPoint) = newValue; % Make the child
enfant(k,:) = indiv;
157

end
end
return

A.6.4 Mutation non-uniforme

function [enfant] = nonUnifMutate(enfant,bounds,Ops)


n = length(Ops);
[nbEnfants,nbVar] = size(enfant); % dimensions des parents

probMut = Ops(n); % Probabilite d’effectuer la mutation


df = bounds(:,2) - bounds(:,1); % Range of the variables

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

A.6.5 Mutation non-uniforme multiple

function [enfant] = multiNonUnifMutation(enfant,bounds,Ops)


n = length(Ops);
[nbEnfants,nbVar] = size(enfant); % dimensions des parents
probMut = Ops(n); % Probabilite d’effectuer la mutation
df = bounds(:,2) - bounds(:,1); % Range of the variables
for k=1:nbEnfants
a = rand; % tirage d’un nombre aleatoire
if a < probMut
158

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

A.6.6 Opérateur d’addition de plis

function [enfant] = Addition(enfant,bounds,Ops)


% Addition est une fonction qui ajoute un plis

% **** 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
%

[nbEnfant,nbVar] = size(enfant); % nombre d’enfants


nbChromo = size(bounds,1);
nbPlis = nbVar/nbChromo; % Nombre de plis pour chaque chromosomes

%%%%%%%%%% tirage d’un nombre de plis à ajouter 1 à nMax plis


nMax = 1; % nombre de plis ajoutés maximal
nbAdd = round(rand*(nMax-1))+1 ;
%%%%%%%%%%
for k=1:nbAdd
pos=1; % pos: position du premier plis qui n’est pas vide
while enfant(pos) == 0
pos=pos+1;
end
if pos ~= 1 % Pos vaut 1 lorsqu’il n’y a pas de plis vide
df = bounds(:,2) - bounds(:,1); % Etendu des frontieres de variables de l’enfant k
for i=1:nbChromo
159

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

A.6.7 Opérateur de soustraction de plis

function [enfant] = Deletion(enfant,bounds,Ops)

[nbEnfants,nbVar] = size(enfant); % nombre d’enfants


nbChromo = size(bounds,1);
nbPlis = nbVar/nbChromo; % Nombre de plis pour chaque chromosomes
pos=1; % pos: position du premier plis qui n’est pas vide
while enfant(pos) == 0
pos=pos+1;
end
if pos <= (nbPlis-1) % on delete un plis seulement s’il y a au moins 2 plis
delPos = round(rand*(nbPlis-pos)) + pos; % Position de la variable a deleter
for i=1:nbChromo
enftmp = enfant((nbPlis)*(i-1)+1:i*nbPlis);
enftmp = [0 enftmp(1:delPos-1) enftmp(delPos+1:nbPlis)];
enfant((nbPlis)*(i-1)+1:i*nbPlis) = enftmp; % Copie de l’enfant generes
end
else % Non ! : il y a seulement 1 pli
end
return

A.7 Les critères d’arrêt

A.7.1 Générations maximales

function [fin] = TermMaxGen(ops,bPop,endPop,noImprove)

% Retourne 1 si le nombre de generation depasse le nombre max


n = length(ops);
currentGen = ops(1);
maxGen = ops(n);
fin = currentGen >= maxGen;
return
160

A.7.2 Sans amélioration

function [fin] = TermNoImprove(ops,bPop,endPop,noImprove)


% Retourne 1 si le nombre de generation maximal sans amelioration est
% atteint
n = length(ops);
currentGen = ops(1);
maxNoImprove = ops(n);
fin = noImprove >= maxNoImprove;
return

A.7.3 Optimum pratique

function [fin] = TermPracticalOptimum(ops,newGen,oldGen,noImprove)

% Retourne 1 si on atteint un optimum pratique (i.e: 10% de l’optimum connu)


% ou retourne 1 si le nombre de generation depasse le nombre max limite

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

A.8 Recherche dans le voisinage

function [upgrade, evalCost, better] = localSearch(individual,evalFN,evalOps,...


evalCost,bounds,plisVide)
% Cette fonction appelle les fonctions pour générer des voisins et cherche
% s’il y a des solutions avantageuse parmi celles-ci.
% Il faut que le premier chromosome soit l’orientation et le second les
% matériaux. S’il devait avoir un troisième chromosome ou que l’ordre changeait,
% il faudra vérifier cette fonction

% Input:
% individual : Solution à améliorer
161

% evalFN: Fonction d’évaluation


% evalOps: Options de la fonction d’évaluation
% bounds: Frontière des chromosomes
% nbetter: Compte le nombre de fois que l’amélioration n’a rien donné

%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;

fitness = individual(posFit); % valeur de la fitness


if nbChromo == 1
ngAng = bounds(1,5); % Nombre de gènes pour les angles
angle = individual(1:ngAng); % Chromosome angle
else
ngAng = bounds(1,5); % Nombre de gènes pour les angles
ngMat = bounds(2,5); % Nombre de gènes pour les matériaux
angle = individual(1:ngAng); % Chromosome angle
mat = individual(ngAng+1:ngAng+ngMat); % Chromosome matériaux
end

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

A.8.1 Définition du voisinage

function [N] = neighborMat(chromo,bounds,options)

% Fonction déterminant les voisins d’un chromosome de matériaux


% Le nombre de matériaux dans la liste détermine le nombre de voisin
% Cette fonction est conçue pour un max de trois matériaux

%%%% Variables internes: %%%


nbMat = bounds(2,2) - bounds(2,1) + 1; % Nombre de matériau dans la liste
nbGene = length(chromo);

pos=1; % pos: position du premier plis qui n’est pas vide


while chromo(pos) == 0
pos=pos+1;
end
163

n0 = pos - 1; % Nombre de plis vide


mat = chromo(pos:nbGene); % Copie du chromosome matériau
k0 = 0;
ng(1,:) = 1:nbMat; % Identification du matériau [1,2,3,...]
for i=1:nbMat
ind = find((bounds(2,1)+i-1) == mat);
ng(2,i) = length(ind); % Nombre de gène de chaque matériau
end

% On ignore les matériaux non présent


lMat = ng(:,find(ng(2,:)));
nlMat = size(lMat,2); % Nombre de matériaux présent

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

function [N] = neighborAng(chromo,bounds,i,options)

% Fonction déterminant les voisins d’un chromosome d’orientations


% Le nombre de matériaux dans la liste détermine le nombre de voisin
% Cette fonction est conçue pour un max de trois matériaux
% Input:
% i: indice de la position à trouver le voisin
164

% %%%% Variables internes: %%%


% nbAng = bounds(1,2) - bounds(1,1) + 1; % Nombre d’orientation dans la liste
Sb = bounds(1,2); % Valeur de la borne supérieure
Ib = bounds(1,1); % Valeur de la borne inférieure
N(k,:) = chromo;
if chromo(i) == Sb % L’orientation est la borne supérieure dans la liste
N(k,i) = Sb - 1; % Le voisin est l’orientation précédente
N(k+1,:) = chromo;
N(k+1,i) = Ib; % Le voisin est la borne inférieure
k = k + 2;
elseif chromo(i) == Ib % L’orientation est la borne inférieure
N(k,i) = Ib + 1; % Le voisin est l’orientation précédente dans la liste
N(k+1,:) = chromo;
N(k+1,i) = Sb; % Le voisin est la borne supérieure
k = k + 2;
else
N(k,i) = chromo(i) + 1; % Premier voisin -> orientation suivante dans la liste
N(k+1,:) = chromo;
N(k+1,i) = chromo(i) - 1; % Second voisin -> orientation précédente dans la liste
k = k + 2;
end
return

function [N] = neighborMat2(individu,bounds,options)

% Fonction déterminant les voisins d’un chromosome de matériaux


% Le nombre de matériaux dans la liste détermine le nombre de voisin
% Cette fonction est conçue pour un max de trois matériaux
% On mute un gène du chromosome matériau pour lui donner la valeur
% de l’autre gène. On ajoute ensuite un pli de cette m^eme valeur.
% Donc, un pli de moins d’un matériau qui est remplacé par deux plis
% de l’autre matériau.

%%%% Variables internes: %%%


nbMat = bounds(2,2) - bounds(2,1) + 1; % Nombre de matériau dans la liste
ngMat = bounds(2,5); % Nombre de gènes du chromo matériau
ngAng = bounds(1,5); % Nombre de gènes du chromo angle
chAng = individu(1:ngAng); % Chromo angle
chMat = individu(ngAng+1:ngAng+ngMat); % Chromo matériaux

pos0=1; % pos: position du premier plis qui n’est pas vide


while chMat(pos0) == 0
pos0=pos0+1;
end
n0 = pos0 - 1; % Nombre de plis vide
mat = chMat(pos0:ngMat); % Copie du chromosome matériau sans plis vides
ang = chAng(pos0:ngAng); % Copie du chromosome angle sans plis vides
k0 = 0;
ng(1,:) = 1:nbMat; % Identification du matériau [1,2,3,...]
for i=1:nbMat
ind = find((bounds(2,1)+i-1) == mat);
ng(2,i) = length(ind); % Nombre de gène de chaque matériau
end
165

% On ignore les matériaux non présent


lMat = ng(:,find(ng(2,:)));
nlMat = size(lMat,2); % Nombre de matériaux présent
j = 1;
if nlMat == 2 & pos0 > 1 % il y a deux matériaux et il y a au moins un plis vide
k = 1;
for j=1:2
gtemp = mat(k);
% on élimine le gène gtemp (n0: nb plisVide)
ctemp = [mat(1:k-1) mat(k+1:ngMat-n0)];
if gtemp == 1
new = 2;
else
new = 1;
end
neig(j,:) = [ctemp new new];
& gtemp == mat(k) % on cherche le premier gène différent de gtemp
while k <= (ngMat-n0-1)
k = k+1; % k est la position suivant le gène gtemp
end
end
tempAng = ang;
newA = round(rand*(bounds(1,2)-bounds(1,1))) + 1;
ang = [tempAng newA];
new0 = zeros(1,(n0-1));
N(1,:) = [new0 ang new0 neig(1,:)];
N(2,:) = [new0 ang new0 neig(2,:)];
elseif nlMat == 3 & pos0 > 1 % il y a trois matériaux et au moins 1 plis vide
k = 1;
i = 1;
glast = 0; % glast est le dernier gtemp considéré
for j=1:3
gtemp = mat(k);
% on élimine le gène gtemp (n0: nb plisVide)
ctemp = [mat(1:k-1) mat(k+1:ngMat-n0)];
if gtemp == 1
new = [2,3];
elseif gtemp == 2
new = [1,3];
else
new = [1,2];
end
neig(i,:) = [ctemp new(1) new(1)];
neig(i+1,:) = [ctemp new(2) new(2)];
i=i+2;
% on cherche le premier gène différent de gtemp
while k <= (ngMat-n0-1) & (gtemp == mat(k) | mat(k) == glast)
k = k+1; % k est la position suivant le gène gtemp
end
glast = gtemp;
end
tempAng = ang;
newA = round(rand*(bounds(1,2)-bounds(1,1))) + 1;
ang = [tempAng newA];
nrang = size(neig,1);
166

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

Vous aimerez peut-être aussi