print "\t@version: 2.2 date: 28/06/2007 modified by Thomas Leaute" print "\t@version: 2.1 date: 04/05/2007 modified by Thomas Leaute" print "\t@version: 2.0 date: 03/05/2007 modified by Thomas Leaute" print "\t@version: 1.1 date: 02/05/2007 modified by Thomas Leaute" print "\t@version: 1.0 date: 05/03/2007 created by Vincent Schickel-Zuber" print "\t@author: [email protected] date: 05/03/2007" print "\t@copyright: EPFL-IC-IIF-LIA 2007" #------------------------------------------------------------------------------- import copy import libPSC import PSC import libPlan ## contiennent les variables et les contraintes VARS = PSC.Variables() CONTS = PSC.Contraintes() ## contient la liste de tous les etats ETATS = [] ## Une contrainte d'axiome de cadre pour un etat et une proposition donnes class ContrainteAxiomeCadre(libPSC.Contrainte): ## \var varPre # Variable correspondant a la proposition au debut de l'etat ## \var varPost # Variable correspondant a la proposition a la fin de l'etat ## \var varsOp
def run( algo, grille ): # des bugs, oops, debug print "|+| Chargement du probleme" # variable globales global PROBLEME # allez-vous choisir la facile grille A ? if grille=="A": PROBLEME=[[9,X,X,X,X,X,X,X,2], [3,X,7,1,X,X,4,X,8], [X,1,X,X,5,4,X,6,X], [X,X,1,X,X,X,X,7,X], [X,X,4,X,X,X,9,X,X], [X,2,X,X,X,X,8,X,X], [X,8,X,3,2,X,X,4,X], [7,X,3,X,X,6,2,X,1], [4,X,X,X,X,X,X,X,5]] # ou la diabolique grille B ? elif grille=="B": PROBLEME=[[X,X,X,X,X,X,X,X,X], [X,X,7,8,3,X,9,X,X], [X,X,5,X,X,2,6,4,X], [X,X,2,6,X,X,X,7,X], [X,4,X,X,X,X,X,8,X], [X,6,X,X,X,3,2,X,X], [X,2,8,4,X,X,5,X,X], [X,X,X,X,9,6,1,X,X], [X,X,X,X,X,X,X,X,X]] # ou encore une autre ? else: print "|-| Grille" , grille, "non definie" # variables globales global VARS global CONTS # obtient les variables et contraintes du PSC VARS = PSC.Variables() CONTS = PSC.Contraintes() # initialisation de la grille print "|+| Initialisation de la grille" grille = Grille() # ajout des contraintes liees a la grille print "|+| Ajoute les contraintes" grille.genereContraintesLignes() grille.genereContraintesColonnes() grille.genereContraintesSSGrilles() # consistance des noeuds print "|+| Fait la consistance des noeuds" VARS.consistanceDesNoeuds() ##print VARS # consistance des arcs print "|+| Fait la consistance des arcs" CONTS.consistanceDesArcs() ##print CONTS # re-ordonne les noeuds PSC.variableOrdering() # choisit l'algorithme a executer if algo=="FC": sol=PSC.forwardChecking( 0, False, True ) else: sol=PSC.backtrack( 0, False, True ) # imprime la grille une fois l'algorithme lance print grille