Encore un article “pas bidon” d’apprendre la CAO.com !

Optimisation de la taille d’un bidon vers un volume cible

De quoi ça parle ?

L’utilisation d’un algorithme d’optimisation n’est pas un sujet courant sur le net.
Je vais vous montrer ici tout l’intérêt d’une telle méthode.

Un exemple géométrique

Lorsque vous mettez de l’eau dans une bouteille en plastique et que vous appuyez dessus, le liquide monte. Vous changez en fait la géométrie de la bouteille en réduisant son volume intérieur mais le volume de liquide lui ne change pas c’est pour cela que son niveau monte.

D’un point de vue purement industriel le fabricant de produits ménager souhaite vendre un volume donné de produit et veut aussi que sa bouteille ait une forme plutôt jolie.
Et il veut également que le niveau de liquide soit proche du goulot pour ne pas avoir un excès de contenant par rapport au contenu. (On aurait alors l’impression de se faire voler)

Bidon illustration

Imaginons que vous bossiez pour un lessivier et que vous deviez faire rentrer 2 litres de lessive dans un bidon d’une forme imposée par leur bureau de style.

Votre seule possibilité est de faire varier un facteur d’échelle de façon à ce que le liquide s’approche du goulot.
Mais attention, ce serait trop facile… Ils veulent aussi que le niveau de remplissage pour ces deux litres soit exactement à 35mm de la sortie et que la poignée fasse toujours 35 mm de diamètre malgré le facteur d’échelle appliqué !

On modélise ça comment ?

Il nous faut deux choses:

  • Le bidon paramétrique (toutes les cotes dépendent d’une seule comme la hauteur hors tout par exemple. Toute sauf le diamètre de la poignée pour l’ergonomie)
  • Le liquide contenu (il est facile à modéliser en utilisant la surface interne du bidon que l’on coupe ensuite avec un plan à une certaine hauteur)

On mesure le volume du corps de pièce liquide pour avoir son volume en fonction de la hauteur de la surface du liquide.

Résoudre le problème à la main ?

Pourquoi pas, par dichotomie.
Mais voilà, ce n’est pas si facile finalement car à chaque fois que l’on modifie le bidon “vide” via son échelle, il faut ensuite ajuster le niveau du liquide virtuel (avec un paramètre de hauteur) pour atteindre les 2 litres et vérifier enfin que le niveau est exactement à 35 mm du bord du goulot… Pas facile et long surtout !
Il faut jouer sur les deux paramètres libres :

  • hauteur du bidon
  • niveau de liquide

pour atteindre

  • le volume cible de 2 litres exactement
  • le niveau de remplissage à 35 mm du goulot

Toutes ces choses là sont finalement interdépendantes et c’est une cascade de mises à jour qui s’opère …

Heureusement il existe des moyens automatiques.

Les algorithmes d’optimisation sont nombreux et sont adaptés à des situations spécifiques que seuls les matheux peuvent apprécier. Toutefois, ce genre de chose n’est pas réservé uniquement à MatLab et les logiciels de conception tridimensionnels sont de plus en plus nombreux à proposer ce genre d’atelier. Même Excel en a un ! Vous le saviez ?
Dans CatiaV5, il existe, sous “Gestion des connaissances” un atelier nommé “Product Engineering Optimizer” permettant de résoudre des problèmes de convergence selon plusieurs techniques comme une simple maximisation ou minimisation ou comme ici une résolution avec plusieurs contraintes.

Comment poser le problème ?

Pas compliqué, lorsque l’on a un peu pratiqué. Car il faut que le problème soit bien posé et que cela soit clair dans votre tête.
Mais pour faire simple, il faut répondre à deux questions:

  • On joue sur quoi ?
    Ce sont le ou les paramètre(s) libre(s) qui sera (seront) la cause de l’évolution mesurée
  • On mesure quoi et quelle est la cible à atteindre ?
    C’est la conséquence que l’on souhaite mesurer et surtout le but à atteindre

Exemple:

Je charge une poutre tubulaire de section rectangulaire (avec une charge constante) de façon à obtenir une flèche de 8 à 10 mm (c’est l’objectif, le but et la mesure) et je veux aussi qu’elle soit la plus légère possible (c’est un deuxième objectif) avec un maximum de 250 Mpa (Von Mises) dans toute la poutre (c’est un troisième objectif).
J’ai le droit de modifier la géométrie de ma poutre en jouant sur les deux cotes de la section rectangulaire et sur l’épaisseur de la paroi (ce sont les paramètres libres, on fait ce que l’on veut avec toutefois quelques bornes)

Mais pour répondre à cette question assez complexe, quelle est la bonne combinaison:

  • plus de hauteur, pas trop de largeur et une toile fine
  • plus de toile, et une section plus carrée
  • etc …

Dans cet exemple, posons nous une dernière question.
Que voulons nous en priorité ?
Absolument minimiser la contrainte dans le matériau ?
absolument atteindre 9mm de flèche ?
Absolument minimiser la masse ?
Les trois en même temps ?

cela nous amène à une notion de priorité concernant les cibles à atteindre.
Il faut bien se rendre à l’évidence que dans beaucoup de cas on ne pourra pas converger sur tous les plans, certains objectifs sont contradictoires et il faudra alors donner une priorité à la résolution.

L’optimisation de notre bidon alors ?

Un petit mot sur la définition du Bidon.

Le plan “Niveau Visé objectif” est à une distance de 35mm du bord du goulot, il se déplace donc en suivant la hauteur de la bouteille.
La “distance surface liquide // niveau visé” est une mesure tout comme “Volume liquide”.
Le premier devra, à la convergence, valoir 0 mm et le second 2 litres.
La hauteur du liquide est elle libre et sera pilotée par le logiciel d’optimisation …

Bidon descriptif 1

… tout comme la hauteur du bidon pilotée directement dans l’esquisse.
sur l’image 270mm. Les autres cotes dépendent de celle-ci et cela génère l’homothétie souhaitée.

Le liquide contenu est lui obtenu par extraction de la surface interne du bidon puis, par une intersection avec le plan “niveau liquide”, le dessus est rebouché puis assemblé pour former une surface close qui est ensuite remplie par une opération solide –> on a alors le volume de liquide (Smart Volume)

Et la règle d’or:
Votre modèle doit passer les Updates à coup sûr avec de grosses variations sur les paramètres. A vérifier évidement avant de lancer tout algorithme d’optimisation.
Je peux vous assurer qu’il va y aller gaiement avec les paramètres libres, alors il vaut mieux que votre construction soit robuste et à toutes épreuves.

Voilà pour la géométrie.
Passons à l’optimisation.

C’est parti !

On lance l’atelier “Product Engineering Optimizer”

puis l’outil d’optimisation lui même.

On obtient cette fenêtre à première vue assez complexe:

Optimizer vide

Que nous allons remplir.

Premier onglet, définition du problème:

Voulons nous minimiser ou maximiser une valeur, tendre vers une valeur cible ou autre chose ?
C’est le bouton choix multiple nommé type d’optimisation.
ici, il s’agit d’autre chose qu’une simple valeur. Nous choisirons “Contraintes uniquement” cela veut dire que nous allons tenter de tendre vers plusieurs cibles (que l’on appel ici contraintes) en même temps. Nous les déclarerons dans le deuxième onglet.

Mais accordons d’abord un peu d’importance à ce premier onglet.
Il nous permet de définir les paramètres libres.
On les déclare un à un en appuyant sur “modifier la liste” en bas de la large zone “paramètres libres”.
On dispose alors d’une fenêtre de sélection nous permettant de passer de gauche à droite les paramètres “éligibles” pour cet exercice. Comprendre les paramètres qui sont pilotants (parents) et non pilotés (enfants). Notez qu’il est plus facile de sélectionner nos éléments dans l’arbre que dans cette fenêtre peu lisible.
Prenons alors dans l’esquisse du profil du bidon, la cote de hauteur (270mm pour l’instant) et le paramètre pilotant “hauteur liquide”.

Optimizer param libres

Ensuite, on peut, pour chaque paramètre libre donner des bornes et un pas de façon à empêcher la machine de partir dans des délires invraisemblables. Je n’en ai pas mis ici mais il est toujours mieux d’en imposer.

Et puis… le type d’algorithme. Voilà une question qui est bonne.
Pour ce genre de chose “relativement simple”, je suis un grand adepte de la méthode dite du “recuit simulé”. C’est très métallurgique comme appellation et ce n’est certainement pas un hasard. Comme je l’ai dit plus haut, chaque algorithme est adapté à un type de problème. Je vous invite donc à forger votre opinion en fouillant sur le net à ce sujet très “matheux”.

Vitesse de convergence: Rapide
Oui, les algorithmes font des essais en imposant un certain nombre de valeurs que l’on croirait purement débiles et se font une idée de la manière dont réagit le modèle. A l’instar d’un plan d’expérience, nous pourrons leur imposer de faire un effort sur le nombre d’essais pour s’approcher de la solution.

Critères de terminaison:
Les champs parlent d’eux mêmes.
Je vous conseille de laisser cela comme ça. Ces valeurs sont bien pensée et vous évite de vous lancer dans quelque chose qui ne sort aucun résultat ou qui dures des heures.

Données d’optimisation
oui/non. Cela vous donnera un fichier Excel et une représentation graphique (dans le troisième onglet) de l’évolution des paramètres pilotant (libres) et mesurés.

Comportement de l’exécution (par balle bien sûr !)
Bon, à vous de voir, c’est un peu cosmétique car cela permet de voir comment évolue le modèle mais en même temps cela ralenti la moulinette (avec mise à jour de la visualisation).
Et si l’on met juste en dessous, le curseur sur 1, c’est un update complet de la catpart à chaque itération.

C’est caché dans l’arbre comme souvent. C’est sous “Relations”. On double clic et c’est reparti. Par contre si l’on relance l’Optimizer dans l’atelier, on génère une nouvelle optimisation “vide” et une nouvelle entité dans l’arbre.

Deuxième onglet (les contraintes) !

Optimizer contraintes vide

ici, il convient de donner à Catia la ou les cibles vers lesquelles il doit tendre.

Pour les ajouter il suffit de cliquer sur le petit bouton créer en dessous de la grande zone blanche en partie haute de la fenêtre.
Cela fait apparaître une autre fenêtre, l’éditeur de contraintes:

Editeur de contraintes

Le champs principal est un éditeur de texte libre. Vous devez ici entrer vos équations !

Il s’agit en fait de formaliser des conditions comme par exemple une égalité.
Vous trouverez en partie inférieure de cette fenêtre les outils classiques de “knowledge advisor” vous permettant d’atteindre tous les paramètres du modèle et d’utiliser des routines comme “surface de …” ou “distance de ça à ça” ou encore les unités.

Ici nous donnerons deux égalités à atteindre:

`distance surface liquide // niveau visé` == 0mm
et
`Volume liquide` == 2L

L’erreur fréquente est de ne mettre qu’un signe égal ce qui revient à tenter d’assigner une valeur à une variable.
Ici ce que l’on veut c’est vérifier si le paramètre est bien égal à une valeur (grâce au signe “==”)
Après avoir renseigné ces deux contraintes, nous voyons apparaître une chose très importante: “La distance à la satisfaction”.

Cela représente l’écart qu’il existe entre la situation actuelle et la valeur cible.
En fin d’optimisation, si la convergence a été bonne, on doit avoir ici des valeurs très faibles.
Mais avant de lancer l’optimisation nous avons quelque chose comme cela:

Bidon illustr contriantes-2

Vous voyez alors que vous êtes assez loin de la cible, mais qu’importe.
Inutile d’aller chercher plus loin, le problème est presque posé dans sa totalité et nous allons lancer l’opération.
Il reste si l’on veut peaufiner deux petites choses:

la précision:
On ne veut pas atteindre absolument 0mm mais peut être pouvons-nous nous contenter d’un 0±1mm.
L’algorithme d’optimisation pourra alors considérer que la cible est atteinte et s’arrêter si la valeur se trouve dans l’intervalle de tolérance.
Le poids:
C’est la priorité que l’on donne aux contraintes. Ici, il est aussi important d’atteindre une contrainte que l’autre.
Vous pourriez préférer prioriser l’un des deux en augmentant le poids (2 au lieu de 1) de la contrainte.
L’algorithme se concentrera sur cette contrainte et se forcera à atteindre cette cible au détriment des autres contraintes. C’est une affaire de choix au niveau de la conception et quelquefois une obligation lorsque les contraintes sont contradictoires.

Bouton “Appliquer” puis un ctrl+S, on ré-ouvre la fenêtre d’optimisation et …

On lance l’optimisation (enfin !)

Une fenêtre d’avancement apparait:

  • Les notions de distance à la satisfaction
  • L’état d’avancement vis à vis des valeurs butées que nous avions fixées dans l’onglet “Problème”
  • Un bouton “arrêter” vraiment efficace nous permet de stopper la manœuvre.
  • “Nombre de mises à jour abandonnées” nous indique le nombre de fois où l’Update n’est pas passé. Cela arrive à chaque fois que les valeurs d’entrée sont délirantes (dans ce cas il faut revoir les bornes dans l’onglet problème) ou bien parce que votre modèle n’est pas parfait, c’est à dire qu’il n’est pas assez robuste pour subir des variations importantes sur ses paramètres d’entrée.

Tout s’est bien passé et l’on atteint assez rapidement les deux cibles (2 litres et 35 mm en dessous du goulot).
Je n’ai volontairement pas imposé de précision pour vous monter, en laissant tourner la machine jusqu’au bout du temps alloué (5 min), la précision du résultat atteint:
Catia vous affiche le meilleur résultat.

  • Le liquide contenu est presque 2 litres, à 0.9642 cm3 près.
  • Le niveau de remplissage est atteint à 82µm près.
Optimizer contraintes

Pas mal du tout mais pour quelle hauteur de bidon finalement ?
Car c’est bien cela qui est important.

Rendez vous dans l’onglet “Problème” ou directement dans l’esquisse …

Résultat

Il faut que le bidon fasse 243.276 mm de haut pour que la surface des deux litres de liquide contenus soit à 35 mm en dessous du goulot .
C’est la valeur que nous cherchions !!
Bon on arrondira à 243 mm pour paraître moins débile devant le fabricant du bidon.

En cadeau, une vidéo illustrant la chose en cours d’optimisation:

J’espère que cet article vous a été utile.
Si cela vous a plu, n’hésitez pas à le faire connaître en le partageant.

.

No responses yet

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.