Travailler avec les modules dans EvoX
Un module est un concept fondamental en programmation qui fait référence à une unité de code autonome conçue pour effectuer une tâche spécifique ou un ensemble de tâches connexes.
Ce notebook présentera le module de base dans EvoX : ModuleBase.
Introduction aux modules
Dans le tutoriel, nous avons mentionné le processus d’exécution de base dans EvoX :
Ce processus nécessite quatre classes de base dans EvoX :
AlgorithmProblemMonitorWorkflow
Il est nécessaire de fournir un module unifié pour eux. Dans EvoX, les quatre classes héritent toutes du module de base — ModuleBase.

Classe ModuleBase
La classe ModuleBase hérite de torch.nn.Module.
Il y a de nombreuses méthodes dans cette classe, et voici quelques méthodes importantes :
| Méthode | Signature | Utilisation |
|---|---|---|
__init__ | (self, ...) | Initialiser le module. |
load_state_dict | (self, state_dict: Mapping[str, torch.Tensor], copy: bool = False, ...) | Copier les paramètres et tampons depuis state_dict dans ce module et ses descendants. Surcharge torch.nn.Module.load_state_dict. |
add_mutable | (self, name: str, value: Union[torch.Tensor | nn.Module, Sequence[torch.Tensor | nn.Module], Dict[str, torch.Tensor | nn.Module]]) -> None | Définir une valeur mutable dans ce module accessible via self.[name] et modifiable sur place. |
Rôle du module
Dans EvoX, le ModuleBase peut aider à :
-
Contenir des valeurs mutables
Ce module est orienté objet et peut contenir des valeurs mutables.
-
Supporter la programmation fonctionnelle
Le modèle de programmation fonctionnelle est supporté via
self.state_dict()etself.load_state_dict(...). -
Standardiser l’initialisation :
Fondamentalement, les sous-modules prédéfinis qui seront AJOUTÉS à ce module et accédés plus tard dans les méthodes membres doivent être traités comme des “membres non statiques”, tandis que tout autre membre doit être traité comme un “membre statique”.
L’initialisation du module pour les membres non statiques est recommandée dans la méthode surchargée de
setup(ou toute autre méthode membre) plutôt que dans__init__.
Utilisation du module
Plus précisément, il y a quelques règles pour utiliser ModuleBase dans EvoX :
Méthodes statiques
Les méthodes statiques à compiler JIT doivent être définies comme :
# One example of the static method defined in a Module
@jit
def func(x: torch.Tensor, y: torch.Tensor) -> torch.Tensor:
return x + y
Méthodes non statiques
Si une méthode avec des flux de contrôle dynamiques Python comme if doit être utilisée avec vmap,
veuillez utiliser torch.cond pour définir explicitement le flux de contrôle.