<!DOCTYPE article PUBLIC "-//NLM//DTD JATS (Z39.96) Journal Archiving and Interchange DTD v1.0 20120330//EN" "JATS-archivearticle1.dtd">
<article xmlns:xlink="http://www.w3.org/1999/xlink">
  <front>
    <journal-meta />
    <article-meta>
      <title-group>
        <article-title>Choisir un encodage CNF de contraintes de cardinalité performant pour SAT</article-title>
      </title-group>
      <contrib-group>
        <contrib contrib-type="author">
          <string-name>T. Delacroix IMT Atlantique - Dépt. LUSSI</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Brest</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>France thomas.delacroix@imt-atlantique.fr</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Résumé</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <contrib contrib-type="author">
          <string-name>Mots Clef</string-name>
          <xref ref-type="aff" rid="aff0">0</xref>
        </contrib>
        <aff id="aff0">
          <label>0</label>
          <institution>CNF</institution>
          ,
          <addr-line>SAT, encodage, contraintes de cardinalité</addr-line>
        </aff>
      </contrib-group>
    </article-meta>
  </front>
  <body>
    <sec id="sec-1">
      <title>-</title>
      <p>
        CNF, SAT, encoding, cardinality constraints.
Parmi les solveurs modernes en programmation sous
contrainte les plus performants, on trouve aujourd’hui un
certain nombre de solveurs CNF-SAT. Les palmarès
récents du MiniZinc Challenge en témoignent [
        <xref ref-type="bibr" rid="ref12 ref14">13, 11</xref>
        ].
Un solveur CNF-SAT permet d’obtenir une valuation pour
laquelle une expression logique sous forme conjonctive
normale (CNF) donnée est satisfaite lorsqu’il en existe une.
Pour une contrainte particulière, la performance du solveur
dépend donc à la fois de l’algorithme de résolution du
solveur et à la fois de la façon dont la contrainte est exprimée
sous forme CNF.
      </p>
      <p>
        De nombreux travaux se sont donc penchés sur la
question de savoir comment exprimer des contraintes classiques
des CSP sous forme CNF de manière performante pour les
solveurs CNF-SAT [
        <xref ref-type="bibr" rid="ref11 ref15 ref16 ref2 ref3 ref4 ref5 ref6 ref8">1, 2, 3, 4, 5, 7, 10, 14, 15</xref>
        ]. C’est le
cas notamment pour les contraintes de cardinalité 1 de type
#k(x1; :::; xn) où # peut être l’un des symboles ; =; .
En effet, un encodage naïf de ces contraintes contient, dès
que n augmente, beaucoup trop de clauses pour pouvoir
être utilisé de manière raisonnable en pratique. De
nombreux encodages CNF ont donc été proposés, fonctionnant
tous sur le même principe général : des variables
supplémentaires sont introduites de manière à réduire
drastiquement le nombre de clauses.
      </p>
      <p>
        Parmi les travaux existants, on trouve des comparaisons
des différents encodages proposés [
        <xref ref-type="bibr" rid="ref10 ref13 ref3">2, 9, 12</xref>
        ]. Toutefois,
ces comparaisons ne sont pas exhaustives. En effet,
l’accent y est généralement mis sur le comportement des
encodages lorsque n tend vers l’infini. Or, en pratique, on
peut également être amené à considérer de très nombreuses
contraintes de cardinalité de faible dimension. Une
comparaison exhaustive des encodages existants s’impose donc
afin d’essayer d’optimiser au maximum l’étape du choix de
l’encodage dans la résolution SAT et cela constitue un des
éléments central de cet article. On s’aperçoit alors qu’il n’y
a pas un encodage plus performant que tous les autres mais
de nombreux encodages performants selon les paramètres
du problème. On montre également qu’il est possible de
combiner des encodages pour obtenir de meilleures
performances.
      </p>
      <p>Par ailleurs, on introduit dans cet article un nouvel
encodage : l’encodage séquentiel bidirectionnel. Cet encodage,
dont la définition est assez naturelle, est particulièrement
adapté pour considérer des contraintes de cardinalité plus
complexes, notamment les contraintes de cardinalité
correspondant à un intervalle. On montre par ailleurs qu’il
permet de considérer des contraintes de cardinalité de type
2 K(x1; :::; xn) où K J0; nK de manière performante ce
qui représente une nouveauté.</p>
      <p>1. Le terme contrainte de cardinalité est utilisé ici selon la
nomenclature standard dans le contexte SAT et ne doit pas être confondu avec
d’autres notions telles que celle de global cardinality constraint utilisée
dans le contexte de la programmation sous contrainte.</p>
    </sec>
    <sec id="sec-2">
      <title>Encodage séquentiel bidirectionnel</title>
      <p>
        Dans la suite, on considère des entiers n et k tels que n 2
et k 2 J1; n 1K, les autres cas étant évidemment triviaux.
La démarche qui mène à définir l’encodage proposé dans
cette section s’apparente à la démarche qui mène à
l’encodage séquentiel proposé par Carsten Sinz dans [
        <xref ref-type="bibr" rid="ref13">12</xref>
        ]. En
effet, dans l’article précité, l’auteur définit les sommes
partielles si = Pim=1 xm et considère le j-ième bit si;j de
la représentation unaire de si. Il transpose alors ces bits
en variable booléenne dans un encodage CNF pour
aboutir à l’encodage ci-dessous pour la contrainte de cardinalité
k(x1; :::; xn). Par la suite, on le désigne par le nom
d’encodage séquentiel unidirectionnel et on le note SeqU nk.
(:x1 _ s1;1)
(:s1;j ) 8j 2K1; kK
(:xi _ si;1)
(:si 1;1 _ si;1)
(:xi _ :si 1;j 1 _ si;j )
(:si 1;j _ si;j )
(:xi _ :si 1;k)
(:xn _ :sn 1;k)
9
&gt;
&gt;
&gt;
&gt;
=
8j 2K1; kK&gt;&gt;
&gt;
&gt;
;
8i 2K1; nJ
(SeqU nk)
Cependant, cette transposition contient une réduction qui
aboutit à une perte d’information entre la variable si;j tel
qu’elle est encodée dans SeqU nk par rapport au bit si;j
décrit précédemment. En effet, le bit si;j est équivalent à si
j. Or l’encodage SeqU nk donne (si j) =) si;j mais
pas l’implication réciproque. Cette perte d’information est
volontaire car elle entraine un encodage plus restreint de
la contrainte k(x1; :::; xn). Toutefois, ce choix n’est pas
forcément judicieux lorsque l’on considère une contrainte
= k(x1; :::; xn) ou deux contraintes k1(x1; :::; xn) et
k2(x1; :::; xn) définissant un intervalle.
      </p>
      <p>L’encodage CNF qui suit permet d’encoder exactement
l’ensemble des équivalences (si j) () si;j pour tout
i 2 J1; nK et pour tout j 2 J1; k + 1K. On appelle
encodage séquentiel bidirectionnel cet encodage et on le note
SeqB#nk.</p>
      <p>(x1 _ :s1;1)
(:xi _ si;1) 8i 2 J1; nK
(:sj 1;j ) 8j 2K1; k + 1K
(:si 1;j _ si;j )
(xi _ si 1;j _ :si;j )
(si 1;j 1 _ :si;j )
(:xi _ :si 1;j 1 _ si;j )
9
8j 2 J1; k + 1K&gt;&gt;=
8j 2K1; k + 1K &gt;&gt;;
8i 2K1; nK
(SeqB#nk)
À partir de cet encodage, il est très facile d’obtenir la
contrainte de cardinalité k(x1; :::; xn). En effet, il
suffit de rajouter la clause :sn;k+1. De même, la contrainte
k(x1; :::; xn) s’obtient simplement par le rajout de la clause
sn;k. Enfin, la contrainte = k(x1; :::; xn) s’obtient par le
rajout de ces deux clauses. On note SeqBnk, SeqBnk et
SeqB=nk les encodages respectifs correspondants.
3
3.1</p>
    </sec>
    <sec id="sec-3">
      <title>Choisir son encodage</title>
      <p>Comparaisons des encodages
En plus des encodages décrits précédemment, on va
également considérer l’encodage naïf (N nk) défini par :
(N nk)
^
k+1
_
i2Cnk+1 j=1</p>
      <p>
        :xij
où i = (i1; :::; ik+1) est une combinaison appartenant
à l’ensemble Cnk+1 des combinaisons de k + 1 éléments
de J1; nK. On rajoute l’encodage proposé par Bailleux &amp;
Boufkhad dans [
        <xref ref-type="bibr" rid="ref4">3</xref>
        ] (BBnk1; k2 ). On note que les auteurs
précités ne donnent pas d’expression explicite de leur
encodage mais décrivent plutôt un algorithme permettant de
le construire.
      </p>
      <p>
        D’autres encodages de la littérature [
        <xref ref-type="bibr" rid="ref16">15</xref>
        ] ne sont pas
considérés car ils ne satisfont pas la condition de performance
relative à la propagation unitaire décrite initalement dans
[
        <xref ref-type="bibr" rid="ref4">3</xref>
        ] (i.e. il ne permettent pas de vérifier la contrainte sur
une valuation partielle des variables xi).
      </p>
      <p>
        Par ailleurs, par manque de temps, nous n’avons pas
intégré ici d’encodage à base de réseaux [
        <xref ref-type="bibr" rid="ref2 ref3 ref8">1, 2, 7</xref>
        ]. En
effet, nous souhaitons d’abord vérifier que la génération de
tels encodages est bien linéaire en leur nombre total de
clauses (ou de littéraux), de manière à ce que la
comparaison soit valable. Ce travail reste donc à compléter sur
ce point. En effet, de tels encodages peuvent comporter
un nombre total de clauses inférieur à ceux des encodages
considérés ici pour un certain nombre de valeurs de n et k.
Ceci est notamment le cas de l’encodage de la contrainte
k(x1; :::; xn) proposé par Asín et al. dans [
        <xref ref-type="bibr" rid="ref3">2</xref>
        ] dont le
nombre total de clauses est égal à :
3m+6mK+ 43 mK log2(K)+ 34 mK log2(K) 3K
      </p>
      <p>
        Le tableau 1 donne le nombres de clauses (avec le détail en
fonction de la taille en nombre de littéraux de ces clauses)
ainsi que le nombre de variables auxilaires pour chacun de
ces encodages. Les valeurs figurant dans ce tableau ont été
recalculées à partir des descriptions de ces encodages dans
les articles précités [
        <xref ref-type="bibr" rid="ref13 ref4">12, 3</xref>
        ] ainsi que le présent article.
Dans la suite de cet article, on utilise les informations
de ce tableau pour permettre de choisir l’encodage le
mieux adapté aux différents cas étudiés. On fera également
usage de la règle suivante pour obtenir un encodage d’une
contrainte k(x1; :::; xn) en considérant l’encodage pour
la contrainte k(x1; :::; xn) via l’utilisation de la règle
suivante :
k(x1; :::; xn) ()
(n
k)(:x1; :::; :xn)
(1)
De même, on pourra obtenir un encodage de la contrainte
= k(x1; :::; xn) en combinant différents encodages via
l’utilisation de la constation suivante :
= k(x1; :::; xn) () (
k(x1; :::; xn)^
k(x1; :::; xn))
(2)
3 et k2 = 23 (nJk+21;k)1.J
      </p>
      <p>;
2 et k2 = 23 (nJk+21;k)1.J
;</p>
      <p>;
8 et k 2</p>
      <p>;
13 et k 2</p>
      <p>;
30 et k 2</p>
      <p>N nk
J1; nJ
2. Les valeurs données ici sont exactes si n est une puissance de 2.
On remarque d’abord que pour une telle contrainte,
l’encodage SeqU nk est clairement toujours plus performant
que l’encodage SeqBnk donc on peut exclure ce
dernier de notre comparaison. Par contre, en utilisant (1),
on peut considérer l’encodage SeqBnn k appliqué à
(:x1; :::; :xn). On note SeqB:nn k cet encodage.
On cherche donc à comparer les encodages N nk, SeqU nk,
SeqB:nn k, BBn0; k. Une analyse complète des
différents nombres totaux de clauses pour chacun de ces
encodages permet de déterminer l’encodage offrant le plus petit
nombre de clauses en fonction de n et k. On a réalisé cette
analyse ici et regroupé les résultats dans le tableau 2. Ce
tableau décrit, en fin de compte, une partition de l’ensemble
des valeurs potentielles de n et k en 4 parties, chacune
correspondant aux valeurs de n et k pour lesquelles
l’encodage en colonne est optimal (pour le critère du nombre de
clauses considéré ici).</p>
      <p>SeqU nk</p>
      <p>;
J1; k1J
où k1 = n
J1; k1J
où k1 = n
J1; k2J
où k1 = n
J1; k2J
où k1 = n</p>
      <p>Conditions sur n et k par encodage</p>
      <p>BBn0; k SeqB:nn k
n</p>
      <p>5 et k 2
3.
2.
;
8
;
n
n</p>
      <p>;
7 et k 2</p>
      <p>;
10 et k 2</p>
      <p>;
11 n 27 et k 2</p>
      <p>; Jk2; k1J
2 et k2 = l 10n2 3n 3 m.</p>
      <p>3(5n 6)
28 n 148 et k 2</p>
      <p>; Jk2; k1J
1 et k2 = l 10n2 3n 3 m.</p>
      <p>3(5n 6)
n et k 2</p>
      <p>N nk
J1; nJ
TABLE 3 – Encodage de k(x1; :::; xn) donnant le
nombre total minimal de littéraux en fonction de n et k
Le tableau 2 permet de choisir un encodage en fonction du
nombre de clauses de cet encodage mais il ne prend pas
en compte la taille de ces clauses (i.e. le nombre de
littéraux par clause). Or la taille des clauses dans une contrainte
CNF peut avoir une influence importante sur la rapidité
d’un solveur SAT sur cette contrainte. Comme
l’évaluation d’une valuation d’une contrainte CNF est linéaire par
rapport à son nombre total de littéraux, on pourrait
également considérer le nombre total de littéraux de chacun de
encodages plutôt que leur nombre de clauses comme
critère pour choisir un encodage. Même si le nombre total de
clauses est généralement utilisé comme critère de
comparaison des encodages dans l’état de l’art précité, on penche
plutôt pour l’utilisation du nombre total de littéraux. En
tout état de cause, on présentera systèmatiquement par la
suite les valeurs obtenues pour chacun de ces deux critères.
Le tableau 3 permet de déterminer l’encodage avec le plus
petit nombre total de littéraux.
Dans cette section, on compare 5 encodages pour la
contrainte k(x1; :::; xn). Par l’équivalence (1), on
ob37 n et k 2
oùJ1k;13J= l n2J32;nk2loJg2(n) Jnk+2;1km1J</p>
      <p>2(n 1)
et k2 = l n2+2n log2(n) 2n 2 m.</p>
      <p>4(n 1)
N:nn k
tient bien la contrainte souhaitée en appliquant les
encodages N nn k, SeqU nn k et SeqBnn k à (:x1; :::; :xn).
On note respectivement N :nn k, SeqU :nn k et SeqB:nn k
ces trois encodages. On considère par ailleurs les deux
encodages SeqBnk et BBnk; n.</p>
      <p>Comme précédemment, on détermine les encodages
donnant le nombre total minimal de clauses (tableau 4) ainsi
que les encodages donnant le nombre total minimal de
littéraux (5) en fonction de n et k. On remarque que, dans ce
cas, c’est l’encodage SeqB:nn k qui est écarté
systématiquement.</p>
      <p>Contrainte = k(x1; :::; xn)
Dans cette section, on compare 7 encodages différents de =
k(x1; :::; xn) parmi lesquels 2 sont des encodages mixtes
entre deux encodages différents. Il s’agit des encodages :
1. BB=nk (i.e. BBnk; k) ;
2. SeqB=nk ;
3. SeqB=:nn k ;
4. SeqU=nk (i.e. SeqU nk et SeqU :nn k) ;
5. N=nk (i.e. N nk et N :nn k) ;
6. N S=nk (i.e. N nk et SeqU :nn k) ;
7. SN=nk (i.e. SeqU nk et N :nn k).</p>
      <p>Comme dans les deux sections précédentes, on a determiné
les encodages donnant le nombre total de clauses minimal
en fonction de n et k ainsi que celui donnant le nombre
total de littéraux minimal en fonction des mêmes paramètres.
Chacun de ces résultats étant difficilement synthétisable en
un seul tableau, on renvoie aux annexes pour le détail pour
tous les entiers n 2 J6; 17K.</p>
      <p>Encodage
Pour n 5, c’est l’encodage naïf N=nk qui donne les plus
petits nombres de clauses et de littéraux quel que soit k.
Les deux tableaux 6 et 7 donnent les résultats pour n 18.
On remarquera que les encodages SeqU=nk et N=nk en sont
absents. Par ailleurs, on a indiqué, pour chaque encodage,
la limite de la proportion à n donné de valeurs différentes
de k pour laquelle cet encodage est optimal lorsque n tend
vers l’infini.
SN=nk k = 1
SeqB=nk 2 k &lt; k2</p>
      <p>BB=nk k2 k &lt; k1
SeqB=:nn k k1 k &lt; n 1</p>
      <p>N S=nk k = n 1
où k1 = l 7n2 6n log2(n) 6n+1 m</p>
      <p>10n 9
et k2 = l 3n2+6n log2(n) 3n 1 m.</p>
      <p>10n 9
TABLE 7 – Encodage de = k(x1; :::; xn) donnant le
nombre total minimal de littéraux en fonction de k pour
n 18
3.5
On étudie ici le cas d’une contrainte donnant un intervalle.
On compare 7 encodages de cette contrainte, correspondant
aux cas généraux des encodages de = k(x1; :::; xn) de la
section précédente. Il s’agit des encodages :
1. BBnk1; k2 ;
2. SeqBnk1; k2 ;
3. SeqB:nn k2; n k1 ;
4. SeqU nk1; k2 (i.e. SeqU nk2 et SeqU :nn k1 ) ;
5. N nk1; k2 (i.e. N nk2 et N :nn k1 ) ;
6. SN nk1; k2 (i.e. SeqU nk2 et N :nn k1 ) ;
7. N Snk1; k2 (i.e. N nk2 et SeqU :nn k1 ).</p>
      <p>On ne fait pas ici une comparaison exhaustive de toutes
les valeurs possibles de k et n comme on a pu le faire
pour les contraintes précédentes car cela nous semble trop
fastidieux et difficilement exposable de manière concise.
On donne simplement les expressions des nombres totaux
de clauses et nombres totaux de littéraux pour chacun de
ces encodages. Ces expressions peuvent être évaluées au
cas par cas pour déterminer une valeur minimale et choisir
l’encodage associé lorsque n est faible.</p>
      <sec id="sec-3-1">
        <title>SeqSBeq:Unnnkk12;; kn2 k1</title>
        <p>N nk1; k2
SN nk1; k2
N Snk1; k2</p>
        <p>Nombre total de clauses
n2 + 2n log2(n) + 2n k2 + k1
4nk2 + 3n 3k2 + 1
4n2 4nk1 + 3k1 + 1
2n2 + 2n(k2 k1) n 3(k2</p>
        <p>n n
k1n 1 +k2 +2n1k2++kn1 1
k2n+1 + 2n2 2nk1</p>
        <p>3k2 1
2n + 3k1
2
1
Sinon, en dehors de certains effets de bord quand k1 2
ou bien k2 n 2, on peut voir que, pour n
suffisamment grand, ce sont les trois premiers encodages qui sont
les plus performants. On peut alors utiliser le protocole
sui</p>
      </sec>
      <sec id="sec-3-2">
        <title>SeqSBeq:Unnnkk12;; kn2 k1</title>
        <p>Nnk1; k2
SN nk1; k2
N Snk1; k2
(n
Dans cette section, on considère un sous-ensemble K =
fk1; :::; kmg J0; nK avec m 2 et k1 &lt; k2 &lt; ::: &lt; km.
Le cas général d’une contrainte d’appartenance du
cardinal à un sous-ensemble K se distingue entièrement des cas
précédents. En effet, la proposition k 2 K est équivalente
m
à la disjonction W [k = ki]. Ainsi, à part le cas
particui=1
lier d’un intervalle traité précédemment, on ne peut pas
se ramener directement à une conjonction des encodages
CNF décrits précédemment. Or obtenir une contrainte CNF
à partir d’une disjonction de contraintes CNF nécessite une
opération supplémentaire. Effectuer cette opération est
prohibitif si l’on considère directement des disjonctions des
encodages précédents. Toutefois, on peut également
considérer ces disjonctions au sein d’un encodage séquentiel
bidirectionnel unique ce qui permet de rendre cette opération
tout à fait envisageable.</p>
        <p>En effet, la contrainte suivante est bien un encodage de la
contrainte 2 K(x1; :::; xn).</p>
        <p>
          SeqB#n ^
m
_ (sn;ki ^ :sn;ki+1)
i=1
!
(4)
Cette encodage n’est pas une contrainte CNF mais on peut
se ramener à une contrainte CNF équisatisfaisable
facilement en introduisant m variables supplémentaires y0,
..., ym 1 [
          <xref ref-type="bibr" rid="ref9">8</xref>
          ]. On définit ainsi l’encodage SeqBn de la
2K
contrainte 2 K(x1; :::; xn) comme étant la contrainte CNF
ci-dessous :
SeqB#n
^
^
^
m
V
i=1
m
V
i=1
y0
sn;ki _ :yi 1 _
:sn;ki+1 _ :yi 1 _
        </p>
        <p>!!
m 1
W yj
j=i
(SeqBn )
2K
!!
(5)
(6)
Cette contrainte a un nombre total de clauses égal à :
4nkm + 3n</p>
        <p>3km + 2m
et un nombre total de littéraux égal à :
10nkm + 7n
9km + m2 + 3m
2
Enfin, on peut remarquer que l’encodage SeqBn (où K
2K
est le complèmentaire de K) appliqué à (:x1; :::; :xn)
donne également la contrainte 2 K(x1; :::; xn). On note
SeqB:n cet encodage. Il peut éventuellement être plus
perfor2mKant que l’encodage précédent selon K. Son nombre
total de clauses et son nombre total de littéraux
s’obtiennent en remplaçant km par max(K) et m par n m
dans (5) et (6).</p>
        <p>Le pire des cas est atteint pour une contrainte de type k
pair. On a alors un nombre de clauses de l’ordre de 4n2 et
un nombre de littéraux de l’ordre de 10:5n2 ce qui est tout à
fait raisonnable. Par ailleurs, à notre connaissance, il s’agit
du seul encodage CNF de la littérature de la contrainte 2
K(x1; :::; xn).
4</p>
      </sec>
    </sec>
    <sec id="sec-4">
      <title>Conclusion</title>
      <p>Lorsque l’on recherche un algorithme optimisé pour un
problème donné, il est rare de découvrir un seul algorithme
qui soit le plus optimisé pour chacune des occurrences de
ce problème. Pour le problème d’une résolution CNF-SAT
d’une contrainte de cardinalité, on peut remarquer que
chacun des encodages d’une contrainte de cardinalité
considérés dans cet article est préférable aux autres pour au moins
quelques valeurs différentes de k et n. Par ailleurs, les
comportements des différentes solutions à l’infini ne préjugent
en rien quant à leurs comportements en faible dimension.
Par exemple dans le cas des contraintes k(x1; :::; xn)
et k(x1; :::; xn), l’encodage proposé par Bailleux et
Boufkhad est préférable (selon le critère du nombre total
de littéraux) dans environ 10% des cas lorsque n est très
grand mais n’est préférable en aucun cas lorsque n &lt; 149.
Afin de pouvoir déterminer l’encodage réellement le mieux
adapté à une contrainte et des paramètres donnés, il est
nécessaire de passer par une étude exhaustive des cas comme
cela a été réalisé dans cet article.</p>
      <p>On pourrait objecter que, si n est petit alors la taille de
l’encodage le sera également et qu’en conséquence, même
si on reste loin de l’optimum possible, on pourra négliger
l’accroissement. Cet argument ne tient toutefois pas
longtemps car un gain fixe sur une opération peut être non
négligeable, d’autant plus si cette opération est répétée de
nombreuses fois au cours d’un même processus.</p>
      <p>Par ailleurs, le nouvel encodage séquentiel bidirectionnel
qui est proposé dans cet article offre une performance
nettement améliorée dans certains cas ainsi que des
perspectives nouvelles.</p>
      <p>
        En effet, dans le cas d’une contrainte de type =
k(x1; :::; xn), les nombres totaux de clauses et de littéraux
sont au mieux quadratiques en n pour les autres encodages
et ceci quel que soit k. Toutefois, dans un certain nombre de
problèmes, k est fixé indépendamment de n. Les nombres
totaux de clauses et de littéraux de l’encodage séquentiel
bidirectionnel sont alors linéaires en n. Cet encodage a
ainsi pu être mis à profit dans le cas de la résolution SAT
d’un problème d’emploi du temps en BTS [
        <xref ref-type="bibr" rid="ref7">6</xref>
        ] qui comporte
un certain nombre de contraintes de type = 3(x1; :::; xn).
Cet encodage offre également de nouvelles perspectives via
son application aux contraintes de type 2 K(x1; :::; xn)
pour lesquelles il n’existait pas avant, à notre connaissance,
d’encodage performant.
      </p>
      <p>
        Enfin, on peut noter que sa présentation explicite
(semblable à celle de l’encodage séquentiel dans [
        <xref ref-type="bibr" rid="ref13">12</xref>
        ] et qui a
sûrement contribué à sa popularité) en permet une
implémentation directe.
      </p>
      <p>
        Le travail de recherche présenté dans cet article est d’ordre
théorique. Si les critères du nombre total de clauses ou du
nombre total de littéraux sont généralement pertinents, ils
ne suffisent pas à déterminer l’encodage le mieux adapté
qui pourra dépendre non seulement du problème considéré
mais également du solveur utilisé. Il appelle donc d’autres
travaux qui permettront de mettre en pratique (tels que [
        <xref ref-type="bibr" rid="ref7">6</xref>
        ])
et de valider ces résultats. Il sera également prolongé de
manière à intégrer au processus de choix des encodages à
base de réseaux dont l’encodage de k(x1; :::; xn) défini
dans [
        <xref ref-type="bibr" rid="ref3">2</xref>
        ].
      </p>
      <p>Annexe
5
k
Les tableaux 10 et 11 donnent, en fonction de k et n, les
encodages de = k(x1; :::; xn) pour n 2 J6; 17K ayant un
TABLE 11 – Encodage de la contrainte = k(x1; :::; xn)
donnant le nombre total minimal de littéraux pour n 2
J6; 17K
nombre total minimal de clauses et de littéraux
respectivement. Les encodages sont indiqués dans le tableau par un
numéro qui correspond à leur numérotation dans la section
3.4.</p>
    </sec>
    <sec id="sec-5">
      <title>Références</title>
    </sec>
  </body>
  <back>
    <ref-list>
      <ref id="ref1">
        <mixed-citation>
          <source>36 et k 2 36 et k 2</source>
        </mixed-citation>
      </ref>
      <ref id="ref2">
        <mixed-citation>
          [1]
          <string-name>
            <given-names>R.</given-names>
            <surname>Asín</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Nieuwenhuis</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Oliveras</surname>
          </string-name>
          , and E. Rodríguez-Carbonell.
          <article-title>Cardinality networks and their applications</article-title>
          .
          <source>In International Conference on Theory and Applications of Satisfiability Testing</source>
          , pages
          <fpage>167</fpage>
          -
          <lpage>180</lpage>
          . Springer,
          <year>2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref3">
        <mixed-citation>
          [2]
          <string-name>
            <given-names>R.</given-names>
            <surname>Asín</surname>
          </string-name>
          ,
          <string-name>
            <given-names>R.</given-names>
            <surname>Nieuwenhuis</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Oliveras</surname>
          </string-name>
          , and E. Rodríguez-Carbonell.
          <article-title>Cardinality networks : a theoretical and empirical study</article-title>
          .
          <source>Constraints</source>
          ,
          <volume>16</volume>
          (
          <issue>2</issue>
          ) :
          <fpage>195</fpage>
          -
          <lpage>221</lpage>
          ,
          <year>2011</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref4">
        <mixed-citation>
          [3]
          <string-name>
            <given-names>O.</given-names>
            <surname>Bailleux</surname>
          </string-name>
          and
          <string-name>
            <given-names>Y.</given-names>
            <surname>Boufkhad</surname>
          </string-name>
          .
          <article-title>Efficient cnf encoding of boolean cardinality constraints</article-title>
          .
          <source>In International conference on principles and practice of constraint programming</source>
          , pages
          <fpage>108</fpage>
          -
          <lpage>122</lpage>
          . Springer,
          <year>2003</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref5">
        <mixed-citation>
          [4]
          <string-name>
            <given-names>O.</given-names>
            <surname>Bailleux</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Y.</given-names>
            <surname>Boufkhad</surname>
          </string-name>
          , and
          <string-name>
            <given-names>O.</given-names>
            <surname>Roussel</surname>
          </string-name>
          .
          <article-title>A translation of pseudo-boolean constraints to sat</article-title>
          .
          <source>Journal on Satisfiability, Boolean Modeling and Computation</source>
          ,
          <volume>2</volume>
          :
          <fpage>191</fpage>
          -
          <lpage>200</lpage>
          ,
          <year>2006</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref6">
        <mixed-citation>
          [5]
          <string-name>
            <given-names>O.</given-names>
            <surname>Bailleux</surname>
          </string-name>
          ,
          <string-name>
            <given-names>Y.</given-names>
            <surname>Boufkhad</surname>
          </string-name>
          , and
          <string-name>
            <given-names>O.</given-names>
            <surname>Roussel</surname>
          </string-name>
          .
          <article-title>New encodings of pseudo-boolean constraints into cnf</article-title>
          .
          <source>In International Conference on Theory and Applications of Satisfiability Testing</source>
          , pages
          <fpage>181</fpage>
          -
          <lpage>194</lpage>
          . Springer,
          <year>2009</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref7">
        <mixed-citation>
          [6]
          <string-name>
            <given-names>T.</given-names>
            <surname>Delacroix</surname>
          </string-name>
          .
          <article-title>Planifier l'épreuve e5 à l'aide d'un solveur sat</article-title>
          .
          <source>In APIA, Conférence Nationale sur les Applications Pratiques de l'Intelligence Artificielle</source>
          ,
          <year>2018</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref8">
        <mixed-citation>
          [7]
          <string-name>
            <given-names>N.</given-names>
            <surname>Eén</surname>
          </string-name>
          and
          <string-name>
            <given-names>N.</given-names>
            <surname>Sorensson</surname>
          </string-name>
          .
          <article-title>Translating pseudoboolean constraints into sat</article-title>
          .
          <source>Journal on Satisfiability, Boolean Modeling and Computation</source>
          ,
          <volume>2</volume>
          :
          <fpage>1</fpage>
          -
          <lpage>26</lpage>
          ,
          <year>2006</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref9">
        <mixed-citation>
          [8]
          <string-name>
            <surname>ENS. Concours d'</surname>
          </string-name>
          admission - composition
          <string-name>
            <surname>d'</surname>
          </string-name>
          informatique - a
          <string-name>
            <surname>-</surname>
          </string-name>
          ,
          <year>2016</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref10">
        <mixed-citation>
          [9]
          <string-name>
            <given-names>A. M.</given-names>
            <surname>Frisch</surname>
          </string-name>
          and
          <string-name>
            <given-names>P. A.</given-names>
            <surname>Giannaros</surname>
          </string-name>
          .
          <article-title>Sat encodings of the at-most-k constraint. some old, some new, some fast, some slow</article-title>
          .
          <source>In Proc. of the Tenth Int. Workshop of Constraint Modelling and Reformulation</source>
          ,
          <year>2010</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref11">
        <mixed-citation>
          [10]
          <string-name>
            <given-names>J.</given-names>
            <surname>Marques-Silva</surname>
          </string-name>
          and
          <string-name>
            <given-names>I.</given-names>
            <surname>Lynce</surname>
          </string-name>
          .
          <article-title>Towards robust cnf encodings of cardinality constraints. Principles and Practice of Constraint Programming-CP</article-title>
          <year>2007</year>
          , pages
          <fpage>483</fpage>
          -
          <lpage>497</lpage>
          ,
          <year>2007</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref12">
        <mixed-citation>
          [11]
          <string-name>
            <surname>MiniZinc</surname>
          </string-name>
          . Minizinc challenge
          <year>2017</year>
          results,
          <year>2017</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref13">
        <mixed-citation>
          [12]
          <string-name>
            <given-names>C.</given-names>
            <surname>Sinz</surname>
          </string-name>
          .
          <article-title>Towards an optimal cnf encoding of boolean cardinality constraints</article-title>
          .
          <source>CP</source>
          ,
          <volume>3709</volume>
          :
          <fpage>827</fpage>
          -
          <lpage>831</lpage>
          ,
          <year>2005</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref14">
        <mixed-citation>
          [13]
          <string-name>
            <given-names>P. J.</given-names>
            <surname>Stuckey</surname>
          </string-name>
          ,
          <string-name>
            <given-names>T.</given-names>
            <surname>Feydy</surname>
          </string-name>
          ,
          <string-name>
            <given-names>A.</given-names>
            <surname>Schutt</surname>
          </string-name>
          , G. Tack, and
          <string-name>
            <given-names>J.</given-names>
            <surname>Fischer</surname>
          </string-name>
          .
          <source>The minizinc challenge 2008-2013. AI Magazine</source>
          ,
          <volume>35</volume>
          (
          <issue>2</issue>
          ) :
          <fpage>55</fpage>
          -
          <lpage>60</lpage>
          ,
          <year>2014</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref15">
        <mixed-citation>
          [14]
          <string-name>
            <given-names>N.</given-names>
            <surname>Tamura</surname>
          </string-name>
          ,
          <string-name>
            <given-names>M.</given-names>
            <surname>Banbara</surname>
          </string-name>
          , and
          <string-name>
            <given-names>T.</given-names>
            <surname>Soh</surname>
          </string-name>
          .
          <article-title>Compiling pseudo-boolean constraints to sat with order encoding</article-title>
          .
          <source>In Tools with Artificial Intelligence (ICTAI)</source>
          ,
          <year>2013</year>
          IEEE 25th International Conference on, pages
          <fpage>1020</fpage>
          -
          <lpage>1027</lpage>
          . IEEE,
          <year>2013</year>
          .
        </mixed-citation>
      </ref>
      <ref id="ref16">
        <mixed-citation>
          [15]
          <string-name>
            <given-names>J. P.</given-names>
            <surname>Warners</surname>
          </string-name>
          .
          <article-title>A linear-time transformation of linear inequalities into conjunctive normal form</article-title>
          .
          <source>Information Processing Letters</source>
          ,
          <volume>68</volume>
          (
          <issue>2</issue>
          ) :
          <fpage>63</fpage>
          -
          <lpage>69</lpage>
          ,
          <year>1998</year>
          .
        </mixed-citation>
      </ref>
    </ref-list>
  </back>
</article>