IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Intelligence artificielle Discussion :

Logique ou Logique Floue?


Sujet :

Intelligence artificielle

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 164
    Points : 43
    Points
    43
    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 expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2011
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Mai 2011
    Messages : 366
    Points : 1 361
    Points
    1 361
    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?
    les raisonnables ont duré, les passionné-e-s ont vécu

  3. #3
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 164
    Points : 43
    Points
    43
    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 expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2011
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Mai 2011
    Messages : 366
    Points : 1 361
    Points
    1 361
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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.
    les raisonnables ont duré, les passionné-e-s ont vécu

  5. #5
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 164
    Points : 43
    Points
    43
    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 expérimenté
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Mai 2011
    Messages
    366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Mai 2011
    Messages : 366
    Points : 1 361
    Points
    1 361
    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 : Sélectionner tout - Visualiser dans une fenêtre à part
    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...
    les raisonnables ont duré, les passionné-e-s ont vécu

  7. #7
    Membre du Club
    Inscrit en
    Juillet 2008
    Messages
    164
    Détails du profil
    Informations forums :
    Inscription : Juillet 2008
    Messages : 164
    Points : 43
    Points
    43
    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 éminent sénior

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 603
    Détails du profil
    Informations personnelles :
    Âge : 66
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 603
    Points : 17 913
    Points
    17 913
    Billets dans le blog
    2
    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.

Discussions similaires

  1. Opérateur logique "non logique"
    Par Christophe Charron dans le forum SQL Procédural
    Réponses: 3
    Dernier message: 10/09/2007, 12h30
  2. Utilisation de la logique floue en Assembleur
    Par young077 dans le forum Assembleur
    Réponses: 4
    Dernier message: 14/08/2007, 17h10
  3. Logique floue et théorie des langages
    Par young077 dans le forum Langages de programmation
    Réponses: 3
    Dernier message: 13/08/2007, 15h21
  4. Logiciel de logique floue - Fuzzy Logic
    Par patmaba dans le forum Algorithmes et structures de données
    Réponses: 2
    Dernier message: 09/03/2006, 10h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo