IA : VBBRAINBOX : UN SYSTÈME EXPERT D'ORDRE 0+ EN VB .NET

cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018 - 2 mai 2003 à 10:16
cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018 - 15 mars 2015 à 09:31
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/6949-ia-vbbrainbox-un-systeme-expert-d-ordre-0-en-vb-net

cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018
15 mars 2015 à 09:31
Nouvelle version : pour Windows 64, il faut forcer le mode 32 bits, j'ai aussi modifier légèrement le code pour éviter l'avertissement sur les retours de fonction.
cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018
5 mai 2007 à 12:57
100% Reflective Class Diagram Creation Tool
www.codeproject.com/csharp/AutoDiagrammer.asp
cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018
2 mai 2007 à 16:45
J'ai mis 3 mois pour adapter TurboExpert V1.20 en VBBrainBox et faire une doc.

Le plan de la base de données est ici :
http://patrice.dargenton.free.fr/ia/vbbrainbox/index.html#_Toc39118541

La table des matières du programme est ici :
http://patrice.dargenton.free.fr/ia/vbbrainbox/VBBrainBoxSrc.html
Comme il n'y a que 3 classes (clsBD, clsBR et clsDico), il suffit de rechercher ensuite chaque classe dans le code source via le projet VS.Net.
cs_houri Messages postés 2 Date d'inscription mardi 24 avril 2007 Statut Membre Dernière intervention 1 mai 2007
1 mai 2007 à 21:53
salut, je ne sais pas comment le generer automatiquement mais tu peux just donne les noms des classes utilises avec les relations entre elle (heritage...). en faite ca ta pris combien de temps pour faire ce travail. merci
cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018
25 avril 2007 à 09:22
Salut, merci. Ok pour le diagramme de classe... au fait on fait comment pour le générer ? j'ai VS 2003 et VB 2005 Express, on peut le générer avec ? j'ai l'habitude de faire des diagrammes de relation pour les bd mais pas pour la POO, car je n'ai pas bcp de codes en vrai POO actuellement (en tout cas pas de codes très compliqués). VBBrainBox est converti depuis VB6, il n'est pas vraiment optimisé selon les principes de la POO. Pour le diagramme de comportement de l'application, je ne vois pas comment on pourrait le générer facilement en pratique.
cs_houri Messages postés 2 Date d'inscription mardi 24 avril 2007 Statut Membre Dernière intervention 1 mai 2007
24 avril 2007 à 23:50
Salut Patrice99, j'ai beaucoup apprécié ton travail. Vraiment excellant. (10/10)
Pourrez tu s'il te plait me faire parvenir le diagramme de classe (représente la structure statique en terme de classes et de relations ) ainsi que les diagrammes de comportement de l'application, ça m?éviterai beaucoup de souci.
Houri2008@yahoo.fr
Merci d'avance...
cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018
25 févr. 2007 à 09:37
Tu peux créer une requête pour affecter les variables à une valeur, et une autre pour effacer ces valeurs, voici le code SQL à mettre :

SELECT Variable.Variable, Fait.Operateur, Fait.Valeur, Fait.Fiabilite
FROM Variable INNER JOIN ((Application INNER JOIN Sessions ON Application.IdApplication Sessions.IdApplication) INNER JOIN Fait ON Sessions.IdSession Fait.IdSession) ON Variable.IdVariable = Fait.IdVariable
WHERE (((Application.Application)='Offensive') AND ((Sessions.NomSession)='Session1'));

UPDATE Variable INNER JOIN ((Application INNER JOIN Sessions ON Application.IdApplication Sessions.IdApplication) INNER JOIN Fait ON Sessions.IdSession Fait.IdSession) ON Variable.IdVariable = Fait.IdVariable SET Fait.Operateur = '=', Fait.Valeur = Null, Fait.Fiabilite = Null
WHERE (((Application.Application)='Offensive') AND ((Sessions.NomSession)='Session1'));

Ensuite sous Access, tu peux directement utiliser ces 2 requêtes, ou bien même créer un formulaire basé sur la requête de définition des variables, avec un bouton pour effacer ces variables qui appelle la requête d'effacement. Sous DotNet, c'est la même chose (mais ce n'est pas aussi simple que sous Access).

La requête de définition des variables te donne une liste des variables de l'application (ce qui ressemblera beaucoup au formulaire actuel de VBBrainBox). Si tu préfères avoir les variables en colonne, il n'est pas possible à mon avis de rassembler toutes les variables en une seule requête éditable : il te faudra donc écrire du code pour mettre à jour chaque variable, ce qui ne sera pas évident à faire, mais cela améliorera probablement l'ergonomie de l'application.
djameldib Messages postés 10 Date d'inscription jeudi 15 février 2007 Statut Membre Dernière intervention 24 février 2007
24 févr. 2007 à 20:09
Désolé,j'ai du mal m'éxprimer.
En faite, je veux avoir une session vide que je remplirai à ma guise via un formulaire qui s'affichera au tout début, mais je débute en .Net et je suis surtout habituer à Oracle.
Pouvez vous m'aider ou m'indiquer une doc qui pourai le faire.
Ceci sera utile pour faire passer les Faits de ma 2éme partie de projet que je réalise en parallele (les unitées sur la carte géographique aurons des faits à faire passer).
cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018
23 févr. 2007 à 08:21
ça m'a l'air bon tout ça, qu'est-ce qui bloque au juste ?
Tu peux essayer d'autres sessions pour voir si les règles marchent bien dans tous les cas.
djameldib Messages postés 10 Date d'inscription jeudi 15 février 2007 Statut Membre Dernière intervention 24 février 2007
22 févr. 2007 à 22:33
Merci Patrice99, tout est clair maintenant, je sais que je te l'ai déjà dit mais vraiment c'est super.
Je suis maintenant en train de rendre la base de fait dynamique, c'est-à-dire qu'au lieu d'avoir des faits figés, je vais changé le contenu de la table Fait ( les faits serons parmi nos variables ) juste avant l'exécution du moteur d'inférence.
Pouvez vous m'aider, je bloque...
Pour mieux expliquer : voici le rapport que j'ai eu :


Rapport d'expertise de VBBrainBox
Date : 22/02/2007 21:39:35
------------------------------------------------------------
Application : Offensive
Description : Nous allons attaquer
Date : 21/02/2007
Session : Session1
------------------------------------------------------------

Faits initiaux :

Nombre de faits initiaux = 5
Nombre de faits initiaux définis = 5
Nombre de faits finaux = 9

DistanceEfficace = 1000
Pluie = "VRAI"
VitesseVentJourJ = 120
VitesseVentLimite = 100
DistanceEnemi = 1500

Rapport d'expertise de VBBrainBox
------------------------------------------------------------
Application : Offensive
Session : Session1
------------------------------------------------------------
Configuration :
Logique non monotone (les faits peuvent changer)
Les règles contradictoires sont autorisées
Logique floue activée (les fiabilités sont indiquées entre parenthèses)
Logique floue interprétée (les faits peuvent changer)
------------------------------------------------------------

Compte-rendu d'expertise

Selon la règle R2 :
si DistanceEnemi > DistanceEfficace
alors BesoinDeSeDéplacer = "VRAI"

Selon la règle R4 :
si Pluie = "VRAI"
et VitesseVentJourJ > VitesseVentLimite
alors MétéoDéfavorableJourJ = "VRAI"

Selon la règle R3 :
si MétéoDéfavorableJourJ = "VRAI"
alors AviationEnemiInactiveJourJ = "VRAI"

Selon la règle R1 (0,8) :
si AviationEnemiInactiveJourJ = "VRAI"
et BesoinDeSeDéplacer = "VRAI"
alors SeDeplacerJourJ = "VRAI" (0,8)

Nombre d'avertissements : 0

------------------------------------------------------------

Bilan des variables : Avant : Après

VitesseVentLimite = 100 : 100
VitesseVentJourJ = 120 : 120
AviationEnemiInactiveJourJ = ? : "VRAI" (R3)
MétéoDéfavorableJourJ = ? : "VRAI" (R4)
DistanceEfficace = 1000 : 1000
Pluie = "VRAI" : "VRAI"
DistanceEnemi = 1500 : 1500
BesoinDeSeDéplacer = ? : "VRAI" (R2)

Variables intermédiaires :

SeDeplacerJourJ = ? : "VRAI" (0,8) (R1)

------------------------------------------------------------

Base de règles : C:\Documents and Settings\Salut chez\Bureau\SE\Applications\VBBrainBox.mdb (version : 1)
Date : 22/02/2007 21:39:35

Règle n° 1 : R1 (0,8) : 21/02/2007

si AviationEnemiInactiveJourJ = "VRAI"
et BesoinDeSeDéplacer = "VRAI"
alors SeDeplacerJourJ = "VRAI"


Règle n° 2 : R2 : 21/02/2007

si DistanceEnemi > DistanceEfficace
alors BesoinDeSeDéplacer = "VRAI"


Règle n° 3 : R3 : 21/02/2007

si MétéoDéfavorableJourJ = "VRAI"
alors AviationEnemiInactiveJourJ = "VRAI"


Règle n° 4 : R4 : 21/02/2007

si Pluie = "VRAI"
et VitesseVentJourJ > VitesseVentLimite
alors MétéoDéfavorableJourJ = "VRAI"


------------------------------------------------------------
VBBrainBox 1.0 par Patrice Dargenton

d'après Turbo-Expert 1.2 pour Windows
(c) Philippe Larvet 1996, 2003

Documentation : VBBrainBox.html
http://patrice.dargenton.free.fr/ia/vbbrainbox/index.html
http://patrice.dargenton.free.fr/index.html
patrice.dargenton@free.fr
------------------------------------------------------------
cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018
21 févr. 2007 à 08:25
Dans la table Variable (Table des variables d'une application), le champ Booléen bIntermediaire indique s'il s'agit d'une variable intermédiaire, c'est-à-dire une variable déduite par le système expert (et non un fait initial). Cela permet de trier les variables lorsque l'on conçoit des sessions ou des règles.
djameldib Messages postés 10 Date d'inscription jeudi 15 février 2007 Statut Membre Dernière intervention 24 février 2007
20 févr. 2007 à 19:23
Merci Patrice99, je te remercie pour ton message.
J'ai parcouru ton application, et vraiment "BRAVO", néanmoins je ne comprends pas la signification du champ "bintermediaire" dans la BD.
djameldib Messages postés 10 Date d'inscription jeudi 15 février 2007 Statut Membre Dernière intervention 24 février 2007
19 févr. 2007 à 18:34
Merci Patrice,
En fait je suis en train de réaliser un systeme expert interactif d'aide à la prise de décision, le tout se fait sur une carte géographique; ceci ressemblera à un jeux de guere ou les forces alliées réalisent des actions (mouvement, tire, ...); le systeme expert doit proposer en fonction des faits (armement ami,armement enemi,position enemi, ...) des actions possible à réaliser (les conclusions) ,c'est là que le joueur choisira se qu'il veut faire.
Auriez vous une approche à me conseiller.Si oui contactez moi : djameldib1@yahoo.fr
Je vous ferai part de mon état d'avancement. MERCI
cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018
19 févr. 2007 à 16:27
Le runtime d'Access est ici (le lien dans la doc ne marche plus) :
http://support.microsoft.com/default.aspx?scid=kb%3Ben-us%3B243957
cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018
19 févr. 2007 à 13:41
Regarde l'application minimale : c'est tout ce qu'il faut pour commencer. Ensuite, si tu veux la modifier pour faire des tests, il faut Access (il existe une version gratuite : cherche Runtime Access dans la doc).
Tiens-moi au courant si ça marche ou pas.
djameldib Messages postés 10 Date d'inscription jeudi 15 février 2007 Statut Membre Dernière intervention 24 février 2007
19 févr. 2007 à 10:34
quelqu'un pourait il m'éxpliquer comment ca marche, j'ai besoin du manuel en quelque sorte.

PS j'en est vraiment besoin
cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018
14 oct. 2005 à 08:30
L'exe ne fonctionne plus sur certain poste (il ne trouve plus la version de la BD ???), il faut juste le recompiler ! (je ferais une mise à jour à l'occasion)
Mumuri Messages postés 320 Date d'inscription mercredi 9 octobre 2002 Statut Membre Dernière intervention 6 avril 2008
30 mai 2004 à 11:44
Méme sans avoir regardé le code, je t'ai mis 10 pour remonter le 1/10 fo etre débile pour mettre un 1 a un systeme expert, vous avez pas idée des applications les gars
Mumuri Messages postés 320 Date d'inscription mercredi 9 octobre 2002 Statut Membre Dernière intervention 6 avril 2008
30 mai 2004 à 11:36
C'est utilisé par l'ANPE pour calculer les fonds qu'ils doivent donné au chomeur en fonction de leur situations, c'est aussi utilisé pour faires des diagnostiques en medecine quand les cas sont trop compliqué, il rentre les données du patient et ca sort la maladie ...

Pour ce qui est de la source, je vais la télécharger et je verrais aprés
cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018
12 juil. 2003 à 10:25
Lorsque Visual Studio .NET n'est pas installé sur la machine, MDAC 2.7 (composants d'accès aux données, version .NET) doit alors être installé pour que VBBrainBox puisse lire la base de données :
www.microsoft.com/downloads/details.aspx?FamilyID=b41304ca-874f-421d-8820-182f179779a4&DisplayLang=fr (5 Mo)
J'ai mis à jour le package .msi : 793 Ko, tout devrait fonctionner maintenant.
CausPupus Messages postés 32 Date d'inscription vendredi 13 décembre 2002 Statut Membre Dernière intervention 31 décembre 2005
24 mai 2003 à 11:09
Pas mal
cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018
24 mai 2003 à 09:03
Je crois qu'il y a un petit pb avec la base de données : elle n'est pas lue par le logiciel dans un Windows vide (sans VS .NET), je mettrais à jour quand j'aurais trouvé la solution au problème.
cs_chocobo Messages postés 126 Date d'inscription samedi 18 janvier 2003 Statut Membre Dernière intervention 4 mars 2005
23 mai 2003 à 22:38
vraiment compri comment ca marchait mais
j'avoue qu'j'ai pas tellement cherché
=
cs_chocobo Messages postés 126 Date d'inscription samedi 18 janvier 2003 Statut Membre Dernière intervention 4 mars 2005
23 mai 2003 à 22:37
moi non plus j'ai pa
fgrattery Messages postés 1 Date d'inscription vendredi 9 mai 2003 Statut Membre Dernière intervention 15 mai 2003
15 mai 2003 à 10:18
... On s'en fout de l'effet de transparence ! T'as vu que ça d'intéressant ?
cs_mage Messages postés 22 Date d'inscription vendredi 7 juin 2002 Statut Membre Dernière intervention 23 novembre 2003
4 mai 2003 à 15:52
bien ton programme surtout quand tu fait quitter et cela fait transparant moi je dit bravo
CausPupus Messages postés 32 Date d'inscription vendredi 13 décembre 2002 Statut Membre Dernière intervention 31 décembre 2005
2 mai 2003 à 16:33
J'ai pas compris l'interet de ce programme si quelqu'un peut me donner un exemple concret : a quoi ca sert exactement, l'utilité....

Merci
Saros Messages postés 921 Date d'inscription vendredi 20 décembre 2002 Statut Membre Dernière intervention 23 septembre 2010
2 mai 2003 à 11:07
Vraiment bien !
Un peu lent (ça doit être mon ordi qui rame), mis bon...
Pour le truc d'assurance, je me demande si en effet les compagnies d'assurance utilisent ce genre de programme pour calculer leur taux...
A vrai dire je ne peux pas trop dire sur l'adaptation .NET parce que je n'ai pas .NET...
A+
Saros
cs_Patrice99 Messages postés 1221 Date d'inscription jeudi 23 août 2001 Statut Membre Dernière intervention 9 septembre 2018
2 mai 2003 à 10:16
Oops ! pour la version vb6, il faut renommer AffRhgles.frm en AffRègles.frm (la prochaine fois, j'enlèverais les accents !)
Rejoignez-nous