Aller au contenu principal
Comprendre les espaces de variantes. Premiers pas avec MiniZinc !

Espaces de variantes : premiers pas avec MiniZinc !

MiniZinc est une porte d'entrée pratique vers le SAT-solving. Premiers pas pour modéliser des espaces de variantes, sans études de mathématiques.

Traduit automatiquement de l'allemand · Lire l'original

Julian Weyer
Julian Weyer 21 janvier 2025 · 2 min de lecture
Gestion des variantes ·Gestion des variantes ·Solveur SAT ·2 min de lecture

Récemment, j’ai publié un article sur ce qu’est un solveur SAT et pourquoi c’est une technologie de base importante pour la gestion des variantes. Dans de nombreux outils de gestion des variantes, donc aussi dans les configurateurs de produits, ce sont de tels solveurs SAT qui travaillent sous le capot. Une bonne raison de s’intéresser plus en détail à cette technologie 👍🙂

Il existe même toute une gamme de solveurs SAT disponibles gratuitement… mais seulement sous forme de bibliothèques de code à intégrer dans ses propres projets logiciels. Pour « expérimenter » avec, ces bibliothèques ne conviennent donc qu’aux personnes qui aiment programmer. Et les configurateurs de produits ou outils de gestion des variantes utilisables commercialement (par exemple ConfigIt, pure::variants ou encore la configuration des variantes SAP) coûtent en général cher, et pas qu’un peu. Ces outils en valent la peine, mais pour apprendre et expérimenter, on peut quand même se permettre quelque chose de plus abordable 😉

MiniZinc, le kit d’expérimentation pour solveurs SAT

D’accord, le titre est peut-être un peu raccourci. En réalité, MiniZinc est un langage de modélisation déclaratif à part entière. Il permet de modéliser différents « problèmes » (par exemple des espaces de variantes…) qui peuvent ensuite être transmis à des « solveurs ». Parmi les « solveurs » figurent les solveurs SAT, mais aussi quelques autres. L’essentiel pour nous : MiniZinc est disponible en téléchargement et contient tout ce dont nous avons besoin pour expérimenter. Un éditeur, différents solveurs SAT, tout est pour ainsi dire installé en un clic. Et pour celles et ceux qui préfèrent éviter le téléchargement, il existe désormais aussi une version web : https://play.minizinc.dev/

Pour exécuter l’exemple de ma vidéo, vous n’avez en fait qu’à faire ce qui suit :

  1. Téléchargez et installez MiniZinc (lien de téléchargement ci-dessus) ou utilisez la version web
  2. Copiez le code ci-dessous dans le presse-papiers (ou téléchargez le fichier d’exemple ci-dessous)
  3. Collez le code dans MiniZinc et cliquez sur « Run »

… voilà. C’est tout 😉

Le code contient déjà les deux contraintes pour le cas d’usage visant à déterminer si des cabriolets avec sièges en cuir peuvent être construits. Si vous voulez obtenir l’espace de variantes « pur », il suffit de supprimer ces deux lignes ou de les mettre en commentaire (dans MiniZinc avec % en début de ligne).

Code d’exemple commenté de la vidéo

/*****************************************
* Definition des baubaren Variantenraums *
*****************************************/
% Für jeden Variationspunkt müssen wir eine Variable deklarieren
% Variationspunkte sind die Eigenschaften der Baureihe, die je
% Fahrzeug unterschiedlich sein können.
%
% Jede Variable benötigt einen Datentyp. Es gibt vordefinierte
% Datentypen, wie z.B. Integer oder Boolean. Benötigen wir eigene
% Datentypen, müssen wir diese erst definieren.

% Typen definieren
enum eFahrzeugtyp = {Cabrio, Coupe, Kombi};
enum eAusstattungspaket = {Standard, Business, Sport};
enum eBremsscheibe = {BrStandard, BrGross};
enum eSitzkonfiguration = {Sitze2, Sitze4};
enum eSitzbezug = {Stoff, Leder};

% Variablen deklarieren
var eFahrzeugtyp: Fahrzeugtyp;
var eAusstattungspaket: Ausstattungspaket;
var eBremsscheibe: Bremsscheibe;
var eSitzkonfiguration: Sitzkonfiguration;
var eSitzbezug: Sitzbezug;
var bool: Schiebedach;

% Variantenraum beschreiben
% Nun beschreiben wir, wie die Variationspunkte zueinander in Be-
% ziehung stehen (in SAP würde man deshalb "Beziehungswissen"
% sagen. In MiniZinc erfolgt das mit dem Schlüsselwort "constraint"

% Wenn es ein Cabrio ist, kann es kein Schiebedach haben, und
% außerdem muss es ein 2-Sitzer sein
constraint Fahrzeugtyp = Cabrio -> Schiebedach = false;
constraint Fahrzeugtyp = Cabrio -> Sitzkonfiguration = Sitze2;

% Beim Ausstattungspaket "Sport" ist die große Bremsscheibe drin
constraint Ausstattungspaket = Sport -> Bremsscheibe = BrGross;

% Der Produktmanager hat wohl entschieden, dass es Ledersitze nur
% beim 4-Sitzer geben darf
constraint Sitzbezug = Leder -> Sitzkonfiguration = Sitze4;

/*******************************************************
* Usecase: kann es Cabrios mit Lederausstattung geben? *
********************************************************/
constraint Fahrzeugtyp = Cabrio;
constraint Sitzbezug = Leder;

% Schließlich sagen wir noch dem Solver, dass wir auf Erfüllbarkeit
% prüfen wollen
solve satisfy;

Des questions ou des retours ?🙂 => Envoyez-moi un message