 Je suis prudent de le réciter à Antoine pour réduire l'ordre d'ordre de décision de décision en compagnie de trois structures. OK. Merci. Allô ? C'est un joint-doerre avec Julien Clément de Normandie University. Et c'est un étudiant sur les structures de données pour les fonctions boulevées. Et nous allons étudier ces structures de données d'un point combinateur. En fait, les diagrams de décision de décision ont été développés dans les années 80. Et ils étaient très utiles en pratique, en particulier en vérification automatique, comme en vérification de modèles ou en synthésie de bouleaux et de circuits. Donc ils sont très utiles en pratique. Mais en fait, les structures de combinaire n'ont pas été beaucoup étudier. Donc, en fait, nous n'avons pas pu les déchirer selon les diamères. Donc, mon premier objectif est d'essayer d'obtenir des analyses combinatériques de ces diagrams et d'un point combinatériques. Donc, tout d'abord, nous fixons une fonction bouleaux dans des variables K. Donc, dans tous mes paroles, les variables K seront les numéros. Et un diagramme de décision bouleaux est une structure de data qui représente la fonction bouleaux F qui est représentée comme un graphe d'acéculiaire qui est compact. C'est une forme compact de la représentation de F. Et en fait, c'est utilisé pour évaluer la fonction officiellement. Donc, si vous regardez mes diagrams de décision ici, en fait, si je veux évaluer la fonction F pour une évaluation spécifique des variables, je peux aller de la route ici à la valeur de la fonction par looking à un pass spécifique. Par exemple, si je évaluais ma variable X4 à fausse, je vais au left-most du fil de X4. Donc, la 1 avec l'edge doté. Et puis, si je l'évaluais X3 à fausse, je vais en utiliser l'edge solide pour aller de plus en plus dans mon diagramme. Et puis, si je... Par exemple, je prends X2 pour être fausse. Puis, je prends la seconde fois l'edge solide. Et puis, que ce soit, je poursuis ma valeur fausse ici. Donc, quelles sont les valeurs, la vraie valeur de X1 est, ma fonction est fausse en ce cas. OK. Donc, l'efficience de cette représentation pour l'évaluation est en fait reliant sur un principe de dévivement et de concours. Donc, pour l'élection en 2000, Végénère a écrit une belle monographie sur les diagrams des décisions binaires et, plus tard, en 2011, Knuth a intégré dans son volume 4 de l'art de la programmation un grand secteur sur les diagrams des décisions. Et là, il y a des études ou des points de vue sur ces diagrams, mais il n'y a pas tant d'études et d'études combinatorielles que d'autres dans la littérature. Et en fait, dans cet étudiant, je serai intéressé dans un subclass de diagrams des décisions binaires qui sont réduits dans les diagrams des décisions binaires. Donc, ce qui signifie ordre, c'est que si vous regardez un pass de la route à une élection du diagramme, alors que les variables que vous avez rencontrées sont toujours dans l'ordre dans le même ordre. Donc, sur mon exemple ici, je commence de x4 et je termine de x1 pour diminuer l'ordre de l'index. Et le fait que le diagramme est réduit signifie que dans mon diagramme, je n'ai pas deux décisions de la même substructure. Ok, donc ça signifie réduit. Et depuis maintenant, je vais utiliser la notation AeroBDD BDD pour cette structure. Et, comme je l'ai dit je suis intéressé dans les combinaultures sur ces diagrams. Donc, une motivation sur mon travail est la suivante. En deux ans l'an dernier, Newton et Werner ont travaillé dans une analyse pour la taille de l'AeroBDD. En fait, l'un de leurs objectifs était de définir pour un nombre de variables ici, pour exemple, pour 4 variables, la distribution complète des dimensions de l'AeroBDD pour fonctionner sur 4 variables. Donc, ici, dans cette picture, par exemple, ils obtiennent que pour 4 variables, il y a 22000 fonctions avec l'AeroBDD de l'AeroBDD de ces 10. Je me rappelle qu'il y a une doppelle exponentially increase ici. Quand vous regardez sur 4, sur 4 variables, vous avez 2 4 fonctions. Donc, vous avez 65000 fonctions et En utilisant ces plots, nous pouvons voir que tous les dégâts de ces fonctions sont de la taille à la fin de l'année 11. Donc, ils voulaient obtenir une bonne distribution pour les fonctions de bouleurs de 1, 2, 4 et d'autres variables. Et en fait, grâce à ces increases, ils ont réussi à compter la distribution complète jusqu'à 4. Et puis, le nombre de fonctions dans 5 variables est plus que 4 millions. Donc, ils n'ont pas réussi à obtenir cela exhaustivement. Donc, pour les restes de leur étudiant, ils ont fait un peu d'extrapolation par sampler uniformement les fonctions. En fait, ils ont samplé les fonctions de la taille à la fin de l'année 11. Et puis, ils ont construit, en utilisant la taille à la fin de l'année 11, et donc ils ont, pour une génération uniforme de fonctions, les valeurs de la taille de l'aéroport. Et en fait, pour 9 et 10 variables, ils ont obtenu une sorte d'extrapolation où on voit que, finalement, selon leur expérience, presque toutes les fonctions ont une très grande taille pour leur aéroport. En fait, la taille maximale est possible. Et, comme vous pouvez le voir sur leur extrapolation, ils n'ont pas pu, par sampler les fonctions uniformes de l'atronome, obtenir des lignes de l'aéroport. Il n'y a pas de point de la taille de 20 à 100, par exemple, pour 9 variables, ou pour la taille de 20 à 200, pour les fonctions de l'aéroport sur 10 variables. Mais, en fait, nous savons qu'il y a beaucoup d'interessants fonctions qui ont une taille de lignes de l'aéroport. Par exemple, la taille de l'aéroport qui permet de faire une addition ou des fonctions qui sont réduées ou symétriques ont une taille de lignes de l'aéroport. Par exemple, si vous êtes intéressé dans la fonction de l'aéroport ou dans la fonction de l'aéroport, en bleu vous avez la taille de l'aéroport de l'aéroport. La dernière taille correspond à 10 variables. Si vous voulez, en fait, pour 10 variables, la fonction de l'aéroport, la taille de l'aéroport est de 32. Donc, la fonction de l'aéroport est ici, ou ici. Donc, par sampler la fonction de l'aéroport et de l'aéroport, il n'y a pas de chance d'attendre la fonction de l'aéroport par exemple. Donc, mon objectif est d'être capable de sampler par choisir une taille, par exemple, une taille de 100 pour 10 variables pour pouvoir sampler l'aéroport en uniformité de l'aéroport ici avec une taille de 100. Bien sûr, nous savons qu'il y a d'autres fonctions qui sont intéressantes et dont l'aéroport est large, mais je ne suis pas intéressé dans cette direction pour le moment. Ok, et maintenant, je vais juste essayer de vous donner une intuition pourquoi l'enumération de l'aéroport est difficile. Ok, donc, j'ai député ici un aéroport pour une fonction de 9 variables et j'ai utilisé la gravis pour obtenir ma représentation. Mais comme vous voyez, la gravis essaie d'obtenir quelque sorte de représentation compacte. Et donc, les égages sont tous étendus. Donc, je veux premièrement étendu un petit peu ces égages afin de voir la structure de mon aéroport un peu mieux. Donc, je vais juste mettre la gauche et la droite un peu plus loin afin d'être capable de voir, de se concentrer sur la gauche sur la gauche de mon diagramme et sur la droite de mon diagramme. Ok? Et entre les deux, vous pouvez voir qu'il y a des égages red. C'est juste mon point de vue. J'ai député les égages par la droite à la gauche par les égages red. Et maintenant, si vous êtes en train de concentrer sur la gauche diagramme, dans mon point de vue, dans ma représentation, vous retirez le point red puis vous pouvez voir que c'est aussi un bdd aéroport sur 8 variables. Mais bien sûr, sur la droite de mon diagramme sur 8 variables, ce n'est pas plus un bdd aéroport parce que de ces égages red, ce n'est pas une formule clos, ce n'est pas un diagramme clos. Vous avez besoin de ces égages red pour le construire complètement. Et c'est une des raisons pourquoi les égages red sont des diagrams. Mais on va essayer de le faire. Donc, c'est l'outlet de mon talk. Donc, avant tout, je vais vous donner quelques égages combinatéraux pour comprendre la façon dont je vais égager la structure. Une fois que vous pouvez voir mon point de vue combinatéraux, on va pouvoir donner des comptes récursifs pour les égages red. Et une fois que vous avez les comptes récursifs, on va pouvoir donner un genre d'algorithme pour samplez exaustifment les égages red. Mais quand le nombre est augmenté, l'exaustif en génération n'est pas possible. Mais vous pouvez aussi utiliser l'algorithme de rank afin de utiliser ça comme un sample uniforme. En taking deux paramètres, le nombre de variables de la fonction et le nombre de les égages red que vous voulez. Ok. Donc, les diagrams de décision sont construits de la décision 3. C'est une structure représentant une fonction qui n'est pas de la vraie stabilisation de la fonction. Si vous regardez ici, à mon dernier niveau de la décision 3, en fait il y a des encodings de la vraie stabilisation de la fonction. Et comment vous readz cela ? Si vous évaluez l'exaustif d'une fausse, vous follow l'exaustif x3 vous follow le plan de la vraie stabilisation x2, vous falsez l'exaustif x1, vous falsez l'exaustif et donc, pour l'example de cette évaluation, la fonction évaluate l'exaustif. Et en fait le fait que vous avez l'exaustif d'une sorte d'ordre pour les enfants de l'exaustif. Je vais dire que la gauche est obtenue quand vous suivez l'exaustif. Et la droite est obtenue quand vous suivez l'exaustif. Et donc, cette représentation peut être seen comme un plan de la vraie stabilisation. L'exaustif a deux enfants qui sont en ordre. Et les enfants de la droite pour l'exaustif. Donc, en utilisant cette convention je peux utiliser l'exaustif classique pour l'example. Je peux traverser ce truc avec l'exaustif de l'exaustif post-ordre. Donc je vais à la gauche le plus grand possible. Et puis je vais une étape plus et ainsi. Les variables vont de xk à x1. xk à la route et x1 pour le dernier niveau de la note interne. Ce n'est pas le moyen d'élaborer les variables. Normalement, vous avez x1 ici, x2 pour le second niveau, etc. Mais en fait, je veux obtenir des constructions récursives. Donc, c'est plus facile d'élaborer les variables à la route de l'example. Et maintenant, comment je vais obtenir l'aéroport. En fait, l'aéroport est le résultat de la compaction de la décision 3. Vous avez 2 pour la décision 3. Donc, pour cet exemple, vous avez 2 règles pour la compaction. Tout d'abord, pour l'example, ici, x1 a deux enfants qui sont tous equal à troupes. Donc, x1 va disparaître. Et si vous regardez à l'arrière de l'arrière, de x2, vous allez directement à la ligne, à la ligne du diagramme. Donc, x1 a disparait ici. Et la seconde ruelle est la suivante. Si vous avez deux sub-trees identiques dans la structure, vous retirez et vous le réplacez par un pointeur pour la première. Donc, pour l'example, si vous regardez ici et ici, ce x1 va falloir troupes, c'est ici. x1 va falloir troupes c'est le petit enfant de ce x2, mais aussi c'est le petit enfant de ce x2 ici. x1 va falloir troupes. Donc, cette sub-structure est répliquée par un pointeur pour cette. Comme vous pouvez le voir ici. Et maintenant, afin d'obtenir l'arrière de l'arrière de l'arrière, j'utilise ce compaction-rules jusqu'à qu'il n'est pas possible d'utiliser elles au plus pig leve. Et nous pouvons montrer que le système de rues est confiant. Donc, quelles autres ordres que vous apliez les rues, vous obtenez la même structure au point où vous ne pouvez pas vous compacter encore. Et une conséquence de cette c'est que le RUBVD est unique pour une fonction. En fait, c'est clair Le traitement de la décision est unique pour une fonction, parce que c'est tout de même le trou stable de la fonction, et la formule la plus compactée que vous obtenez en utilisant ces règles, c'est conséquent unique aussi. Donc, le diagramme de décision binaural a une property intéressante, donc pour une fonction binaurale, cette structure est unique. Et maintenant, au lieu d'utiliser mes règles de compaction dans d'autres règles, j'utilise le traversal post-order de la décision binaurale. Donc, je vais commencer par suivre le branch de la binaurale de ma décision binaurale, et ici j'ai trouvé le trou, j'ai terminé le trou, c'est la première fois que je vois le trou, donc j'utilise la structure compactée de ma décision binaurale. Et ensuite, je vais au second tour, je les mets au second tour, donc j'ai déjà vu le trou, donc rien d'autre. Quand je veux compacter la décision binaurale, il y a deux fois la même enfant, c'est la même enfant, donc la décision binaurale sera retirée. Donc je vais ici, j'ai trouvé le trou, j'ai mis le trou ici, j'ai obtenu le trou, j'ai vu le trou, et ensuite la décision binaurale pointée au trou et au trou, donc c'est celui-là, la décision binaurale pointée au trou et au trou, je le vois pour la première fois, et ensuite je suis regardé pour celui-là, la décision binaurale, et c'est pointé au trou, pour celui-là, et pour la première structure binaurale, ici, pour celui-là. Et ensuite, tu utilises la décision binaurale afin de compacter la décision binaurale. Et en fait, cette décision binaurale a besoin d'un point de vue pour représenter ma fonction, comme tu l'as vu, tout est mis à la gauche, dans mon trou et dans mon trou, et une fois que j'ai obtenu une deuxième décision de la structure binaurale, j'ai obtenu mes égages rèdes avant. Ok, donc c'est ma représentation de la décision binaurale. Et maintenant, je veux ignorer la décision binaurale, mais en fait, afin de faire ça, je vais prendre une partie de la décision binaurale selon les structures bleues qui restent ici, quand tu removing les égages rèdes. Et cette structure bleue est une espagne et je vais coller la espagne de l'aéroport. Ok. Et donc je vais utiliser cette équivalente class, et je veux maintenant pour un espagne donné de pouvoir éliminer how many aerobites are encoded by this espagne. Donc, c'est une question combinautale. Comment je peux ajouter les égages rèdes afin de obtenir une variabilité? Ok. Mais nous allons essayer cet exemple. Ok. Je vais dénoncer le weight de la espagne pour être le nombre de possibilités pour ajouter les égages rèdes pour obtenir une variabilité. En fait, le weight de la espagne est un paramètre multiplicatif parce que, si vous avez choisi une égage, vous devez choisir une autre égage rède et c'est pas indépendant, mais bien sûr, c'est des multiplications que vous devez faire. Si j'ai des définitions, mais nous allons essayer, nous verrons les exemples. Donc, d'abord, j'ai mon espagne ici. Et maintenant, je veux ajouter les égages rèdes. Donc, le premier élément que je suis intéressé c'est ce x1. Je dois ajouter le petit élément et le petit rède. Bien sûr, ces enfants doivent, parce que je suis intéressé dans le x1, ces enfants belongent aux deux constants, tru et fausse. Donc, pour le petit rède, j'ai deux possibilités, soit tru ou fausse. Et pour le petit rède, j'ai une seule possibilité, que le petit rède ne soit pointé à la même enfant. Donc, le nombre de possibilités pour ajouter deux égages rèdes est 2 x 1. Si je regarde le petit rède pour cet x2, ce petit rède doit être pointé dans le rède, tru ou fausse, parce que ce n'est pas pointé à quelque chose qui n'a pas été pointé pour le moment. Donc, ce n'est pas pointé à cet x1, par exemple. Donc, ici, le nombre de possibilités pour cet égage est 2. Et vous pouvez continuer ici, un peu plus compliqué. Les égages rèdes ici, le petit rède peut être les deux constants, mais ça pourrait être le x1. Donc, j'ai trois possibilités, pour le petit rède et pour le petit rède, je ne peux pas pointer à la même chose qu'avant. Donc, c'est seulement deux possibilités, mais il y a un autre constrain, ici, je ne peux pas définir, pardon, je ne peux pas définir la même chose ici que celui-ci, parce que je ne peux pas définir les mêmes occurrences d'une substructure dans ma globale LBDD. Donc, je dois remettre une possibilité que c'est le même que cette substructure routée à cet x2. Donc, finalement, le nombre d'égages rèdes pour cet x2 est 4. Et je peux continuer et quand je suis fait avec toutes les égages rèdes, je j'ai récomputé que cette spine est encadée, en fait, 300 lbdd. Ok. Donc, il y a 300 fonction en cave dans 4 variables avec cette spine. Ok. Le compte peut être prouvé et ici, il y a les 4 possibilités ou pour le weight d'un nôtre. Ok. Je ne vais pas entrer dans les détails, mais l'exemple que vous avez vu est utilisé toutes ces 4 règles. Donc, maintenant, je peux compter le weight de la spine. Ok. Je compute le weight de chaque nôtre et puis les notes. Et si je suis avec ceci, je suis capable d'enumerer les lbdd selon la size de les lbdd parce que la size de la spine est exactement la même que la size de la lbdd. Mais je peux improvement ma construction. Donc, ma première relation est en fait, comme vous l'avez vu dans mon formulae juste avant, le weight, la construction est constructée, ce n'est pas important. Parce que dans mon formulae, ici, j'ai juste le nombre. Ok. La structure sub- ici de la spine n'est pas importante. Donc, en fait, ce qui est important c'est de la lbdd. Donc, j'ai 1x3 sur la lbdd. J'ai 2x2 sur la lbdd. J'ai 1x1 sur la lbdd. Et j'ai les deux constants. Et la structure ici n'est pas importante. Donc, j'ai une relation d'équivalence pour la spine dans les lbdd. où la lbdd est une vector. Quand j'utilise la relation d'équivalence d'équivalence, je ne suis pas capable d'énumerer les les lbdd selon leur size. Et pour lbdd sur la lbdd, je peux obtenir la distribution de lbdd avec l'algorithme de cette order de complexité. C'est une partie importante. C'est 2 de lbdd. C'est exponentiel. Mais en fait, il faut rappeler que le nombre de fonction est 2 de lbdd. Il faut rappeler que c'est exponentiel. On ne peut mériter de lbdd. Pour lbdd, on peut compter une distribution de 2 d'alors sur le computé et si on utilise une implementation plus plus plus, on peut atteindre 9 dans 3 jours. Il reste quelques minutes. C'est des idées pour prouver la complexité, mais ce n'est pas mon complet distribution exacte distribution que j'ai pu compter et si on regarde les détails dans la extrapolation de Newton et Verna, on voit que les extrapolations étaient bonnes parce que tout est constrain dans la large size mais si on a la point exacte donc je peux utiliser la spécifique et pour 9 variables de 60 de 2 300 et ce sont les pi de 130 de 2 500 et mais j'ai la valeur exacte pour toutes les sizes de l'arrivée ok, j'ai pris quelques minutes pour donner les idées basées pour l'arrivée de l'arrivée donc juste récolte l'arrivée est quelque chose d'exhaustif sampler en fait vous définissez un total de l'arrivée de la structure vous voulez un rang et puis vous choisissez un rang et vous essayez de construire l'arrivée associée à ce rang mais bien sûr pas de construire toutes les structures par exemple ici sont comptées par le nombre de notes internautes donc par exemple les 3 de la taille 1 vous avez 1 donc le rang est 0 les 3 de la taille 2 vous avez 2 je choisis ce total donc je mets ce rang relative à la taille 0 et ce rang relative à la taille 1 et pour 3 3 notes internautes vous avez 5 les 3 je choisis cette ordre en fait cette ordre est relative à cette décomposition pour 3 de la taille 1 je décompose comme la taille de la taille 1 et la taille 2 de la taille 0 et ainsi et quand vous voulez un rang une taille de la taille 1 vous définissez 1 la taille de la taille 1 et de la taille de la taille de la taille 1 donc pour exemple je suis intéressé dans les 3 de la taille 7 et je sais en utilisant les numéros catalanes que ce sont ces 3 pour presque vous avez environ 400 3 de la taille je veux un rang la taille 3 avec un rang 250 ok donc je décompose 429 dans la taille de la taille donc vous avez taille 6 6 sur la gauche et taille 0 sur la droite taille 6 sur la gauche et taille 1 sur la droite et ainsi et si vous regardez un rang 250 en fait vous vous voyez que 250 est entre 227 et 255 donc vous vous savez que votre 3 est de cette décomposition donc la taille de la taille de la taille est 2 et la taille de la taille de la taille est 4 et maintenant vous êtes computé le rang relative dans cette décomposition donc le rang relative est 250 minus 227 et vous voulez définir le rang de la taille et le rang de la taille donc vous utilisez un division la division de la taille donc je divise par 14 parce que de cette 14 et je obtenir rang 1 pour la taille et le reste de la taille est le rang pour la taille et maintenant je peux appliquer ma méthode recursive je sais que je dois choisir le rang 1 pour la taille de la taille 2 et le rang 9 pour la taille 4 pour la taille de la taille donc je peux obtenir recursive ma taille mais dans notre contexte le boss les enfants ne sont pas indépendants parce que les points rouges donc nous pouvons adapter les méthodes de rang de la taille par prendre soin de cette en fait je vais juste donner des intuitions en fait je vais constructer je vais ranker ma taille par la taille donc je dois définir la taille je vais constructer la taille mais en fait les deux les deux ne sont pas indépendants je dois définir cette structure avant de constructer cette et en fait je vais finir avec cette pour exemple si vous regardez ces petites des deux variables de taille 5 la taille est 0 ok si vous regardez la taille de gauche ici c'est ce qui relativement ce qui est de rank 0 mais ici la deuxième taille c'est ce qui c'est ce qui est de rank 1 mais si vous constructez la taille de gauche puis la taille de gauche rank n'est pas 1 parce en fait vous avez une seule possibilité pour 3 et la taille de gauche qui est de la taille de gauche ici parce que vous ne pouvez pas construire la taille de gauche donc les deux les deux pour la taille de gauche et la taille de gauche sera avec rank 0 mais bien sûr vous ne pouvez pas construire la taille de gauche donc vous devez être attention dans la construction et en fait notre approche peut s'adapter à d'autres types de BDD ici vous avez quelques exemples on est capable d'improver la construction par utiliser des extensions de des baineries par Andrew Wanzi et Michel que ils obtiennent les résultats en utilisant en regardant un bout de la décomposition de la route à la taille décomposition de la taille ils utilisent un genre de dégout et on est capable d'improver notre approche par utilisant leur adaptation et en fait si on veut obtenir une décomposition de la taille décomposition pour des fonctions avec des variables nous devons pouvoir trouver un autre moyen d'improver parce que comme vous avez vu notre méthode est encore exponentielle dans le nombre de variables donc la méthode d'imprové n'est pas la méthode d'imprové n'est pas un emploi d'imprové afin d'obtenir une fonction avec un grand nombre de variables ok merci ok, merci beaucoup c'est possible vous pouvez ouvrir je vous demande des questions Tergay non qui veut poser la première question question mais par rapport à slide 8 peut-être pouvez-vous ouvrir slide 8, Antoine ? c'est sur les deux les deux les deux transforment transforment une décision en train d'imprové d'imprové j'ai eu des études combinataires sur le nombre de différentes paths par rapport à une décision de diagramme à un RABDD en terminant dans le terme de la la je ne pense pas que c'est comme je n'ai pas le travail je n'ai pas le travail dans cette direction et je n'ai pas l'idée si il y a des résultats dans la législation je n'en sais pas une idée Qu'est-ce que l'effet sur l'aide de chaque rouleau ? C'est contextuel. Oui, donc il n'y a pas de signification. Il dépend du point de départ. Oui, je sais. C'est une autre façon d'exprimer l'OBDD implicitement par une décision diagramme plus d'un parc, ou d'un set de parc, de l'OBDD. Je ne sais pas si ça peut donner des résultats combinatéraux. Ok, oui. Vous comprenez votre commentaire. Une autre question ? Oui. Quand vous présentez la méthode d'un renseignement, excusez-moi, c'est recursive, mais vous n'avez pas donné un code ou une présentation qui est recursive. Par exemple, un code dans Askel. Vous essayez de programmer ça dans Askel, ou dans un langage recursif, pour voir comment l'approche spécifique pour l'OBDD signifie que quand vous travaillez sur le massaging ou transformant l'Askel code. En fait, nous avons utilisé un programme imperatif. Nous avons un Python et un C++ implementation, mais nous n'avons pas essayé d'obtenir un programme fonctionnel pour dériver l'OBDD. Vous savez, j'ai l'impression que j'imagine que c'est débattable que le C++ code est plus rapide, mais j'ai l'impression que si vous travaillez sur une présentation recursive, vous pouvez voir comment vous pouvez transformer l'OBDD dans un message. C'est juste une suggestion. Ok, merci.