Poster une réponse 
 
Note de cette discussion :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
[Tuto] Logique élémentaire et Formules Normales Conjonctives
08-14-2010, 09:47 AM (Ce message a été modifié le : 10-31-2010 12:11 AM par Telkostrasz.)
Message : #1
[Tuto] Logique élémentaire et Formules Normales Conjonctives
Ps : même si il peut être intéressant de déjà le lire, n'espérez pas comprendre ce tutoriel du premier coup ...
Aussi, si vous êtes nul en math, ne paniquez pas si vous êtes complètement largué, surtout au niveau des associations de tests. TRP2 permet le plus simple, tout comme le plus compliqué. La plupart des gens n'auront jamais recourt aux FNC par exemple.

Avec l'arrivée des outils de créations vient la nécessité de comprendre le fonctionnement des événements "conditions-effets".

Il est important de comprendre 3 concepts : Événément, condition et effet.

Désormais, trois types de créations (Objets, états et quêtes) possèdent des attributs spéciaux : les événements. Les événements permettent ... Et bien de déclencher des effets (jouer un son, afficher un document, afficher un texte, faire une émote, ajouter un objet/état, invoquer un familier, sortir ses armes ...etc) si certaines conditions sont remplies.

Pour faire une analogie avec TRP1 : dans TRP1 le système d'objets possédait 2 événements : un événement "à l'utilisation", et un événement "à l'épuisement". Le premier de déclenchait lorsqu'on utilisait l'objet, le second lorsque l'on utilisait la dernière charge de l'objet.
Ces événements pouvait déclencher jusqu'à 4 effets : afficher un texte, jouer une émote, jouer un son local et ajouter un objet à l'inventaire. Seul l'événement "à l'utilisation" pouvait posséder des conditions. Ces conditions étaient gérées dans le panneau du même nom, et cela utilisait le fameux système de tests.

TRP2 reprend la formule, sauf qu'il va beaucoup plus loin. Tout les événements peuvent jouir de toutes les conditions et de tout les effets (à quelques exceptions près).

Maintenant que vous avez bien cerné ces différents concept, passons au tutorial de ce topic : les conditions et les FNC (Fonctions normales conjonctives).

Les tests

TRP2 n'utilise plus un système de tests comme avant, obligeant l'utilisateur à utiliser un pseudo code pour effectuer des tests. Maintenant tout est visuel. Fini le code, terminé le code !

Un test, c'est simple, c'est une comparaison entre deux valeurs.
Les valeurs, c'est simple, il en existe des dizaines : Position du joueur, points de vie, race, classe, sexe, nom, prénom, nombre d'unité d'un objet dans le sac, temps restant d'un état ...etc.
Les comparaisons, et bien elle sont simples aussi et existent au nombre de 6 : égal, différent, plus petit, plus grand, plus petit ou égal, plus grand ou égal.
Le résultat d'un test, c'est tout simplement tester si la formule suivante est "correcte" :

Code :
Valeur1 Comparaison Valeur2

Exemples :
On veut que les points de vie du joueur soient inférieurs à 100 :
Citation :Points de vie actuel du joueur - Plus petit que - 100
Simple non ? Aller une autre : On veut que le joueur ai tout ses points de vie.
Citation :Points de vie actuel du joueur - Égal - Point de vie totaux du joueur
Un petit dernier : On ne peut pas être plus fort que sa cible.
Citation :Force du joueur - Plus petit ou égal - Force de la cible du joueur

On remarque assez vite qu'il est possible d'absolument tout tester.
Seulement voilà, les tests faut les mettre ensemble ! Car oui, on peut évidemment associer plus d'un test à une condition... Sinon il n'y aurait aucun intérêt. Mais la manière dont on associe les tests ensemble fait toute la différence, et permet , au final, d'absolument tout tester.

Associations de tests

Remarque : en logique on ne parle pas de test "réussi" ou "raté", mais de test "vrai" ou "faux".

1) La disjonction :
La disjonction est l'association de plusieurs tests selon la logique "ou" (OR en anglais). Donc pour que la résultante de l'association soit vraie (donc "réussie") il faut qu'au moins un des tests composant la disjonction soit vrai. Une disjonction est notée "v", donc "A v B" est la disjonction du test A et du test B.

Exemple clair de disjonction :
On veut que soit les points de vie du joueur soient égal à 100, soit qu'il soit un elfe.
Test A = Points de vie du joueur - égal - 100
Test B = Race du joueur - égal - Elfe
Formule : (A v B)

Une disjonction peut évidemment contenir une infinité de tests. Il faut juste qu'au moins un test soit vrai pour que la disjonction soit vraie.

Pour en savoir plus :
http://fr.wikipedia.org/wiki/Disjonction_logique

2) La conjonction :
La conjonction est l'association de plusieurs tests selon la logique "et" (AND en anglais). Donc pour que la résultante de l'association soit vraie (donc "réussie") il faut que tout les tests composant la conjonction soit vrais. Une conjonction est notée "^", donc "A ^ B" est la conjonction du test A et du test B.

Exemple clair de conjonction :
On veut que le joueur soit au port d'Hurlevent à 14h.
Test A = Position du joueur - égal - "Port d'Hurlevent"
Test B = Heure - égal - 14
Formule : (A ^ B)

Une conjonction peut évidemment contenir une infinité de tests. Il faut juste que l'entièreté des test soit vrais pour que la conjonction soit vraie.

Pour en savoir plus :
http://fr.wikipedia.org/wiki/Conjonction_logique

3) On mélange tout !

Il est possible bien évidemment d'avoir des conjonctions et des disjonctions dans la même formule !
Exemples :

Vous devez livrer un colis. Il existe deux magasins, à Hurlevent et à Forgefer. Celui d'Hurlevent ouvre à 14h, et celui de Forgefer à 13h.
On peut donc dire du joueur :
"Il faut qu'il soit à Hurlevent à 14h, ou qu'il soit à Forgefer à 13h."
Test A = Position du joueur - égal - "Hurlevent"
Test B = Heure - égal - 14
Test C = Position du joueur - égal - "Forgefer"
Test D = Heure - égal - 13

Formule : (A^B)v(C^D)
On a donc ici une disjonction (v) de deux conjonctions (A^B et C^D). C'est pas sorcier !

Autre exemple :

Vous devez livrer un colis. Il existe deux magasins, à Hurlevent et à Forgefer. Ils ouvrent tout les deux à 9h et à 19h.
On peut donc dire du joueur :
"Il faut qu'il soit à Hurlevent ou à Forgefer, et ce à 9h ou à 19h."
Test A = Position du joueur - égal - "Hurlevent"
Test B = Position du joueur - égal - "Forgefer"
Test C = Heure - égal - 9
Test D = Heure - égal - 19

Formule : (AvB)^(CvD)
On a donc ici une conjonction (^) de deux disjonctions (AvB et CvD). C'est pas sorcier !

Et bien, une conjonction de disjonctions, on appelle cela une Formule Normale Conjonctive.
Et ca, mes amis, c'est super génial.
Citer ce message dans une réponse Firefox Windows 9x/NT/2000
08-14-2010, 09:47 AM (Ce message a été modifié le : 08-14-2010 10:34 AM par Telkostrasz.)
Message : #2
RE: [Tuto] Logique élémentaire et Fonctions Normales Conjonctives
Formule Normale Conjonctive

La FNC est donc une conjonction de disjonctions. Et dans TRP2, on travaille avec des FNC. Pourquoi ? Car les FNC, c'est l'avenir. Langue
Non, tout simplement car il existe une magnifique loi de logique qui dit :
Citation :Toute formule logique possède une formule normale conjonctive équivalente.
Il est donc possible, avec une FNC, d'exprimer absolument n'importe quelle condition.

Ici, on va rentrer dans la logique assez complexe. Si vous ne saisissez pas tout, c'est normal. Ce sont des maths, c'est pas moi qui l'ai inventé, j'ai appris comme tout monde. Clin

Dans TRP2, à chaque déclencheur est associée une FNC. Lorsque le déclencheur se déclenche, il teste la FNC petit à petit, disjonctions par disjonction.
Pour que le déclencheur joue les effets il faut donc que toutes les disjonctions de la FNC soient vraies.
Pour qu'une disjonction soit vraie, il suffis qu'au moins un de ses tests soit vrai. Mais je me répète là ! Sourire

Nous allons maintenant voir quelque technique de transformation de vos conditions en FNC.

1) La négation - :

La négation en elle même n'est pas une technique de transformation, mais apparaitra plus tard, donc faut que vous sachiez ce que c'est.
La négation d'un test consiste à tout simplement inverser son comparateur.
Exemples :

Test A : Race - égal - Elfe
La négation de A est :
Négation A : Race - différent - Elfe
On remarque qu'on a tout simplement changé le comparateur par son opposé.
L'opposé de "égal" est "différent", et vice versa.
L'opposé de "plus grand" est "plus petit ou égal" et vice versa.
L'opposé de "plus petit" est "plus grand ou égal" et vice versa.


2) Distribution du v sur le ^ :

"Il faut qu'il soit un elfe, ou un mage orc."
Test A : Race - égal - Elfe
Test B : Classe - égal - mage
Test C : Race - égal - orc
Formule : A v (B ^ C)
Aie aie ! C'est pas une FNC ça !
Pourtant la loi dit qu'il existe une FNC pour toute formule ...
Comment faire ? Il faut distribuer le v sur la parenthèse !
Code :
A v (B ^ C)
Est équivalent à
(A v B) ^ (A v C)
Il faut donc dupliquer le test A pour obtenir notre FNC. Oui, c'est pas pratique, mais c'est nécessaire !

3) L'implication => :

L'implication est un concept spécial en logique qui permet d'exprimer une condition du genre "SI .... ALORS IL FAUT QUE ...".

"SI le joueur est un elfe ALORS IL FAUT QUE sa mana soit au maximum."
Test A : Race - égal - Elfe
Test B : Mana actuelle - égal - Mana maximum
Formule : A => B
Aie aie, qu'est ce que c'est que ce truc là ... "=>" ?
Ben c'est l'implication. Et transformer l'implication en FNC est simple.
Code :
A => B
Est équivalent à
(-A) v B

On comprend assez vite cela avec l'exemple que j'ai proposé.
Dire que "si le joueur est un elfe alors il doit avoir sa mana au maximum" revient au même que dire "Soit le joueur n'est pas un elfe, soit il a sa mana au maximum". Logique hein ? Sourire
Cela veut dire qu'il est possible que le joueur ne soit pas un elfe mais ai quand même sa mana au maximum, ce n'est pas interdit !

Pour en savoir plus :
http://fr.wikipedia.org/wiki/Implication_%28logique%29

4) Lois de Morgan :

Parfois on se retrouve devant un sale truc : une négation devant une parenthèse.
"Si c'est un elfe mage, alors il doit être gentil."
Test A : Race - égal - Elfe
Test B : Classe - égal - Mage
Test C : Comportement - égal - Gentil
Formule : (A ^ B) => C
Qui, en dépit de la règle de l'implication, donnera :
-(A ^ B) v C
Et crack, comment gérer cette négation ? Comment la distribuer ?
On utilise les lois de Morgan :
Code :
- (A v B) = -A ^ -B
- (A ^ B) = -A v -B
Donc en plus simple : quand on distribue une négation, on inverse le signe.
Reprenons notre exemple :
Citation :(A ^ B) => C
-(A ^ B) v C
-A v -B v C
Bingo, c'est une FNC. (Bah oui, c'est une conjonction d'une seule disjonction, c'est pas interdit ^^).

Créateur de Total RP 2.
\(^_^)/
Total RP 2 creator.
Trouver tous les messages de cet utilisateur
Citer ce message dans une réponse Firefox Windows 9x/NT/2000
10-26-2010, 06:48 PM
Message : #3
RE: [Tuto] Logique élémentaire et Formules Normales Conjonctives
Euphorine a un livre qui lui permet d'améliorer la maitrise du draconique.

Le soucis : si le personnage possède déjà 10 dialectes (draconique non-compris) il ne pourra pas ajouter le draconique à sa liste ! Voici donc les tests à faire :

La phrase "en français" est celle-ci :
"Pour pouvoir utiliser mon livre il faut que soit je maitrise déjà le draconique, soit je ne le maitrise pas et le nombre de dialectes que je maitrise doit être inférieur à 10."

Au final très simple : une bête disjonction !

Test 1 : Maitrise du Draconique différent de 0
Test 2 : Nombre de dialecte maitrisé inférieur à 10

FNC : (1 v 2)

Tout bête. ^^

Créateur de Total RP 2.
\(^_^)/
Total RP 2 creator.
Trouver tous les messages de cet utilisateur
Citer ce message dans une réponse Firefox Windows 9x/NT/2000
11-24-2010, 11:13 PM
Message : #4
RE: [Tuto] Logique élémentaire et Formules Normales Conjonctives
Comment TRP2 construit-il les FNC ?

Très simple : quand vous déclarez un test en logique "OU" il se groupe avec le test précédant, ou les tests si ceux-ci étaient déjà en OU.

Explication par l'exemple :
Soit 5 tests, numéroté de 1 à 5.

Par défaut :
Par défaut TRP2 place toujours les test en logique ET. On a donc :
1^2^3^4^5

Voici maintenant une série d'action. Attention, entre chaque action je décide de repartir depuis la formule par défaut. Ne considérez pas que c'est des action que j'exécute successivement.

Exemple 1 : On place le premier en OU :
Plaçons le test 1 en logique OU. Que se passe t-il ? RIEN ! Vu que le OU se groupe avec le précédant ! Et le précédant de 1 c'est ... Ben il y en a pas. Clin
Bref, il est totalement inutile de placer le premier test en OU.

Exemple 2 : On place le deuxième en OU :
On place le test 2 en OU, il va donc se grouper avec le précédant :
(1v2)^3^4^5

Exemple 3 : On place le troisième en OU :
On place le test 3 en OU, il va donc se grouper avec le précédant. Mais juste avec le précédant hein ! :
1^(2v3)^4^5

Exemple 4 : On place le deuxième et le troisième en OU :
On place les tests 2 et 3 en OU. Le 2 va donc se grouper avec le 1. Ensuite le 3 se groupe avec le deux. Mais vu que le 2 et le 1 sont groupé, le 3 va se grouper avec tout les deux !
(1v2v3)^4^5

Exemple 5 : On place le troisième et le cinquième en OU :
On place les tests 3 et 5 en OU. Le 3 va se grouper avec le 2. Le 5 va se grouper avec le 4.
1^(2v3)^(4v5)

Exemple 6 : On place le troisième, le quatrième et le cinquième en OU :
On place les tests 3, 4 et 5 en OU. Le 3 va se grouper avec le 2. Le 4 va alors se grouper avec 3, et donc avec le 2. Le 5 va se grouper avec le 4, et donc avec le 3 et le 2.
1^(2v3v4v5)


Simple comme bonjour non ?

Créateur de Total RP 2.
\(^_^)/
Total RP 2 creator.
Trouver tous les messages de cet utilisateur
Citer ce message dans une réponse Firefox Windows 9x/NT/2000
02-23-2011, 11:36 AM
Message : #5
RE: [Tuto] Logique élémentaire et Formules Normales Conjonctives
Une petite question, je veut faire une disjonction entre 2 conjonction

(A^B)v(C^D) mais quand je met le "ou" donc (v) sur le C il me met (A)^(BvC)^(D), hors enlisant ton post j'ai remarquer que tu disait qu'ilfallai dupliquer A si on voulait que par exemple le sexe soit commun au autre condition, je m'explique A=Sexe femme, B=Human C=Gnome D=osef
qi je veut que l'objet fonctionne sur les femme Human ou Gnome il me faut (A^B)v(A^C) la tu va me dire simple a faire (A)^(BvC) mais le probleme c'est que je veut qu'un effet soit différent celons les races, aille aille aille...

En clair je veut que l'effet soit: (condition) c'est une femme humaine (effet) soupir de femme humaine OU (condition) C'est une femme gnome (effet) soupir de femme gnome. Donc si tu pouvvait m'expliquer comment relier un effet propre a une conjonction et un autre effet propre a une autre conjonction qui son elle meme separé par une disjonction pour ne pas melanger les effet sa meserai vraiment utile, et tous sa pour l'utilisation d'un objet ><
Trouver tous les messages de cet utilisateur
Citer ce message dans une réponse Safari Windows XP/2003
Poster une réponse 


Aller à :


Utilisateur(s) paracourant cette discussion : 3 Guest(s)