|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre à l'essai
![]() Inscription : juillet 2008 Messages : 163 ![]() |
Bonjour à tous,
J'ai trois classes d'objets : A, B et C. Chaque objet a 12 variables qui le caractérisent : X, Y, Z, W.... Mais chaque variable est pondérée d'un coefficient. J'obtiens donc ceci (les règles je suppose) SI 0.25X et 0.27Y et 0.29Z ALORS A SI 0.25W et 0.12X ALORS A SI 0.15X et 0.29W ALORS B etc. Ce que je veux faire, c'est de mettre en input les 12 variables d'un objet pour qu'en suite cela me sort sa classe d'appartenance, conformément aux règles déjà mentionnées. Est-ce qu'un "raisonnement" de ce type pourrait aboutir à quelque chose? (Je me suis basé sur Prolog (que je ne connais pas du tout d'ailleurs), parce que je pensais que c'est un raisonnement par logique). classe (A). classe (B). classe (C). variable1(0.27). variable1(0.47). variable1(0.97). variable1(0.17). variable2(0.47). variable2(0.37). variable2(0.27). variable2(0.17). %etc. pour toutes les variables Appartient (classe, variable1,variable2,variable3,variable4,variable5...) % Une sorte de constructeur %Ensuite je saisis mes données (y en a à peu près 1000, c'est pour cela que je demande avant de m'aventurer ) Appartient (A, 0.27,0.17,0.25,0.9,0.1.....). Appartient (B, 0.27,0.17,0.25,0.9,0.1.....). Appartient (C, 0.27,0.17,0.25,0.9,0.1.....). etc. Quand toutes les données sont saisies, j'interroge la console avec un simple Appartient (X, 0.19, 0.23, 0.43.........). %Pour avoir la classe d'appartenance suivant les variables saisies. Je pensais au début que c'était un problème de raisonnement logique, mais là j'ai comme un doute (avec cette histoire de coefficients). Est-ce que cela ne s'apparente pas à de la logique Floue? Si oui connaissez-vous quelques outils qui pourraient m'aider à implémenter tout ça? Merci d'avoir pris la peine de lire tout ça! |
|
|
00
|
|
|
#2 | |
|
Membre émérite
![]() Jean Ingénieur développement logiciels Inscription : mai 2011 Messages : 254 ![]() |
Citation:
Déjà, sur "alors A". Si "alors A" est certain et vrai, çà marchera très bien en logique standard. Le faire marcher en prolog, je ne saurais te dire. Si "alors A", c'est "alors surement que A" ou "A à 80% et un peu de B", çà sera mieux exprimé en logique floue. Pour les préconditions, si 0.25X et 0.27Y, là aussi çà dépend. Si 0.26X et 0.27Y, que se passe t'il? Suis je dans A ou pas? Suis je dans A mais pas autant que si 0.25X et 0.27Y? Si tel est le cas pour la dernière question, c'est mieux exprimé en logique floue. Cà répond à ta question? |
|
|
|
00
|
|
|
#3 |
|
Membre à l'essai
![]() Inscription : juillet 2008 Messages : 163 ![]() |
Alors pour te répondre, je représente le problème sous sa véritable forme :
SI variable1 > 0.27 et variable2 <0.25 et variable3 >0.19 ALORS classe a le ALORS est certain à 100%. Par contre, mon souci actuel, puisque je suis parti sur de la logique (pas floue), c'est que je peux avoir ça : classe (a, variable1>0.1, variable2>0.1, variable3>0.1). et classe (b, variable1>0.1, variable2>0.1, variable3>0.1, variable4>0.1, variable5>0.1). Via la logique (Prolog), cela me classifie mon objet directement en classe a. A ce moment, ne parle-t-on pas de logique floue? |
|
|
00
|
|
|
#4 | |||
|
Membre émérite
![]() Jean Ingénieur développement logiciels Inscription : mai 2011 Messages : 254 ![]() |
Citation:
SI j'ai bien compris, ce qui te manque, c'est Code :
|
|||
|
|
00
|
|
|
#5 |
|
Membre à l'essai
![]() Inscription : juillet 2008 Messages : 163 ![]() |
Plutôt
classe (a, variable1<0.1, variable2>0.1, variable3>0.1,variable4>0.1, variable5>0.1 ) mais cela serait fausser la règle. (variable4 et variable5 n'existent pas dans la première règle) Les deux classes a et b partagent les 3 premières conditions (variable1>0.1, variable2>0.1, variable3>0.1) et là ce cher Prolog me classe tous mes objets de classe b en classe a sans daigner chercher une autre règle qui pourrait mieux les classifier |
|
|
00
|
|
|
#6 | |||
|
Membre émérite
![]() Jean Ingénieur développement logiciels Inscription : mai 2011 Messages : 254 ![]() |
Citation:
pour Code :
Je ne connais pas prolog, je peux juste te dire que ce n'est pas un problème de logique floue. Désolé de ne pas pouvoir t'en apprendre plus... |
|||
|
|
00
|
|
|
#7 |
|
Membre à l'essai
![]() Inscription : juillet 2008 Messages : 163 ![]() |
Tant que ce n'est pas de la logique floue c'est un chantier de moins pour moi
Je me rabattrai sur le forum de Prolog. Merci de ton aide en tous les cas |
|
|
10
|
|
|
#8 | |
|
Expert Confirmé Sénior
![]() Inscription : janvier 2007 Messages : 9 572 ![]() |
à noter (j'ai déjà eu le cas justement avec ce type de tests et un programme PROLOG) que si il y a beaucoup d'éléments PROLOG est très lent pour faire ça, et il est bien plus efficient de cataloguer l'ensemble des valeurs numériques seuils en un tableau, et de tester en C par exemple, ou dans le langage utilisé dans le reste du code, car les conditions sont alors facilement généralisables..
Citation:
Gros avantage aussi en maintenance : un seul langage.. (et PROLOG gère assez mal les grosses listes) (par exemple dans notre cas on est passé de 4h de calcul à 1 seconde...)
__________________
"Un homme sage ne croit que la moitié de ce qu’il lit. Plus sage encore, il sait laquelle". Consultant indépendant. Architecture systèmes complexes. Programmation grosses applications critiques. Ergonomie. C, Fortran, XWindow/Motif, Java Je ne réponds pas aux MP techniques |
|
|
|
20
|
Copyright © 2000-2013 - www.developpez.com