dans le Bundeswettberweb Infomatik 2010/2011, il y avait un problème intéressant:
Pour fixe , trouver un k minimal et une carte φ : { ( i , j ) | i ≤ j ≤ n } → { 1 , … , k } , de sorte qu'il n'y a pas de triple ( i , j ) , ( i + l , j ) , ( i + l , j + l ) avec φ ( i .
À savoir, nous recherchons la quantité minimale de couleurs pour un triangle, de sorte qu'il n'y ait pas de sous-triangle équilatéral de couleur uniforme (l'image suivante montre une coloration invalide car les sommets en surbrillance forment un sous-triangle équilatéral de couleur uniforme):
En fait, ils ont demandé un raisonnablement petit pour n = 1000 et dans la solution (écrite en allemand), ils ont noté qu'une approche gourmande donne une coloration à 27 couleurs pour n = 1000 , qui peut être réduite à 15 en randomisant les couleurs jusqu'à ce qu'un une solution valide est trouvée.
Je m'intéresse aux solutions exactes (pour les petits ). La solution dit que le retour arrière donne 2 couleurs suffisantes pour n ∈ { 2 , 3 , 4 } et 3 sont suffisantes pour 5 ≤ n ≤ 17 , où le retour arrière est déjà très lent pour n = 17 .
J'ai d'abord essayé d'utiliser une formulation ILP et Gurobi pour obtenir des résultats pour , mais c'était trop lent (déjà pour n = 17 ). Ensuite, j'ai utilisé un solveur SAT , car j'ai remarqué qu'il existe une formulation simple en tant qu'instance SAT.
Avec cette approche, j'ai pu générer une solution avec couleurs pour n = 18 en 10 minutes:
Mais décider si couleurs suffisent pour n = 19 c'est déjà trop lent. Existe-t-il une approche différente qui donne des solutions exactes pour n ≥ 19 ? Nous ne pouvons certainement pas nous attendre à un algorithme polynomial.