Précédent   Forum du club des développeurs et IT Pro > Autres langages > Algorithmes > Intelligence artificielle
Intelligence artificielle Forum d'entraide sur l'intelligence artificielle. Avant de poster : Cours d'intelligence artificielle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 22/09/2012, 15h04   #1
blackmisery
Membre à l'essai
 
Inscription : juillet 2008
Messages : 163
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 163
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!
blackmisery est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2012, 10h42   #2
rmaker
Membre émérite
 
Homme Jean
Ingénieur développement logiciels
Inscription : mai 2011
Messages : 254
Détails du profil
Informations personnelles :
Nom : Homme Jean
Âge : 31
Localisation : Belgique

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

Informations forums :
Inscription : mai 2011
Messages : 254
Points : 950
Points : 950
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?
rmaker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2012, 11h05   #3
blackmisery
Membre à l'essai
 
Inscription : juillet 2008
Messages : 163
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 163
Points : 20
Points : 20
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?
blackmisery est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2012, 14h10   #4
rmaker
Membre émérite
 
Homme Jean
Ingénieur développement logiciels
Inscription : mai 2011
Messages : 254
Détails du profil
Informations personnelles :
Nom : Homme Jean
Âge : 31
Localisation : Belgique

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

Informations forums :
Inscription : mai 2011
Messages : 254
Points : 950
Points : 950
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.
rmaker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2012, 14h16   #5
blackmisery
Membre à l'essai
 
Inscription : juillet 2008
Messages : 163
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 163
Points : 20
Points : 20
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
blackmisery est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2012, 17h23   #6
rmaker
Membre émérite
 
Homme Jean
Ingénieur développement logiciels
Inscription : mai 2011
Messages : 254
Détails du profil
Informations personnelles :
Nom : Homme Jean
Âge : 31
Localisation : Belgique

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

Informations forums :
Inscription : mai 2011
Messages : 254
Points : 950
Points : 950
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...
rmaker est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 26/09/2012, 17h31   #7
blackmisery
Membre à l'essai
 
Inscription : juillet 2008
Messages : 163
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 163
Points : 20
Points : 20
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
blackmisery est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 30/09/2012, 17h10   #8
souviron34
Expert Confirmé Sénior
 
Inscription : janvier 2007
Messages : 9 572
Détails du profil
Informations personnelles :
Âge : 55

Informations forums :
Inscription : janvier 2007
Messages : 9 572
Points : 11 865
Points : 11 865
à 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:
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
souviron34 est déconnecté   Envoyer un message privé Réponse avec citation 20
Réponse Cette discussion est résolue.
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 22h11.


 
 
 
 
Partenaires

Hébergement Web