Add existing code.
0 parent commit 53a8571a194ffe580b664283c7dc97231613c3be
@Andreas Jaggi Andreas Jaggi authored on 10 Apr 2006
x-way committed on 10 Apr 2006
Showing 15 changed files
View
167
lab4/chainageAvantAvecFiltrage.py 0 → 100755
import match
 
##La variable globale utilsee pour signifier un ECHEC
echec='ECHEC'
 
##Base des faits
##Syntax des faits [['fait1'....],...,['faitn']]
faits = []
 
##Base des regles
## Syntaxe d'une regles [['condition1',...,'conditionn'],'consequence']
regles = []
 
## initialise les 2 bases
def initDBs():
videFaits()
videRegles()
 
 
## FAITS
## vide la base des faits
##faits[:] iter sur tous les elements de faits
def videFaits():
del faits[:]
 
## affiche la base des faits
def afficheFaits():
for x in faits:
print x
 
 
## Ajoute un fait a la base des faits <=> pas deja present dans faits
## @param fait un fait SOUS form d'une liste []
def ajouteFait(fait):
faits.append(fait)
 
#################################################################################
 
## REGLES
## vide la base des regles
##faits[:] iter sur tous les elements de faits
def videRegles():
del regles[:]
#########################################################
 
## affiche la base des faits
def afficheRegles():
for x in regles:
print x
#########################################################
## Ajoute une regles a la base des regles
## @param regle ajoute le regle a liste
def ajouteRegle(regle):
regles.append(regle)
 
## retourne les conditions d'une regle
## @param regle la regle
## @ret la condition de la regle (regle[0])
def conditionsRegle(regle):
return regle[0]
 
## retourne la consequence d'une regle
## @param regle la regle
## @ret la consequence de la regle (regle[1])
def consequenceRegle(regle):
return regle[1]
 
## verifie que le fait verifie le liste de conditions d'une regle
## et retourne la liste d'environemnt reuissie due au substituions ET la liste des conditions restante non verifier par fait
## @param fait le fait ['a', ...,'b']
## @pram conditions les condition d'une regle ['cond1',....,'condn']
## @ret [[{environement1}, ...,{environementn}],[[cond_restant_1_1,...,cond_restant_1_k]],[cond_restant_n_1,...,cond_restant_n_k]]]
def faitSatisfaitUneCondition(fait, conditions):
envs = []
rests = []
for c in conditions:
rc = match.match(fait, c)
if rc != echec:
envs.append(rc)
rl = conditions[:]
rl.remove(c)
rests.append(rl)
return [envs, rests]
 
## verife la validite de la condition en esseyant toues les substituions par les faits de la base
## @param condition la condition a verifier
## @param liste_environements [{...},...,{...}]
## @param faitsDB la liste des faits [[],...,[]]
## @ret la liste des environement possibles [{},...,{}], vide si aucun
def satisfaitUneCondition (condition, listeEnvironements):
r = []
for f in faits:
for e in listeEnvironements:
rc = match.match(f, condition, e)
#if rc == echec:
# rc = {}
# XXX: personal idea
if rc != echec:
r.append(rc)
return r
 
## Verifie qu'une liste de conditions peut etre verifier par les environements existants
## @param conditions la liste de condition a verifier [[],...,[]]
## @param environement {...}
## @param faitsDB la liste des faits [[],...,[]]
## @ret la liste des environement possibles [{},...,{}]; [] si aucun
def satisfaitConditions(conditions,environement):
envlist = [environement]
for c in conditions:
if envlist == []:
return envlist
envlist = satisfaitUneCondition(c, envlist)
return envlist
 
## instantie la consequence d'une regle et retourne une liste de nouveau fait par environemt
## @param proposition la proposition
## @param listeEnvironements la liste des environements [{},....,{}]
## @ret une liste de nouveau faits ['fait1',...,'fait2']
def instantieVariables(proposition, listeEnvironements):
r = []
for e in listeEnvironements:
r.append(match.substitueVariables(proposition, e))
return r
 
## fait le chainage avant avec filtrage
## @param regles les regles a verifer
## @param faits_initiaux les faits initiaux
## @ret la liste des faits deduits
def chainageAvantAvecFiltrage(regles, faits_initiaux):
Q = faits[:]
 
while Q:
q = Q[0]
Q = Q[1:]
if q not in faits:
ajouteFait(q)
afficheFait(q)
for r in regles:
c = conditionsRegle(r)
es = match.filtrage(q, c)
if es != echec:
for e in es:
e2 = satisfaitConditions(c, e)
n = instantieVariables(consequenceRegle(r), e2)
if n not in faits:
Q.append(n)
 
 
#execfile("testFaitSatisfaitUneCondition.py")
#execfile("testSatisfaitUneCondition.py")
#execfile("testSatisfaitConditions.py")
#execfile("testInstantieVariables.py")
execfile("impots2.py")
chainageAvantAvecFiltrage(regles,faits)
 
diff = faits[:]
for item in diff:
if item in result:
diff.remove(item)
 
print diff
View
77
lab4/impots2.py 0 → 100755
 
 
##initialise la DB
print "|+| Chargement du fichier impots2"
initDBs()
 
##ajoute des faits
print "\tAjout des faits",
ajouteFait(['add','0','0','0','0'])
ajouteFait(['add','100','100','0','0'])
ajouteFait(['add','100','0','100','0'])
ajouteFait(['add','200','100','100','0'])
ajouteFait(['add','200','0','200','0'])
ajouteFait(['add','300','100','200','0'])
ajouteFait(['add','50','0','0','50'])
ajouteFait(['add','150','100','0','50'])
ajouteFait(['add','150','0','100','50'])
ajouteFait(['add','250','100','100','50'])
ajouteFait(['add','250','0','200','50'])
ajouteFait(['add','350','100','200','50'])
ajouteFait(['add','100','0','0','100'])
ajouteFait(['add','200','100','0','100'])
ajouteFait(['add','200','0','100','100'])
ajouteFait(['add','300','100','100','100'])
ajouteFait(['add','300','0','200','100'])
ajouteFait(['add','400','100','200','100'])
 
##Paul
ajouteFait(['bas-salaire', 'Paul'])
ajouteFait(['loyer', 'Paul'] )
ajouteFait(['enfants', 'Paul'])
ajouteFait(['long-trajet', 'Paul'])
 
##Marc
ajouteFait(['moyen-salaire', 'Marc'])
ajouteFait(['loyer', 'Marc'] )
ajouteFait(['enfants', 'Marc'])
ajouteFait(['long-trajet', 'Marc'])
 
##Jean
ajouteFait(['haut-salaire', 'Jean'])
ajouteFait(['pas-de-loyer', 'Jean'] )
ajouteFait(['pas-d-enfants', 'Jean'])
ajouteFait(['long-trajet', 'Jean'])
 
print "\tOK"
##afficheFaits()
 
##ajoute des regles
print "\tAjout des regles",
 
##Reduction enfants
ajouteRegle([[['pas-d-enfants', '?x']],['reduc-enfant', '0','?x']])
ajouteRegle([[['enfants', '?x']],['reduc-enfant', '100','?x']])
 
##Reduction loyer
ajouteRegle([[['bas-salaire', '?x'],['loyer', '?x']],['reduc-loyer', '200', '?x']])
ajouteRegle([[['moyen-salaire', '?x'],['loyer', '?x']],['reduc-loyer', '100', '?x']])
ajouteRegle([[['haut-salaire', '?x'],['loyer', '?x']],['reduc-loyer', '0', '?x']])
ajouteRegle([[['bas-salaire', '?x'],['loyer', '?x']],['reduc-loyer', '200', '?x']])
ajouteRegle([[['pas-de-loyer', '?x']],['reduc-enfant', '0','?x']])
 
##Reduction transport
ajouteRegle([[['petit-trajet', '?x']],['reduc-trajet', '0', '?x']])
ajouteRegle([[['reduc-enfant', '0','?x'],['long-trajet', '?x']],['reduc-trajet', '100', '?x']])
ajouteRegle([[['reduc-loyer', '0','?x'],['long-trajet', '?x']],['reduc-trajet', '100', '?x']])
ajouteRegle([[['reduc-enfant', '100','?x'],['reduc-loyer', '100', '?x'],['long-trajet', '?x']],['reduc-trajet', '50', '?x']])
ajouteRegle([[['reduc-enfant', '100','?x'],['reduc-loyer', '200', '?x'],['long-trajet', '?x']],['reduc-trajet', '0', '?x']])
 
##Reduction totale
ajouteRegle([[['reduc-enfant', '?a','?x'],['reduc-loyer', '?b', '?x'],['reduc-trajet','?c', '?x'],['add','?res','?a','?b','?c'] ],['reduc', '?res', '?x']])
print "\tOK"
#afficheRegles()
 
##result
result = [['add', '0', '0', '0', '0'], ['add', '100', '100', '0', '0'], ['add', '100', '0', '100', '0'], ['add', '200', '100', '100', '0'], ['add', '200', '0', '200', '0'], ['add', '300', '100', '200', '0'], ['add', '50', '0', '0', '50'], ['add', '150', '100', '0', '50'], ['add', '150', '0', '100', '50'], ['add', '250', '100', '100', '50'], ['add', '250', '0', '200', '50'], ['add', '350', '100', '200', '50'], ['add', '100', '0', '0', '100'], ['add', '200', '100', '0', '100'], ['add', '200', '0', '100', '100'], ['add', '300', '100', '100', '100'], ['add', '300', '0', '200', '100'], ['add', '400', '100', '200', '100'], ['bas-salaire', 'Paul'], ['loyer', 'Paul'], ['enfants', 'Paul'], ['long-trajet', 'Paul'], ['moyen-salaire', 'Marc'], ['loyer', 'Marc'], ['enfants', 'Marc'], ['long-trajet', 'Marc'], ['haut-salaire', 'Jean'], ['pas-de-loyer', 'Jean'], ['pas-d-enfants', 'Jean'], ['long-trajet', 'Jean'], [['reduc-loyer', '200', 'Paul']], [['reduc-enfant', '100', 'Paul']], [['reduc-loyer', '100', 'Marc']], [['reduc-enfant', '100', 'Marc']], [['reduc-enfant', '0', 'Jean']]]
View
lab4/match.py 0 → 100755
View
lab4/match.pyc 0 → 100644
Not supported
View
lab4/matchTemplate.pyc 0 → 100644
Not supported
View
lab4/testFaitSatisfaitUneCondition.py 0 → 100755
View
lab4/testFiltrage.py 0 → 100755
View
lab4/testInstantieVariables.py 0 → 100644
View
lab4/testMatch.py 0 → 100755
View
lab4/testSatisfaitConditions.py 0 → 100755
View
lab4/testSatisfaitUneCondition.py 0 → 100755
View
lab4/testSubstitueVariables.py 0 → 100755
View
lab4/testUnificateur.py 0 → 100755
View
lab4/testUnifit.py 0 → 100755
View
lab4/unificateur.py 0 → 100755