Bon, j'ai réussi à réduire le temps de recherche à moins de 2 minute dans les cas favorables.
Pour ce faire, j'ai enlevé des possibilités de recherche lorsque les scores des joueurs dans certaines épreuves étaient trop faibles par rapport aux autres. Ma méthode est un peu brutale et elle peut entraîner l'échec de la recherche. Il faudrait voir pour ton cas.
Voici le code qui fonctionne avec SWI-Prolog version 6.5.3.
?- time(composition).
Score max 184
[12,12,18,0,15,13,19,10,16,14] [0,0,0,0,0,0,1,0,0,0]
[6,0,8,18,7,7,4,0,2,18] [0,0,0,1,0,0,0,0,0,0]
[1,17,4,0,17,2,10,9,19,18] [0,0,0,0,0,0,0,0,1,0]
[12,9,13,10,6,7,2,16,17,16] [0,0,0,0,0,0,0,1,0,0]
[10,0,15,8,2,4,15,11,15,16] [0,0,0,0,0,0,0,0,0,0]
[9,19,7,10,2,16,0,1,4,10] [0,1,0,0,0,0,0,0,0,0]
[12,15,1,1,3,7,8,9,15,15] [0,0,0,0,0,0,0,0,0,0]
[15,10,15,0,6,11,18,5,3,0] [0,0,0,0,0,0,0,0,0,0]
[17,9,18,7,5,1,17,4,18,3] [0,0,1,0,0,0,0,0,0,0]
[10,10,1,15,8,19,14,2,19,11] [0,0,0,0,0,1,0,0,0,0]
[8,0,14,7,3,11,10,10,12,18] [0,0,0,0,0,0,0,0,0,0]
[11,6,8,6,16,11,18,0,17,15] [0,0,0,0,0,0,0,0,0,0]
[11,17,7,2,17,9,2,13,9,19] [0,0,0,0,0,0,0,0,0,1]
[5,16,11,2,7,16,4,9,14,5] [0,0,0,0,0,0,0,0,0,0]
[0,15,8,17,18,1,3,15,12,11] [0,0,0,0,0,0,0,0,0,0]
[4,1,16,12,11,10,1,14,5,8] [0,0,0,0,0,0,0,0,0,0]
[6,18,16,4,18,15,8,14,14,12] [0,0,0,0,1,0,0,0,0,0]
[19,12,17,9,15,9,14,12,16,18] [1,0,0,0,0,0,0,0,0,0]
[1,1,1,1,0,1,0,0,1,1,0,0,1,0,0,0,1,1]
% 978,396,521 inferences, 100.355 CPU in 100.392 seconds (100% CPU, 9749312 Lips)