Ajouter une condition a une regle
Salut a tous,
j'ai deux classes définis comme suit :
classe Rule a deux champs de type
Code:
1 2 3 4 5 6
|
.
.
.
Test m_test
Rule m_next |
et la deuxième c'est Test ( un ensemble de condition pour la regle )
Code:
1 2 3 4
|
Attribut m_attr ;
int m_value;
Test m_next |
donc une règle Rule a des testes de Type Test tel que chaque test a (attr = value) et m_next c'est le test suivant et le dernier test a comme m_next "null" ,
j'ai creer une méthode appelée Add1 qui va prendre en paramètre une règle de type Rule et qui va l'ajouter un test ( cette règle peut avoir plusieurs testes et je doit ajouter un a la fin ) voila mon code :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99
|
private List<PrismRule> Add1(PrismRule r, Instances data) throws Exception {
PrismRule CR_rules = addRule(null , new PrismRule(data, 0));
int cl=r.m_classification; // possible value of theClass
Instances E, ruleE;
Test test = null, oldTest = null;
int bestCorrect, bestCovers, attUsed;
Enumeration enumAtt;
getCapabilities().testWithFail(data); // can classifier handle the data?
data = new Instances(data);
data.deleteWithMissingClass();// remove instances with missing class
E = data; // initialize E to the instance set
ruleE = E; // examples covered by this rule
test = new Test();
CR_rules.m_test=test;
// for every attribute not mentioned in the rule
enumAtt = ruleE.enumerateAttributes();
while (enumAtt.hasMoreElements())
{
Attribute attr = (Attribute) enumAtt.nextElement();
if (isMentionedIn(attr, r.m_test)) {continue;}
int M = attr.numValues();
for (int val = 0; val < M; val ++) // ... for each value of this attribute
{
PrismRule cr = addRule(null , new PrismRule(data, r.m_classification));
if (r.m_test == null) {
Test Tst3 =new Test() ;
Tst3.m_attr=attr.index();
Tst3.m_val=val;
cr.m_ruleSize=cr.m_ruleSize+1;
cr.m_test=Tst3;
} else {
int y = r.m_ruleSize;
Test Tstold =new Test() ;
Tstold.m_attr = r.m_test.m_attr;
Tstold.m_val = r.m_test.m_val;
cr.m_test=Tstold;
Test Tst3 =new Test() ;
Tst3.m_attr=attr.index();
Tst3.m_val=val;
cr.m_test.m_next=Tst3;
cr.m_ruleSize=y;
cr.m_ruleSize++;
}
CR.add(cr);
// System.out.println("new added "+cr);
}
}
List<PrismRule> CR1= new ArrayList<PrismRule>();
CR1=CR;
return CR ;
} |
mon probleme c'est que ce code ajout une condition pour une regle qui n as pas de test ou ajoute un test dans la deuxième position , cad si j'ai une règle de type
Code:
teste1 ,teste2 ,test3
et je veux ajouter teste4 ca va me donner , comment je fais ?