Publicité
+ Répondre à la discussion
Affichage des résultats 1 à 8 sur 8
  1. #1
    Membre à l'essai
    Inscrit en
    juillet 2008
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : juillet 2008
    Messages : 164
    Points : 20
    Points
    20

    Par défaut Logique ou Logique Floue?

    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!

  2. #2
    Membre Expert
    Homme Profil pro Jean
    Ingénieur développement logiciels
    Inscrit en
    mai 2011
    Messages
    288
    Détails du profil
    Informations personnelles :
    Nom : Homme Jean
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : mai 2011
    Messages : 288
    Points : 1 182
    Points
    1 182

    Par défaut

    Citation Envoyé par blackmisery Voir le message
    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.
    Pour ce qui est de la logique floue, tout est possible, c'est juste plus compliqué.

    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?

  3. #3
    Membre à l'essai
    Inscrit en
    juillet 2008
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : juillet 2008
    Messages : 164
    Points : 20
    Points
    20

    Par défaut

    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?

  4. #4
    Membre Expert
    Homme Profil pro Jean
    Ingénieur développement logiciels
    Inscrit en
    mai 2011
    Messages
    288
    Détails du profil
    Informations personnelles :
    Nom : Homme Jean
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : mai 2011
    Messages : 288
    Points : 1 182
    Points
    1 182

    Par défaut

    Citation Envoyé par blackmisery Voir le message
    Via la logique (Prolog), cela me classifie mon objet directement en classe a.

    A ce moment, ne parle-t-on pas de logique floue?
    En fait, tu as condition de classe B implique condition de la classe A. Ce n'est pas un problème de prolog ou de logique floue.

    SI j'ai bien compris, ce qui te manque, c'est

    Code :
    1
    2
    classe (a, variable1>0.1, variable2>0.1, variable3>0.1,variable4<=0.1, variable5<=0.1 ).
    Pour que les deux classes soient disjointes.

  5. #5
    Membre à l'essai
    Inscrit en
    juillet 2008
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : juillet 2008
    Messages : 164
    Points : 20
    Points
    20

    Par défaut

    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

  6. #6
    Membre Expert
    Homme Profil pro Jean
    Ingénieur développement logiciels
    Inscrit en
    mai 2011
    Messages
    288
    Détails du profil
    Informations personnelles :
    Nom : Homme Jean
    Âge : 32
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : mai 2011
    Messages : 288
    Points : 1 182
    Points
    1 182

    Par défaut

    Citation Envoyé par blackmisery Voir le message
    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
    Ok. C'est toujours un peu dur de comprendre le problème de quelqu'un, j'ai mis du temps. En fait, prenons un exemple concret:
    pour
    Code :
    1
    2
    var1 = 0.5, var2 = 0.5, var3 = 0.5 ,var4 = 0.5 et var5 = 0.5
    tu voudrais ajouter dans la classe A ET dans la classe B. Et ce filou de prolog ne voit que la règle portant sur la classe B. C'est çà ton problème?

    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...

  7. #7
    Membre à l'essai
    Inscrit en
    juillet 2008
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : juillet 2008
    Messages : 164
    Points : 20
    Points
    20

    Par défaut

    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

  8. #8
    Expert Confirmé Sénior

    Inscrit en
    janvier 2007
    Messages
    10 133
    Détails du profil
    Informations personnelles :
    Âge : 56

    Informations forums :
    Inscription : janvier 2007
    Messages : 10 133
    Points : 13 088
    Points
    13 088

    Par défaut

    à 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..

    Si seuilmin[parametre_i] <= val <= seuilmax[parametre_i]

    Sinon

    Fin si
    Beaucoup de lignes de code , mais pas complexes à faire (duplication), et extrêmement efficace : j'ai constaté (et c'était il y a 17 ans, sur des machines nettement moins puissantes) des gains de facteurs > 1000 en vitesse...

    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

+ Répondre à la discussion
Cette discussion est résolue.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •