Aller au contenu

Boucles

Garantir que les programmes avec des boucles font ce que nous voulons

Les boucles, en programmation, sont ce qui permet à un ordinateur de répéter inlassablement la même tâche. Mais nous voulons garantir que l'ordinateur produit finalement un résultat, et que ce résultat est celui que l'on veut.

Les savants ont décrit depuis l'antiquité des méthodes répétitives, des algorithmes, pour résoudre des problèmes précis. Par exemple, Euclide a décrit comment trouver le plus grand diviseur commun à deux nombres entiers (diviser le plus grand par le plus petit des deux nombres, recommencer avec le plus petit et le reste de la division, s'arrêter lorsque le reste vaut 0), et Héron d'Alexandrie comment calculer la racine carrée d'un nombre (faire la demi-somme d'une approximation et du nombre divisé par cette approximation, recommencer avec cette valeur comme nouvelle approximation, s'arrêter si c'est suffisamment proche). Par des raisonnements mathématiques, on peut montrer que ces méthodes qui bouclent progressent effectivement vers la résolution du problème.

Les nids de boucles dans les programmes

La "boucle" est une structure de contrôle qui est présente dans tous les langages de programmation impérative. Elle permet de faire répéter jusqu'à de très nombreuses fois une même suite d'instructions. Ainsi, une boucle peut représenter une part importante du temps d'exécution d'un programme, tout en n'étant composée que de quelques lignes d'instructions. De plus, une boucle peut contenir elle-même une ou plusieurs boucles, qui peuvent à leur tour en contenir d'autres, et ainsi de suite. On parle alors de boucles imbriquées, ou de "nids de boucles". Si une boucle effectue N tours, et répète donc N fois les instructions qu'elle contient, et si elle contient elle-même une boucle qui lui est imbriquée et qui effectue M tours, alors le nid composé de ces deux boucles effectue globalement NxM tours.

Transformations de boucles et compilation

Un compilateur est un programme chargé de traduire automatiquement un programme en code machine directement exécutable par l’ordinateur. La traduction doit être à la fois correcte – le code machine doit être équivalent au programme ; et efficace – le code machine doit être optimisé pour utiliser au mieux les ressources de la machine. Il existe de nombreux critères d’optimisation, comme le temps d’exécution, le volume mémoire ou encore la consommation énergétique. Ces critères sont parfois antagonistes, par exemple la réduction du temps d’exécution demande beaucoup de ressources alors que la réduction de la consommation énergétique tend au contraire à les minimiser. Il est habituel que le compilateur offre de nombreuses optimisations et laisse le programmeur choisir celles qui lui conviennent le mieux.

Contrôle en boucle fermée des systèmes informatiques

Le numérique, loin d'être dématérialisé, est un vaste ensemble de terminaux (téléphones, téléviseurs, montres connectées, etc.) et de centres de données et de calcul, qui communiquent grâce à un réseau (mobile ou fixe). C'est sur toute cette architecture que repose les services que nous utilisons au quotidien: réseaux sociaux, streaming vidéo, prédictions météo, etc. La bonne gestion de ces infrastructures est donc essentielle pour maintenir la disponibilité et la qualité des services. Mais ce n'est pas chose facile, étant donné les importantes variations de la demande des services. Par exemple, il y a beaucoup plus de connexion de smartphone aux antennes mobiles la journée que la nuit, les sites internet peuvent subir des pics de connexion (par exemple sur Parcoursup au moment de rentrer ses vœux). Pour faire face à toutes ces variabilités qu'il est impossible de prévoir parfaitement en avance, il est indispensable de s'adapter en temps réel, par exemple via du contrôle.

Construire des agents explorant de manière curieuse et autonome

Lorsqu’un enfant explore son environnement, il effectue diverses actions guidées par sa curiosité/motivation intrinsèque, c'est-à-dire qu’il ne cherche pas forcément à obtenir des récompenses externes comme de la nourriture. Les théories sur la curiosité humaine proposent diverses explications quant aux fonctions de cette exploration, notamment l'acquisition de modèles du monde et de compétences variées susceptibles d'être utiles à l'avenir, ce qui expliquerait leur sélection évolutive. En particulier, un enfant semble se donner constamment des buts qu’il essaye d’atteindre: faire une tour de cubes, aller ouvrir une boîte pour regarder son contenu etc.

Les boucles de contrôle en robotique

Pour qu'un robot manipulateur puisse effectuer une tâche, par exemple saisir un objet, il est nécessaire de contrôler le déplacement de son outil. Ce déplacement est généré par une série d'actionneurs placés à des endroits stratégiques appelés articulations, qui sont souvent des liaisons mécaniques de type pivot ou glissière.

En imposant la configuration de chacune de ces articulations (représentée généralement par des angles ou des translations) et en exploitant le modèle cinématique du robot, on peut positionner l'outil du robot dans la configuration souhaitée. Mais comment imposer ces configurations articulaires ?

Boucle de commande d’un robot : automatisation ou assistance de l’humain ?

Le robot est un système mécatronique capable de mouvements. Son corps est composé de différents segments, articulés entre eux par des liaisons mécaniques, le plus souvent actionnées par des moteurs et équipées de capteurs. La réalisation d’un mouvement par le robot nécessite sa programmation sous la forme d’actions : trajectoires à suivre ou forces à appliquer par les actionneurs. Le rôle du contrôleur du robot est d’assurer le suivi de ces commandes. Pour cela, la boucle de commande compare l’état désiré (trajectoire ou force souhaitées) à l’état courant du robot, estimé grâce à ces capteurs. Elle génère de nouvelles commandes pour corriger l’erreur calculée et atteindre l’état désiré. Cette boucle de perception-action correspond à un système en boucle fermée en automatique et est répétée de manière cyclique temporellement.

Modélisation des boucles de protéines : autour du prix Nobel de chimie 2024

Protéines et fonctions biologiques

Les protéines sont des biomolécules impliquées dans tous les processus du vivant : métabolisme, immunité, gestion de l’information génétique, locomotion, reproduction, etc. Une protéine est constituée d’une ou plusieurs chaînes polypeptidiques, chacune étant un polymère défini par une séquence d’acides aminés– il existe 20 acides aminés naturels qui diffèrent par leurs chaînes latérales. Cette séquence constitue la structure dite primaire, et son repliement 3D produit des éléments de structure secondaire, notamment des brins et des hélices, dont la position relative en 3D définit la structure tertiaire (Fig. 1). Enfin, l’agencement 3D de plusieurs chaînes définit la structure quaternaire.

L’étude mathématique des oscillateurs biologiques

En biologie, on retrouve une grande variété de phénomènes cycliques ou rythmiques. Par exemple, le développement d'un organisme s'effectue grâce au cycle de division cellulaire, qui consiste en une succession d'étapes de croissance d'une cellule, suivie de sa division en deux cellules « filles ». Ces deux nouvelles cellules subiront elles-mêmes ce cycle. Selon l'organisme, la durée du cycle de division cellulaire peut varier : pour une colonie de bacteries Escherichia coli, ce cycle peut durer environ 40 minutes, tandis que pour des cellules mammaliennes il est plus proche de vingt heures.