Tournois et Sage

Bonjour et bonnes fêtes !
Je bute sur un petit problème... je suis allé voir ça : http://www.les-mathematiques.net/phorum/read.php?34,1612028 et plusieurs autres pour tenter de trouver tout seul... mais bon bof... Je vois d'ailleurs que mon problème et mes contraintes :
15 équipes
5 lieux par dates à chaque date se fait un tournoi à 3
7 dates

Donc ce qui donnerait :
Date 1 (ou tour 1) :
1, 2, 3
4, 5, 6
7, 8, 9
10, 11, 12
13, 14, 15

date 2 :
15, 4, 7
12, 5, 8
3, 6, 9
10, 13, 1
11,14,2

L'idée... bien sûr, c'est que tout le monde rencontre tout le monde et 1 seule fois.

Quand je le fais de manière naïve (avec un tableur et à la main), les 6 premières journées passent et la dernière (ou les 2 dernières) patatra.

Question :
Existe-t-il un tel tirage ? (je ne suis pas un pro de la combinatoire, j'ai vu que certains avaient des formules qui envoyaient du lourd pour au moins prouver ça)

J'ai dénombré 455 triplets différents (bon ça c'était facile).

Je n'arrive pas à clairement exprimer la solution
7 tirages dont la somme fait 105 (je numérote de 0 à 14) ET pour chacune des équipes, sur l'ensemble des solutions, 1 seule rencontre avec une autre.

Si quelqu'un voit du code Sage je prends aussi, au moins pour le comprendre.

Réponses

  • Autre manœuvre via des contraintes de SAGE :
    d'après le code là : http://www.les-mathematiques.net/phorum/read.php?34,1724300
    j'essaie de modifier... mais c'est moins simple de rajouter une dimension :)
  • Voici (peut-être) une solution (les 15 équipes sont numérotées de 0 à 14, chaque ligne correspond à un jour, chaque triplet à un lieu et un tournoi).
    [[(11, 7, 5), (14, 12, 8), (13, 6, 3), (10, 9, 2), (4, 1, 0)],
     [(13, 12, 11), (8, 3, 1), (6, 5, 2), (14, 10, 4), (9, 7, 0)],
     [(11, 10, 3), (12, 5, 0), (13, 9, 1), (14, 7, 2), (8, 6, 4)],
     [(11, 9, 4), (13, 8, 2), (12, 7, 3), (10, 6, 0), (14, 5, 1)],
     [(12, 10, 1), (3, 2, 0), (14, 11, 6), (9, 8, 5), (13, 7, 4)],
     [(7, 6, 1), (13, 10, 5), (14, 9, 3), (12, 4, 2), (11, 8, 0)],
     [(12, 9, 6), (14, 13, 0), (10, 8, 7), (11, 2, 1), (5, 4, 3)]]
    
    Si ça marche, peut-être que ce code intéressera quelqu'un.
    E = 15  # équipes
    T = [(i,j,k) for i in range(2,15) for j in range(1,i) for k in range(j)]
    L = 5   # lieux
    D = 7   #dates
    pb = MixedIntegerLinearProgram()
    # déclaration d'un tableau d'inconnues à valeurs dans {0,1}
    # sens : A[t,l,d] = 1 ssi à la date d, les trois équipes du triplet t s'affrontent dans le lieu l
    A  = pb.new_variable(binary=True)
    
    for d in range(D):
        for l in range(L):
            pb.add_constraint(add(A[t,l,d] for t in T)<=1)
        for i in range(E):
            pb.add_constraint( add(A[t,l,d] for l in range(L) for t in T if i in t) <=1 )
    
    for i in range(E):
        for j in range(E):
            pb.add_constraint(add( add(A[(i,j,k),l,d] for k in range(j)) \
                                 + add(A[(i,k,j),l,d] for k in range(j+1,i)) \
                                 + add(A[(k,i,j),l,d] for k in range(i+1,E)) for l in range(L) for d in range(D)) ==1 )
    pb.solve()
    A = pb.get_values(A)
    def f(l,d):
        return [t for t in T if A[t,l,d]==1][0]
    
    [[f(l,d) for l in range(L)] for d in range(D)]
    
  • MERCI !!
    Je vais regarder de plus près ta programmation. Ça me resservira dans tous les cas.
    JB
Connectez-vous ou Inscrivez-vous pour répondre.