PDA

Voir la version complète : [PROG] Moteur de relation sociale made in canard.



cailloux
29/04/2011, 16h23
Sur ce topic Nous allons tenter de mettre en commun nos connaissances/réflexions pour construire un moteur de relation sociale tel qu'il pourrait être utilisé pour d'autres jeux.

Ce post servira de "journal" ouvert à la communauté pour voir quels sont les problèmes/solutions techniques/conceptuels des programmes envisagés.

Voici le post à l'origine de la réflexion.


Si je devais créer un un générateur de quête aléatoire procédurale quels ingrédients j'y mettrais dedans pour assurer un intérêt sur la longueur ?

De base on retrouve souvent ce modèle : Commanditaire+action+récompense.

Développons chaque ingrédient

Commanditaire
L'origine de celui ci définit les actions permises (forcément : un roi va pas demander les mêmes choses qu'un clochard), ainsi que la récompense.
J'y ajoute : la multiplicité des commanditaires possibles (au joueur de chercher qui pourrait être intéressé par une action pour multiplier les récompenses) Attention à ne pas s'engager dans des missions antagonistes.

Action
Assassiner, ramener X ingrédients (synonyme de farming), escorter, donner objet, trouver objet. Souvent associé à un élément définissant l'objectif.
J'y ajoute : quêtes d'ordre sociale (diplomatie à toutes échelles)

Récompense
Xp, or, objet, information, quête. (en gros actuellement)
J'y ajoute : récompense sociale.

On en arrive à des quêtes du type : [le prince] demande [d'assassiner] contre [de l'or]

Ce qu'il faut rajouter pour garantir un peu de plus de variété :

méta moteur de quête
Au moment où la quête est généré, le moteur décide si il s'agira d'une quête à tiroir (rassembler plusieurs morceaux d'un artefact, assassiner une généalogie complète) ou d'une quête unique. Le méta moteur peut donc construire un "arbre de quête" pour pousser le joueur vers un objectif unique.* Ou bien seulement une suite logique de quête.

importance de la mission
En plus de [demander] on rajoute d'autre degré d'exigence : [aimerait], [Ordonne] qui influx directement sur la récompense.

conditions
Les actions demandées peuvent s'assortir de conditions particulière pour la validation de la quête [discrétion], [utilisation d'un objet définit], [limite de temps]. Le remplissage ou non des conditions joue sur la récompense. On peut multiplier les conditions pour ajouter de la difficulté.


On en arrive à :
[Dans le cadre de la métaquête] [commanditaire(s)] [degré de demande] [action] [conditions] [récompenses].

Je suis sûr qu'on peut trouver encore quelques variables mais là je sèche un peu.

A noter qu'il faut en aval intégrer un [U]moteur de relation sociale des PNJ pour arriver à créer des actions logiques/probables des acteurs de l'action. Un moteur basé sur les dépendances économique/morale, les filiations, le degré d'empathie, taux d'ouverture et facteurs aléatoires etc qui calculerait les probabilités de réactions des acteurs aux stimulus sociaux. Les relations en questions s'appliquent évidement au héro (la réputation devient un enjeux primordial pour le joueur)


*Exemple : pour assassiner un noble et faire passer l'assassinat pour un accident de chariot il faudrait :

1/Une quête pour chercher un endroit adéquat pour un accident de chariot
a : Trouver un cartographe et le corrompre pour qu'il vous indique où.
b : Trouver le lieu en question et le noter.

2/Une quête pour pousser le noble à prendre un chariot et passer par cette route
a : Rendre malade son père vivant dans une ville. (trouver au préalable qu'il aime son père)
b : Trouver quelqu'un pour lui faire passer la nouvelle sans éveiller ses soupçons.

3/Une quête pour chercher l'objet déclencheur de l'accident.
a : Trouver un troll.
-Demander à un ranger
*contre 5 peaux de renard
-L'endormir
-Le transporter
b : L'attacher au bord de la route.


[edit : Lien bigrement intéressant (http://magalie.ochs.free.fr/RIA-OchsSabouretCorruble.pdf)]

Je rajouterais des liens vers les points clefs des discussions au fur et à mesure des avancés.

oks2024
29/04/2011, 18h56
C'est intéressant sur le principe, et à développer, mais en pratique est ce que ça l'est ?

J'ai peur que ce ça donne des quêtes trop indépendante les unes des autres, typiquement ce qu'on retrouve dans les Hack&Slash ou les MMORPG, mais en encore plus générique.
J'ai peur que ça lasse vite de pas avoir de véritable objectif, de quête qui aurai une influence, même minime sur le monde.
Mais tu ne parle peut être pas de baser un jeu juste la dessus. Enfin après tout des jeux comme Mount And Blades ou Pirates n'ont pas de fil conducteurs et ça fonctionne très bien. Faut un univers solide et autonome.

Après sur la création de l'objectif de la quête, je trouve ton analyse solide et intéressante.
Il y a juste un truc à penser, c'est que les quêtes doivent correspondre avec la réalité du jeu.
Par exemple le noble, il faut qu'il existe, et qu'il ai pas été tué. Il faut qu'il sorte, ou alors si on suit ton exemple, il faut qu'il ai un père.

Ce qu'il faut définir, c'est est ce que le générateur de quête s'adapte au monde, c'est à dire est ce qu'il se sert des PNJ et objets déjà existant, ou est ce que c'est l'inverse, c'est à dire est ce que quand une quête est crée elle va rajouter un PNJ cible, des champignons dans une grotte, etc ...


Par contre le moteur d'interaction social même si ça semble compliqué à mettre en place ça ouvrirai la porte à énormément de possibilités. Par contre ça demande un niveau d'AI très perfectionné, mais ça serai très intéressant à approfondir.

Batto
29/04/2011, 19h12
Le truc serait effectivement de lier les quêtes au moteur social.

Par exemple un prince qui aurait des ennemis politiques pourrait, selon son caractère commanditer leur assassinat, fabriquer des preuves pour le faire condamner ou simplement le discréditer.
C'est envisageable, mais bien complexe... :p

Tylers
29/04/2011, 19h40
T'as des supers idées cailloux , qui seraient bien plus applicables dans un jeu classique qu'un jeu basé sur du procédural. Le coup de payer un cartographe pour qu'il indique l'emplacement d'une embuscade, ca doit etre assez dur à générer sur la base d'un modèle aléatoire.

Par contre oks2024, je comprend pas quand tu dis que le joueur se désintéresserait car encore plus générique qu'un MMO car pas d'influence. Je comprend pas trop ce concept d'influence, si déjà çà change le rapport de force entre factions, ce serait énorme. Par exemple un jeu comme Dragon Age Origin réputé pour l'influence qu'on peut avoir, bah je trouve pas qu'on en ait vraiment: on a juste le choix de bifurquer 3,4 fois mais on reste toujours la ou veut nous amener le développeur. L'avantage du procédural, c'est que la multiplicité des interactions permet de l'imprévu, et pour moi c'est cà l'influence. Evidemment du coup faut lier les quetes à des factions, faut que le joueur puisse influer directement ou pas sur des variables diverses: les rapports de forces, les liens sociaux, les resources...
Bon après c'est vrai que c'est pas simple de faire un tel systeme avec des répercussions aisément visibles par le joueur.

cailloux
29/04/2011, 19h52
Le truc serait effectivement de lier les quêtes au moteur social.

Par exemple un prince qui aurait des ennemis politiques pourrait, selon son caractère commanditer leur assassinat, fabriquer des preuves pour le faire condamner ou simplement le discréditer.
C'est envisageable, mais bien complexe... :p

Effectivement.

En théorie je dirais même mieux : que les quêtes sont générées au fûr et à mesure de la progression de l'histoire.

On considère le monde comme un bac avec des constantes interactions, chaque entité (de la guilde au PNJ en passant par les villages ou les familles) est généré avec tout un tas de caractéristiques. Allant de sa taille (pays>guilde>villes>quartiers>famille>PNJ) à ses objectifs (la taille étant des facteurs limitatifs aux objectifs) (grandeur économique, morale, enrichissement personnel, mariage etc) et des moyens (force, diplomatie etc).

Une fois le monde créé on constate forcément des déséquilibre dans les forces en présence : ce sera le background général : c'est à dire les objectifs ultimes qui sont assignés au héro (devenir maitre d'une guilde en décrépitude, sauver un château assiégé). les métas quêtes entrent alors en action : pour sauver le château vous devrez trouver les morceaux d'un artefact, pour sauver la guilde vous devez trouver un nouveau produit à fabriquer.
Les déséquilibres sont évidement visible à toutes les échelles et les quêtes sont générés en fonction des actions, au fûr et à mesure de l'avancé du monde : un PNJ n'aura rien à vous proposer, mais si son fils meurt pendant une attaque, il sera susceptible de vous donner une quête (si son besoin de vengeance est supérieur à son désir de paix (donc en accord avec sa personnalité)) Chaque action aura des rétro-effets (à l'échelle de l'action) : si au moment de venger le fils vous détruisez un pont, alors le village à cotés vous demandera des comptes.
On peut éventuellement gérer des changements d'échelles via des PNJ charnières: si vous agressez un membre d'une famille, alors vous aurez sa famille sur le dos (dans les limites de la psychologie de chaque membre de la famille) Par contre si vous tuez le chef de la famille vous pourrez vous trouver avec sa famille sur le dos mais aussi les autres chefs de familles craignant pour leurs vie. Idem si vous assassinez un valet les réactions ne seront que celles de sa famille donc de porté moindre (genre une petite mise à prix) faîtes la même chose avec un prince et là vous aurez une grosse mise à prix sur le dos (l'appât du gain étant un facteur psychologique important) + les autres rois à votre trousses (les puissants n'aimant pas le prince pouvant au contraire vous protéger). Il est hors de question d'avoir un système effet papillon où le meurtre d'un clochard puisse déclencher une guerre de succession.

Le joueur peut donc créer de son propre chefs de vastes instabilités si il le souhaite. Evidement il doit assumer les conséquences de ses choix. Les quêtes sont aussi totalement aléatoire, dans l'espace et le temps mais soumise à des motivations logique et cohérente.

Par contre pour que le joueur ne tourne pas en rond à la recherche de la quête il faut instaurer un système de rumeurs pour l'attirer vers la quête en court. Le faculté des PNJ à vous parler à déjà était développé par moi même sur 2 posts différents. ICI (http://forum.canardpc.com/threads/5180-Et-si-vous-deviez-faire-votre-propre-jeu-R%C3%A9flexion-communautaire-sur-le-JDR-en-cour?p=3946073&viewfull=1#post3946073) et les traits de psychologies à développer ICI (http://forum.canardpc.com/threads/5180-Et-si-vous-deviez-faire-votre-propre-jeu-R%C3%A9flexion-communautaire-sur-le-JDR-en-cour?p=4065218&viewfull=1#post4065218)

Lisez le lien de mon précédent post, c'est vraiment passionnant bien que relativement complexe, ça montre parfaitement tout les aspects qui devraient être pris en compte pour la création d'un PNJ psychologiquement cohérent.

---------- Post added at 18h52 ---------- Previous post was at 18h45 ----------


T'as des supers idées cailloux , qui seraient bien plus applicables dans un jeu classique qu'un jeu basé sur du procédural. Le coup de payer un cartographe pour qu'il indique l'emplacement d'une embuscade, ca doit etre assez dur à générer sur la base d'un modèle aléatoire.

Being en fait c'est typiquement le genre de choses qui pourraient être implémenté dans le moteur du jeux : quelles sont les caractéristiques d'un terrain favorable à une embuscade ? Isolement (pas d'habitation à moins de 1 km) + route + possibilité de se cacher (forêts, gros rochers) + petite taille de l'ensemble (genre 50m²) : on demande au moteur de repérer les zones de la carte ayant ses trois occurrences, et hop on le signifie sur la carte. Ensuite il faut trouver un prétexte pour faire bouger le gars là dessus : si son père n'habite pas dans la bonne direction il faudra voir si il aime la chasse, n'importe quoi, qu'importe les moyens.

oks2024
29/04/2011, 20h17
Par contre oks2024, je comprend pas quand tu dis que le joueur se désintéresserait car encore plus générique qu'un MMO car pas d'influence. Je comprend pas trop ce concept d'influence, si déjà çà change le rapport de force entre factions, ce serait énorme. Par exemple un jeu comme Dragon Age Origin réputé pour l'influence qu'on peut avoir, bah je trouve pas qu'on en ait vraiment: on a juste le choix de bifurquer 3,4 fois mais on reste toujours la ou veut nous amener le développeur. L'avantage du procédural, c'est que la multiplicité des interactions permet de l'imprévu, et pour moi c'est cà l'influence. Evidemment du coup faut lier les quetes à des factions, faut que le joueur puisse influer directement ou pas sur des variables diverses: les rapports de forces, les liens sociaux, les resources...
Bon après c'est vrai que c'est pas simple de faire un tel systeme avec des répercussions aisément visibles par le joueur.

Si t'as que des quêtes type "tue trois sangliers", "Ramasse 5 champignons" ou "escorte trois mineurs" avec peu de relations entre elles, c'est moins prenant que des suites de quêtes logique est scénarisé, du genre "Ton frère s'est fait assassiner, forme un groupe pour trouver le coupable", "Un mystérieux informateur a des informations à te fournir si tu l'aide à sortir d'un mauvais pas", "Il te dit qu'il y a des indices à trouver à tel endroit", "Tu découvre que ton meilleur ami est le meurtrier, tu réclames vengeance".

C'est pourtant dans le fond la même chose, mais la forme est différente. Je suis pas certain qu'en procédural il soit possible de scénariser de cette manière, de lier les quêtes entre elles de manière logique, etc, du moins ça doit être très dur.

Par contre oui, du coup on reste sur des lignes, c'est vrai.
Les factions c'est intéressant, mais ce qui est complexe, c'est de trouver ce qui motivera le joueur a se faire apprécier d'une faction. Une récompense ? Plus de quêtes ?

En tout cas il y a matière à réflexion.

Batto
29/04/2011, 20h53
Si t'as que des quêtes type "tue trois sangliers", "Ramasse 5 champignons" ou "escorte trois mineurs" avec peu de relations entre elles, c'est moins prenant que des suites de quêtes logique est scénarisé, du genre "Ton frère s'est fait assassiner, forme un groupe pour trouver le coupable", "Un mystérieux informateur a des informations à te fournir si tu l'aide à sortir d'un mauvais pas", "Il te dit qu'il y a des indices à trouver à tel endroit", "Tu découvre que ton meilleur ami est le meurtrier, tu réclames vengeance".

C'est pourtant dans le fond la même chose, mais la forme est différente. Je suis pas certain qu'en procédural il soit possible de scénariser de cette manière, de lier les quêtes entre elles de manière logique, etc, du moins ça doit être très dur.

Par contre oui, du coup on reste sur des lignes, c'est vrai.
Les factions c'est intéressant, mais ce qui est complexe, c'est de trouver ce qui motivera le joueur a se faire apprécier d'une faction. Une récompense ? Plus de quêtes ?

En tout cas il y a matière à réflexion.

On rejoint ce que disait Cailloux quelques posts plus haut.

Il faut tenter de relier la génération des quêtes au moteur social, et le moteur social à la génération de quêtes.
En gros, qu'un événement "social" puisse amener des quêtes et que la résolution (ou même l'existence) d'une quête puisse amener des événements sociaux.

Exemple con :
Événement social : un noble se fait humilier par un autre lors d'une soirée
Génération de quête : le noble humilié va te demander d'aller entarter l'autre noble en pleine rue.

Dans l'autre sens :
Génération d'une quête : aller saboter l'atelier d'un artisan rival.
Événement social à la génération de la quête : la police l'apprend et va arrêter l'artisan.
Événement social à la réalisation de la quête : l'artisan rival fait faillite, part en dépression et fait cramer son atelier de désespoir, entrainant la moitié de la ville avec lui :p

\o/

Tylers
29/04/2011, 20h59
Being en fait c'est typiquement le genre de choses qui pourraient être implémenté dans le moteur du jeux : quelles sont les caractéristiques d'un terrain favorable à une embuscade ? Isolement (pas d'habitation à moins de 1 km) + route + possibilité de se cacher (forêts, gros rochers) + petite taille de l'ensemble (genre 50m²) : on demande au moteur de repérer les zones de la carte ayant ses trois occurrences, et hop on le signifie sur la carte. Ensuite il faut trouver un prétexte pour faire bouger le gars là dessus : si son père n'habite pas dans la bonne direction il faudra voir si il aime la chasse, n'importe quoi, qu'importe les moyens.

Je rebondis juste sur cà, mais y'a pleins de choses intéressantes sur ton post et celui de oks2024 que j'aimerai développer quand je repasserai plus tard. Donc pour repérer ces zones, on le fait soit à la génération de l'univers, soit au moment ou la quête se crée et c'est certainement la meilleure solution si on se base sur ton système de quête. Le truc c'est qu'il faudrait donc prendre toutes les routes une par une dans un rayon défini autour du pnj à embusquer correspondant à ses capacités de déplacement et sonder à intervalles réguliers sur ces routes pour trouver un lieu à embuscade. Ensuite faut vérifier si un proche habite dans une des villes joignables par cette route et que çà ne fasse pas un détour. Faut donc mettre en place un système de noeud comprenant villes et routes pour pouvoir déterminer çà. Bon après faut un système de secours comme tu dis si il n'a pas de proche dans une ville joignable par une route ou il y'a possibilités d'embuscade. J'aurai plutôt vu quelque chose basé sur l'argent c'est facile à mettre en place et tout le monde bouge son cul pour çà :p.

Bon çà c’était ptet le plus simple. Après faut un moyen de signifier à un cartographe qu'on cherche un lieu d'embuscade. Sans doute le mieux est de lui demander si sur telle route c'est possible ( et ca facilite notre algo de recherche): (option de dialogue: lieu embuscade, puis choix dans une liste des routes relevant de la superficie couverte par notre carto).
Puis faut dire au futur assassiné de se rendre à tel endroit et là on a besoin d'un système global pour tout les pnj vu qu'on est en procédural, de convaincre d'aller à tel endroit selon sa crédibilité, la motivation de la personne etc. et la çà devient compliqué. ou pas. J'y ai pas trop réfléchi.
Et je suis sur que y'a plein de problèmes cachés encore :p

Mais sinon l'idée est vraiment chouette.

Oropher
29/04/2011, 21h23
Le problème avec ce système où tout est généré et tout est lié (les relations entre les personnages, les quêtes, les générations diverses), c'est que si techniquement y'a une couille (un bug ca arrive hein, cf le topic des jeux buggués), ca foire tout le système, et donc tout le jeu. Et même, tout l'intérêt du jeu. Donc y'a plutôt intérêt à avoir de bons programmeurs sur le coup, avec des preuves de programmes bétons :p

J'ai un peu peur que le fun passe à la trappe également, à vouloir faire du réaliste... Mettons qu'on aie ce système dans une ville, on bute (sans faire exprès, oups j'ai cliqué au mauvais moment) un noble, ou un homme important, ou moins important, puis on se retrouve avec sa famille à dos. Il y a fort à parier qu'on doive se débarasser de ce malus (oui, je trouve que c'est un malus de se balader dans une ville où notre tête est mise à prix!), mais ça risque d'être très difficile. Une mort se venge pas avec 5 quêtes réalisées pour la famille. Du coup on se retrouve couillon à éviter comme la peste les interactions, de peur de se faire buter. Donc soit faut prévoir un système pour pallier à ça (déménager et refaire sa vie plus loin, où personne ne nous connait, mais il faudrait alors un immense univers!), soit ça risque de plus être fun à force ("ah merde j'ai encore buté un mec, va falloir que j'évite de me montrer, j'vais rien pouvoir faire du coup")

Faut pas oublier que le but premier c'est de jouer, et si y'a pas autant de réalisme de nos jours du côté de ces interactions, j'me demande si c'est peut être pas pour rien (proposer une expérience de jeu précise au joueur, comme un film quoi, on l'amène vers une histoire et on le fait vivre cette histoire).


EDIT : Du coup je propose mon idée :
Faire des quêtes scénarisées (et pas juste "va tuer 5 loups cé pour mangé ce soir svp"), où le choix est entièrement laissé au joueur pour la réaliser.
En ce sens, Assassin's Creed m'avait déçu, je m'attendais à ça mais au final mes assassinats étaient pas si planifiés que ça et ça se terminait souvent en course poursuite où j'me cache dans un truc. Et pour en avoir un peu discuté, j'suis pas le seul dans ce cas.
Du coup ce à quoi je pense, c'est un système plus poussé de conditions de quête remplie.
En gros, on va reprendre l'exemple d'un assassinat commandité d'un noble sur un autre, du village voisin :
Il y a fort à parier que le noble te convoque juste pour dire "Faudrait le buter lui", t'accepte, mais le noble t'as juste indiqué la quête, à toi de trouver comment faire. C'est là que le système intervient : tu peux corrompre un proche de l'autre noble pour connaître les horaires où il n'est pas avec ses gardes (avec une chance qu'il aille cafter et que ça foire), tu peux engager un mercenaire pour faire l'assassinat à ta place mais ça aura des répercussions si ça s'apprend, tu peux choisir la méthode pour le tuer (poison? masse à deux mains?), tu peux effectivement planifier une embuscade si tu sais de source sûre qu'il va passer par tel chemin tel jour, etc...
En gros, le PNJ va vire sa vie. A toi de le buter sans trop t'attirer les foudres adverses (bien évidemment si tu foires et fait ça à visage découvert, ou qu'on sait que le commanditaire c'est l'autre noble, tu as foiré la mission). Et du coup ça se répercute sur plein de choses : mettons si tu réussi en ayant utilisé une masse d'arme d'un honnête forgeron, il peut fermer parce que ça nuirait à son bizness; si tu as utilisé les services d'un corrompu dans le camp adverse il faudra que tu lui rende la pareille; si tu as utilisé du poison d'un marchand véreux il te fera des prix parce que t'es un client fidèle; etc...
Du coup les persos ne seraient pas liés entre eux, c'est le joueur qui ferait le lien, et il aurait une totale liberté sur comment accomplir les quêtes qui lui sont données! Voilà, je sais pas trop si c'est réalisable, vu qu'j'y ai réfléchi très vite, je vois pas encore les défauts, mais ça va venir x)

oks2024
29/04/2011, 21h39
On rejoint ce que disait Cailloux quelques posts plus haut.

Il faut tenter de relier la génération des quêtes au moteur social, et le moteur social à la génération de quêtes.
En gros, qu'un événement "social" puisse amener des quêtes et que la résolution (ou même l'existence) d'une quête puisse amener des événements sociaux.

Exemple con :
Événement social : un noble se fait humilier par un autre lors d'une soirée
Génération de quête : le noble humilié va te demander d'aller entarter l'autre noble en pleine rue.

Dans l'autre sens :
Génération d'une quête : aller saboter l'atelier d'un artisan rival.
Événement social à la génération de la quête : la police l'apprend et va arrêter l'artisan.
Événement social à la réalisation de la quête : l'artisan rival fait faillite, part en dépression et fait cramer son atelier de désespoir, entrainant la moitié de la ville avec lui :p

\o/

Oui oui, ça c'est génial, mais ce que je me demande c'est est ce que ça suffit ?

Je veux dire, la moitié de la ville à cramé, le moins que l'ont puisse dire c'est qu'il y a une conséquence sur le monde, mais sur le personnage, et d'une certaine manière sur le joueur ? Finalement lui ça lui apporte pas grand chose, le monde à changé, pas forcément en bien ou en mal, mais il est différent. Et après ? Il va faire une autre quête qui aura d'autres conséquences, etc ?
Je trouve que ça manque d'un objectif, d'un but, et c'est la dessus que je suis curieux.

Pour pousser le concept de moteur sociale à son paroxysme, ça pourrait par exemple être réussir à se faire élire gouverneur d'un ville en partant de rien. Ça serai des parties relativement "courtes" 6-8 heures, mais avec une rejouabilité quasi infinie. Un peu comme un Dead Rising, ou on à un point de départ et un point/temps final, et entre on fait ce qu'on veux.

Batto
29/04/2011, 21h41
Le problème avec ce système où tout est généré et tout est lié (les relations entre les personnages, les quêtes, les générations diverses), c'est que si techniquement y'a une couille (un bug ca arrive hein, cf le topic des jeux buggués), ca foire tout le système, et donc tout le jeu. Et même, tout l'intérêt du jeu. Donc y'a plutôt intérêt à avoir de bons programmeurs sur le coup, avec des preuves de programmes bétons :p

Là dessus on est d'accord, point de vue technique, c'est très ambitieux :)


J'ai un peu peur que le fun passe à la trappe également, à vouloir faire du réaliste... Mettons qu'on aie ce système dans une ville, on bute (sans faire exprès, oups j'ai cliqué au mauvais moment) un noble, ou un homme important, ou moins important, puis on se retrouve avec sa famille à dos. Il y a fort à parier qu'on doive se débarasser de ce malus (oui, je trouve que c'est un malus de se balader dans une ville où notre tête est mise à prix!), mais ça risque d'être très difficile. Une mort se venge pas avec 5 quêtes réalisées pour la famille. Du coup on se retrouve couillon à éviter comme la peste les interactions, de peur de se faire buter. Donc soit faut prévoir un système pour pallier à ça (déménager et refaire sa vie plus loin, où personne ne nous connait, mais il faudrait alors un immense univers!), soit ça risque de plus être fun à force ("ah merde j'ai encore buté un mec, va falloir que j'évite de me montrer, j'vais rien pouvoir faire du coup")

Faut pas oublier que le but premier c'est de jouer, et si y'a pas autant de réalisme de nos jours du côté de ces interactions, j'me demande si c'est peut être pas pour rien (proposer une expérience de jeu précise au joueur, comme un film quoi, on l'amène vers une histoire et on le fait vivre cette histoire).

Là, je vais te répondre que le but n'est pas tant de faire du réaliste, que du crédible, le tout en évitant de donner l'impression que tout est scripté.

On est d'accord que c'est pas évident, mais c'est justement un des grands attraits du procédural. Les entités ne suivent pas un script, mais un ensemble de règles, ce qui donne cette fameuse crédibilité.
Après, on en revient au premier point, il faut que ça soit bien pensé et bien codé :p


EDIT :


Oui oui, ça c'est génial, mais ce que je me demande c'est est ce que ça suffit ?

Je veux dire, la moitié de la ville à cramé, le moins que l'ont puisse dire c'est qu'il y a une conséquence sur le monde, mais sur le personnage, et d'une certaine manière sur le joueur ? Finalement lui ça lui apporte pas grand chose, le monde à changé, pas forcément en bien ou en mal, mais il est différent. Et après ? Il va faire une autre quête qui aura d'autres conséquences, etc ?
Je trouve que ça manque d'un objectif, d'un but, et c'est la dessus que je suis curieux.

Pour pousser le concept de moteur sociale à son paroxysme, ça pourrait par exemple être réussir à se faire élire gouverneur d'un ville en partant de rien. Ça serai des parties relativement "courtes" 6-8 heures, mais avec une rejouabilité quasi infinie. Un peu comme un Dead Rising, ou on à un point de départ et un point/temps final, et entre on fait ce qu'on veux.

Je suis bien d'accord. Ce dont on discute pour le moment (moteur social, procédural, etc.) ne représente pas une fin, mais un moyen.
Tout ça ne consituera que la base du jeu, sa fondation. Après, bien sur, il faut construire par dessus, avec du scénario, de la relation sociale, de l'IA, un univers et tout le tralala.

Pour ma part, ce que j'ai en tête rejoint à peu près ce que Oropher décrit dans son EDIT : tu débarques dans un univers, tu as un certain objectif (quête, auto-fixé, autre), et après, tu te démerdes pour y parvenir.
Dans cette optique, le procédural est là pour éviter de devoir tout scripter et aussi pour éviter la répétition, et le moteur social est là pour te fournir des outils pour interagir avec cet univers.

Combiner les deux te permet d'avoir une base solide pour ce genre de jeu. Après, il faut broder par dessus pour en faire véritablement un jeu.

cailloux
30/04/2011, 05h56
Tiens, y'a-t-il quelqu'un qui serait capable de coder un aperçus d'un moteur de relation?

Voici un petit jeu qui mettrait en avant ce genre de réaction :

-Un damier de 30*30 cases.
-Dans certaines cases des pastilless qui seront autant de PNJ, définit selon un code couleur facile à interpréter et prenant en compte 2 grandes catégories d'éléments .
a/ la psychologie du PNJ : en deux points (pour commencer) Solitaire/social (allant noir au blanc) et heureux/malheureux (allant du vert au rouge) (ultérieurement on pourra diviser encore le camembert pour rajouter des éléments de personnalités). Son nom est indiqué au milieu ( genre "A" ou "B")
b/ les relations entre les PNJ : en deux points (pour commencer) Amour/haine (bleu/jaune) et protecteur/agresseur (violet/marron) Représenté par des vecteurs reliant les PNJ. l'épaisseur représentant la force de la relation. Les relations ne sont pas systématique.

Les relations entre les PNJ sont autant d'influences sur les comportements des uns et des autres [il faut encore définir les rêgles de manière précise (=fonctions mathématiques)] en prenant en compte également la distance comme facteur.

On aurait donc un jeu qui ressemblerait à ça grosso modo :

http://zecailloux.perso.neuf.fr//partage/exemple%20de%20rendu..GIF

Le jeux consisterait à bouger les pions sur le damier pour changer les relations entre les PNJ pour atteindre un objectif ( faire en sorte que A aime B ou que C déteste D etc etc.) On peut aussi injecter des produits ( par exemple de l'alccol) pour influer sur la psychologie des NPC à un instant T.

Louck
30/04/2011, 14h16
Hmm.

Fais en un cahier de charge avec un peu plus de détails (si possible) et envoie le moi par MP.
Je ne promet rien, mais si j'ai le temps je vais tenter de te le faire (ca ne semble pas si gros).

Si d'autres personnes souhaitent apporter de l'aide ?

oks2024
30/04/2011, 15h14
Pareil, je promet rien, mais je devrais avoir du temps libre dans pas longtemps.

Est ce que ça intéresserai des gens que ça se fasse sous la forme d'un "Pas à pas" expliqué ?
Du genre je (ou n'importe qui d'intéressé hein) bosse sur le code, et régulièrement je le poste sur le forum, en expliquant ce que j'ai fait, pourquoi j'ai fait ça, etc ...
Ça amènerai du développement dans le coin des développeurs (pertinent, pertinent) et ça permettrait à ce qui le souhaitent de découvrir un peu la programmation, de voir comment ça marche, etc ...

Bon, c'est pas totalement altruiste, moi ça me force à m'organiser un minimum, ça m'apporte un second regard, des suggestions, des idées, etc ...

Le but c'est pas d'apprendre à tout le monde à programmer, je penses pas que j'en serai capable et pour être franc ça ne m'intéresse pas. Mais ça ne m'empêcherai d'aborder des points technique quand on les rencontre (genre les classes, l'héritage, blabla...) avec plus pour but de faire comprendre ce que je fait, plutôt que de faire en sorte que les gens sachent le refaire.

Tout en sachant que je ne suis pas une référence, je me prend pas pour un dieu du code ou quoi que ce soit, donc il y aura des erreurs. Le principe ça serai aussi de le faire au jour le jour, donc ça implique des erreurs de design, retour en arrière, correction, etc ...

En fait je pensais faire ça pour le prochain petit jeu que j'allais commencer, mais le concept de moteur de relation m'intéresse beaucoup, alors pourquoi pas.

Point de vue technique ça serai du C# + XNA, à destination des PC, Xbox et Windows phone 7.

Si ça intéresse, je veux bien mettre en place un topic pour commencer la réflexion sur le cahiers des charges et les paramètres et les fonctions d'influences (enfin sauf si quelqu'un d'autre préfère le faire) pour décharger celui la qui s'éloigne un peu du sujet de base.

Louck
30/04/2011, 15h23
Si ça intéresse, je veux bien mettre en place un topic pour commencer la réflexion sur le cahiers des charges et les paramètres et les fonctions d'influences (enfin sauf si quelqu'un d'autre préfère le faire) pour décharger celui la qui s'éloigne un peu du sujet de base.

Je ne crois pas que ce "projet" demande autant de travail. Cela peut être discuté en privé entre les intéressés.
Après quand ca sera prêt, on peut en faire un topic pour présenter le travail et comment ca a été fait.


Concernant un topic plus "technique", je ne suis pas contre ! Mais je fais surtout du Java :rolleyes:

cailloux
30/04/2011, 15h26
Hmm.

Fais en un cahier de charge avec un peu plus de détails (si possible) et envoie le moi par MP.
Je ne promet rien, mais si j'ai le temps je vais tenter de te le faire (ca ne semble pas si gros).

Si d'autres personnes souhaitent apporter de l'aide ?

Je peux essayer de faire ça mais si quelqu'un veut m'aider, je suis super preneur (il faut au moins définir quels sont les critères en prendre en compte et comment ils influx les uns sur les autres.) et ensuite définir qu'elles équations seront utilisés pour gérer les interactions . Après on pourra discuter de l'interface.

Allez ! ça doit pas être si dur que ça, au boulot ! (mais après mon petit dej)


L'interface devra permettre de connaitre le statut de chaque PNJ dans son intégralité, voici un premier jet de ma part, il est sujet à discussion bien entendu. Dans un premier temps on peut, peut être, limiter les possibilités à 7 niveaux (= maximum, très, moyen, neutre, -moyen, -très, -maximum) Mais peut être que des équations seraient plus facile à gérer, à voir avec lucskywalker)
Dans l'idéal le moteur devrait pouvoir être facilement éditable pour : modifier les formules afin d'effectuer des tests, rajouter des possibilités pour complexifier le jeu)

Psychologie du joueur (= symbolisé par la forme du pion)
il doit rester à peu près constant dans le temps (un solitaire ne deviendra pas un hyper social) mais il peut légèrement varier néanmoins sous le coup de pression intense. Sa nature constante permettra d'empêcher les boucles de calculs

Solitaire/social (= la distance entre lui et les autres influera son bonheur si on le heurte ou si on va dans son sens) [polygone allant du triangle au cercle en 7 niveaux]
Stoïque/réceptif (= le degré avec lequel les autres PNJ influx sur son propre état) [la taille du polygone augmente avec le degré de réception]

Etat du joueur. (symbolisé par la couleur du pion)
Il est fortement dépendant de l'extérieur : il varie dans le temps en fonction de l'environnement. Il influx légèrement sur la psychologie du PNJ et fortement sur l'état des autres PNJ

Heureux/malheureux : l'Etat influx sur les relations entre les PNJ [7 niveaux de gris allant du blanc au noir]

[il serait ptet bon de rajouter un truc mais je trouve pas]

Relations entre joueurs. (= vecteurs de couleurs et d'épaisseur différente, non obligatoire (= les PNJ ne se connaissent pas ou n'ont pas d'opinion) la flêche indique le sens de la relation (qui ne sont pas forcément réciproque)

Amour/Haine (= dépendant de la distance et de l'Etat du joueur, il influx sur la psychologie des PNJ; aux maximums il engendre des résultats parfois illogique)[vecteur rouge allant de 2 à 14 pixels d'épaisseur par pallier de 2 pxl]
Protecteur/Agresseur (= il symbolise la filiation, dépendant de l'état du PNJ visé)[vecteur bleu allant de 2 à 14 pixels d'épaisseur par pallier de 2 pxl]


Un solitaire léger, hyper stoïque très malheureux serait donc représenté par [un carré de petite taille noir]
Un grand social, moyennement réceptif heureux serait donc représenté par [un cercle de taille moyenne gris clair]
Romeo et juliette serait du genre : [une grappe lié par des vecteurs bleus épais, une autre grappe lié par des vecteurs bleus épais, et un duo de points de chaque grappe relié par un vecteur rouge épais] (je connais pas assez l'oeuvre pour approfondir les psychologies et les relations entre les personnages)

Louck
30/04/2011, 15h32
Continue si tu as des idées...
Le temps que j'installe mon nouveau disque dur :p.

oks2024
30/04/2011, 15h35
Je ne crois pas que ce "projet" demande autant de travail. Cela peut être discuté en privé entre les intéressés.
Après quand ca sera prêt, on peut en faire un topic pour présenter le travail et comment ca a été fait.


C'était surtout pour décharger ce topic dont le titre ne reflète pas exactement ce qui s'y passe, maintenant qu'il y a une section dédié.



Concernant un topic plus "technique", je ne suis pas contre ! Mais je fais surtout du Java :rolleyes:

:rolleyes:

(Je déconne j'aime beaucoup le Java ^_^)

cailloux
30/04/2011, 15h44
Oui je pense qu'on peut ouvrir un topic du genre : le topic des tentatives de créations de jeux de la communauté CPC... (comme ça on prendrait en compte que ça a fail la majorité des fois...) :rolleyes:

Par contre vu que je dois déjà gérer plusieurs topics je préfèrerais ne pas le créer moi même.

Batto
30/04/2011, 15h46
Java
De tout façon, que ce soit C# ou Java, ça reste relativement semblable niveau logique de programmation.
Enfin je pense pas que ça change des masses quoi...

oks2024
30/04/2011, 15h53
Psychologie du joueur (= symbolisé par la forme du pion)
il doit rester à peu près constant dans le temps (un solitaire ne deviendra pas un hyper social) mais il peut légèrement varier néanmoins sous le coup de pression intense. Sa nature constante permettra d'empêcher les boucles de calculs

Solitaire/social (= la distance entre lui et les autres influera son bonheur si on le heurte ou si on va dans son sens) [polygone allant du triangle au cercle en 7 niveaux]
Stoïque/réceptif (= le degré avec lequel les autres PNJ influx sur son propre état) [la taille du polygone augmente avec le degré de réception]

Etat du joueur. (symbolisé par la couleur du pion)
Il est fortement dépendant de l'extérieur : il varie dans le temps en fonction de l'environnement. Il influx légèrement sur la psychologie du PNJ et fortement sur l'état des autres PNJ

Heureux/malheureux : l'Etat influx sur les relations entre les PNJ [7 niveaux de gris allant du blanc au noir]

[il serait ptet bon de rajouter un truc mais je trouve pas]

Relations entre joueurs. (= vecteurs de couleurs et d'épaisseur différente, non obligatoire (= les PNJ ne se connaissent pas ou n'ont pas d'opinion)

Amour/Haine (= dépendant de la distance et de l'Etat du joueur, il influx sur la psychologie des PNJ; aux maximums il engendre des résultats parfois illogique)[vecteur rouge allant de 2 à 14 pixels d'épaisseur par pallier de 2 pxl]
Protecteur/Agresseur (= il symbolise la filiation, dépendant de l'état du PNJ visé)[vecteur bleu allant de 2 à 14 pixels d'épaisseur par pallier de 2 pxl]




Donc si j'ai bien compris en gros la psychologie d'un personnage est fixe, et c'est son état qui varie ?

Ça me semble être une bonne idée.
J'ai un jeu de Poker en cours, avec une AI qui fonctionne un peu sur le même principe.
Chaque joueur à une psychologie qui lui est propre (flambeur, agressif, prudent, etc ...) qui reste constante quoi qu'il arrive, et ensuite une volonté.
En gros quand il ramasse sa main, en fonction de ses cartes et de sa psychologie, il va se dire "Cette main je veux la jeter/voir les cartes suivante/aller jusqu'au bout/faire tapis". Et à chaque nouvelle carte ou évolution dans le jeu la volonté est réévalué, en fonction de l'ancienne volonté et de la nouvelle situation.

Le point très compliqué, c'est analyser une situation, qu'est ce qui l'influence, et de quelle manière.

Concrètement on qu'est ce qui va rendre un personnage plus heureux ? Et de "combien" ?

On peut représenter tous les paramètres par des compteurs, genre de 0 à 100, 0 étant très malheureux, 100 très heureux, et modifier ces valeurs de bonheur.
Il faut mettre en place quels actions entraîneront quels valeurs de bonheur, et bien sur en fonction de la psychologie.

C'est un sujet de réflexion intéressant, j'y songe, et je suis curieux de voir tes idées.



De tout façon, que ce soit C# ou Java, ça reste relativement semblable niveau logique de programmation.
Enfin je pense pas que ça change des masses quoi...


Ça change rien. C'est juste que quand t'es sur un projet en C#, t'es un peu sous contrat, tu te dois de troller sur ceux qui programment en Java. Comme quand t'achète une guitare, on te la donne que si t'engage à régulièrement troller les bassistes, ou, plus généralement, quand t'achète un instrument de musique, vis à vis des batteurs. :ninja:

EDIT:



Oui je pense qu'on peut ouvrir un topic du genre : le topic des tentatives de créations de jeux de la communauté CPC... (comme ça on prendrait en compte que ça a fail la majorité des fois...)

Par contre vu que je dois déjà gérer plusieurs topics je préfèrerais ne pas le créer moi même.


Comme je le disais ça le principe m'intéresse pas mal, si personne n'y voit d'inconvénient je peux faire un topic tout propre dans la soirée, mais si quelqu'un préfère le faire avant, pas de soucis.

cailloux
30/04/2011, 16h18
Donc si j'ai bien compris en gros la psychologie d'un personnage est fixe, et c'est son état qui varie ?

Le point très compliqué, c'est analyser une situation, qu'est ce qui l'influence, et de quelle manière.

Concrètement on qu'est ce qui va rendre un personnage plus heureux ? Et de "combien" ?

On peut représenter tous les paramètres par des compteurs, genre de 0 à 100, 0 étant très malheureux, 100 très heureux, et modifier ces valeurs de bonheur.
Il faut mettre en place quels actions entraîneront quels valeurs de bonheur, et bien sur en fonction de la psychologie.

C'est un sujet de réflexion intéressant, j'y songe, et je suis curieux de voir tes idées.

Oui c'est ça, bien que je laisse la possibilité à des influences fortes ( un amour ou une haine au maximum) d'influencer (légèrement) sur la psychologie du PNJ.

En effet c'est compliqué déjà à trouver une logique et ensuite à la mettre en équation. Je proposais un système en 7 points plutôt qu'en 100 pour permettre un système de calcul par tableau à remplir plutôt que par équation. Ce système facilite aussi la lecture puisqu'on voit immédiatement l'état d'esprit du PNJ (moins de variations). Il est aussi vaguement cohérent avec le tableau de jeu en case, mais ça aussi çe peut être changé)
Pour montrer toutes les interactions le mieux (de mon avis de super néophyte) c'est de créer des tableaux ( dans mon cas en 7 cases, dans le cas d'équations une représentation graphique de la fonction. avec autant de tableau qu'il existe d'interactions.

Par exemple : pour X
Influence de la haine/amour de Y envers X

haine/amour 1 2 3 4 5 6 7
Influence sur bonheur -5 -3 -1 0 +1 +3 +5

Influence du bonheur de X en relation de sa psychologie et de la proximité de Y


Proximité (en carreaux) [1>3] [4>9] [10>15] [16>20] [>21]
solitaire max -5 -3 +1 +3 +5
Solitaire moy -3 -1 0 +1 +3
Solitaire min -2 0 0 0 +2
moyen 0 0 0 0 0
Social min +2 0 0 0 -2
Social moy +3 -1 0 -1 -3
Social max +5 +3 +1 -3 -5



Évidement la mise en page (approximative... n'est pas prise en compte 'tain !) : bref il s'agit d'un tableau quoi.

Sébum prendra la peine de déplacer toute cette discussion sur un sujet idoine, j'en suis sûr :lâche fainéant:

Tiens pour commencer il faudrait commencer à créer un organigramme de relations entre les éléments, je m'y colle.

Batto
30/04/2011, 16h57
En effet c'est compliqué déjà à trouver une logique et ensuite à la mettre en équation. Je proposais un système en 7 points plutôt qu'en 100 pour permettre un système de calcul par tableau à remplir plutôt que par équation.

Justement, j'aurais tendance à dire qu'il vaut mieux procéder par équations que par tableaux. C'est sur qu'un tableau est peut-être plus facile à lire pur un humain, mais le pc lui il s'en fout.

De plus une équation permet beaucoup plus de flexibilité qu'un tableau. Imagine que demain tu veux rajouter une variable. T'es bon pour refaire tous tes tableaux. Avec une équation, il suffit de rajouter un paramètre à ta fonction et modifier les calculs (qui peuvent être complexes hein on est d'accord, mais ça c'est le cas aussi pour les modif du tableau).

Et enfin, il est nettement plus simple et concis de stocker une équation qu'un tableau.


Dernier point, si on pense en "entités autonomes", ce qui est nécessaire pour ce genre de moteur social, chaque entité n'a pas besoin de connaitre tout ce tableau. Elle a juste besoin de savoir comment elle va réagir à telle ou telle demande/contrainte.

L-F. Sébum
30/04/2011, 17h10
Je proposais un système en 7 points plutôt qu'en 100 pour permettre un système de calcul par tableau à remplir plutôt que par équation.

Je ne vais pas répondre à tout ce qui a été dit sur ce topic, mais voici quand même mes two cents sur le débat équation/tableau.

Les tableaux, c'est bien. Dans un JdR papier.
Ca simplifie les calculs et ça permet d'avoir une idée immédiate de la situation : quand le MJ est un humain, les concepts de "content", "en colère", "ami", "ennemi" sont plus clairs que "75% de sympathie".

Par contre, dans un jeu vidéo, AMHA, il vaut toujours mieux enregistrer les données sous formes de variables (idéalement avec des nombres à virgule flottante, pour avoir tous les nombres "intermédiaires" possibles, ce qui n'est pas le cas avec une suite d'entiers) que sous forme d'un tableau.

Pourquoi ? Parce que le but, surtout dans le système que vous êtes en train de créer, est de simuler le monde réel. Or dans le monde réel il n'y a pas de "paliers", seulement une gradation.
Des étapes trop apparentes nuisent à la simulation. L'exemple qui me vient en tête est Ultima Underworld : une entité est "friendly", on lui vole un objet elle devient "peaceful", un autre elle devient "annoyed", un dernier elle est "angered" et attaque. C'est caricatural, certes, mais ça résume bien le problème.

Autre exemple : je n'ai jamais supporté les jeux où le mec court à fond la caisse jusqu'au moment où, barre de stamina vide, il est brusquement essoufflé et se met à marcher. Dans le jeu que je suis en train de coder, au fur et à mesure que la stamina diminue, le héros souffle de plus en plus fort (avec augmentation graduelle du volume et du "pitch" du son) et court de moins en moins vite, jusqu'au point (stamina = 0) où il court à la même vitesse qu'il marcherait (et souffle comme un bœuf).

Certes, c'est un peu plus compliqué quand il s'agit de relations sociales mais pas tant que ça.

En stockant les valeurs sous formes de floats, on a plein d'avantage :

- Pas de paliers donc un système plus fluide.

- En stockant les valeurs dans l'intervalle 0-1, on dispose de plein d'astuces mathématiques pour moduler les modificateurs de façon "naturelle".

Exemple : admettons que "0" signifie "admirateur aveugle" et que "1" signifie "hostile".
Quand je vole un objet sous les yeux du NPC, son état augmente de "[VALEUR ACTUELLE] ^ 2".
- Un admirateur aveugle me laissera vider son appart'.
- Un très très bon pote (0,1) ne sera quasiment pas affecté par mon premier vol.
- Par contre, deux vols seulement suffiront à faire péter les plombs à un "neutre" (0,5).

- Les valeurs n'étant jamais exactement les mêmes d'un individu à l'autre, le résultat d'une action est difficile à prédire. Dans l'exemple du dessus, mon vol aura des conséquences différentes si le mec est à 0,43 ou à 0,57 (alors que dans les deux cas, il sera décrit comme "neutre"). Si vous utilisez plusieurs valeurs pour "pondérer" le résultat du vol (agressivité, proximité idéologique/sociale...) là ça devient presque aussi complexe que le monde réel, sans noyer le CPU sous les calculs.

- Ca permet de générer des nombres aléatoires de façon fluide aussi (par exemple pour déterminer quel ligne de dialogue doit être utilisée)

Bon, après, je dois avouer que je suis complètement obsédé par l'élégance en programmation, et que j'ai parfois tendance à me tordre le cerveau en quatre juste parce que je veux UN SEUL algorithme pour représenter une situation plutôt que plusieurs (ou qu'une table). Parce que bon, merde, créer un jeu c'est être Dieu, et les règles d'un univers doivent être lisses et belles.


Sébum prendra la peine de déplacer toute cette discussion sur un sujet idoine, j'en suis sûr :lâche fainéant:

Si tu (ou quelqu'un d'autre) crée un topic, je déplace tout. Mais j'ai pas envie de le créer : flemme d'écrire le premier post et pas envie de donner l'impression que c'est moi (c-à-d la rédac) qui suis à la tête d'un projet communautaire.

cailloux
30/04/2011, 17h18
Justement, j'aurais tendance à dire qu'il vaut mieux procéder par équations que par tableaux. C'est sur qu'un tableau est peut-être plus facile à lire pur un humain, mais le pc lui il s'en fout.

De plus une équation permet beaucoup plus de flexibilité qu'un tableau. Imagine que demain tu veux rajouter une variable. T'es bon pour refaire tous tes tableaux. Avec une équation, il suffit de rajouter un paramètre à ta fonction et modifier les calculs (qui peuvent être complexes hein on est d'accord, mais ça c'est le cas aussi pour les modif du tableau).

Et enfin, il est nettement plus simple et concis de stocker une équation qu'un tableau.

Mouaip, ça c'est VOS solutions techniques, à vous de gérer !

Voici un premier aperçus du système d'influence.

http://zecailloux.perso.neuf.fr//partage/testorganigramme.gif

Vous constaterez que j'ai lâchement abandonné la variable [RELATION : Protecteur/agresseur] : je sais pas quoi en faire ni comment.

Quand 2 flèches se rencontrent celà veut dire qu'on effectue une fusion des 2 éléments pour arriver à définir le résultat : on multiplie le psycho solitaire/social [qu'on appellera désormais : PSY Soc(iabilité)] par la proximité des PNJs extérieurs pour avoir le résultat de l'Etat.

Je devrais, logiquement ajouter une flèche allant de l'ETAT heureux/malheureux [qu'on appellera uniquement ETAT vu qu'il n'y a qu'une variable pour l'instant]du PNJ vers celui du PNJ extérieur.

PROXIMITE PNJ EXTERIEUR devient : PROX
PSYCHO solitaire/social devient : PSY Soc
Dernier point, si on pense en "entités autonomes", ce qui est nécessaire pour ce genre de moteur social, chaque entité n'a pas besoin de connaitre tout ce tableau. Elle a juste besoin de savoir comment elle va réagir à telle ou telle demande/contrainte.
PSYCHO Stoïque /réceptif devient : PSY Emp(athie)
RELATION AMour/Haine devient : REL
ETAT PNJ EXTERIEUR devient : PNJ
ETAT PNJ SELECTIONNE devient : ETAT

Ça vous va comme nomenclature ?

Edit : un modèle avec des tableaux pour dessiner les courbes de fonctions (heu oui en fait ça sert sans doute à rien, mais j'ai de vague souvenir de ce genre de trucs niveau terminale ES)

http://zecailloux.perso.neuf.fr//partage/testorganigramme2.gif

A la réflexion on pourrait raisonner en terme de Action*Pondérateur>ETAT

Exemple : PROX * Psy Soc > ETAT
REL * PROX >ETAT

En rajoutant un système de contre réaction aux marges :
si ETAT*REL >95 => PROX (= En gros si le PNJ est malheureux et déteste un PNJ EXT alors il effectuera un mouvement de recul pour s'en éloigner)

Batto
30/04/2011, 18h08
floats

Bon ben t'as vachement mieux expliqué ça que moi :p

Et je te rassure, tu n'es pas seul à être obsédé par l'élégance en programmation, ainsi que par la torsion de cerveau :D

cailloux
30/04/2011, 18h09
Bon, je me charge de créer le topic.

EDIT : go go ici les zamis (http://forum.canardpc.com/threads/56465-PROG-Le-topic-des-projets-informatiques-des-canards.)

Je demande à Sebum de transvaser nos discussions.

En attendant le bougeage de topic je vous recommande une autre fois de lire ceci (http://magalie.ochs.free.fr/RIA-OchsSabouretCorruble.pdf)

oks2024
30/04/2011, 18h17
J'étais sur le point de le faire ^_^.


Mouaip, ça c'est VOS solutions techniques, à vous de gérer !

En fait c'est pas juste un point de vue technique, c'est aussi un choix de "game" design.

Avec seulement des paliers tu as un système binaire.

Un état, une action, soit elle à une conséquence, soit elle n'en a pas.

En ayant ça sur une échelle plus détaillée, ça permet de modérer un peu. On garde les paliers, ça ressemblerai à un truc du genre de 0 à 20 on est au pallier amour 1, de 20 à 40 au pallier amour 2 et ainsi de suite.
Et dans ce cas la une action peut ne rapporter que amour +5, c'est à dire pas suffisant pour changer de pallier, mais on s'en rapproche.
Je regarde les tableaux le temps que tout soit déplacer.

oks2024
30/04/2011, 18h55
Je penses qu'on devrait commencer par établir clairement un objectif avant de commencer à réfléchir sur le cahier des charges, non ?

Cailloux, je sais pas ce que tu as en tête précisément quand tu parles d'aperçu de moteur de relation, mais voilà ce que je propose:

Ce qui me plairait bien, c'est qu'au final on ai un prototype du genre une petite map, une représentation d'une pièce dans laquelle on enfermerai des personnes (représentées comme cailloux l'a décris par exemple), et qu'on les laisse "vivre leur vie" de manière autonome, dans le but arriver à observer des comportement humainement logique.

Ces personnes seraient définies par les caractéristiques dont on a parlé.
Elles peuvent se déplacer librement (enfin en fonction de leur caractère) et auraient deux ou trois actions sociales comme parler (avec des nuances, bavarder, insulter, charmer), ignorer, agresser (?), menant à terme à une sorte de simili paix sociale, ou ceux qui s'aiment pas reste généralement dans leur coin, les autre restent ensemble.

Une fois ça en place on pourrait de manière très facile ajouter un personnage joueur pour "donner des coups de pieds dans la fourmilière" et voir le résultat.

Concrètement, deux groupes "d'amis" se sont formé, neutre l'un envers l'autre, le groupe A et le groupe B. Tu deviens amis avec le groupe A, tu insulte un membre du groupe B, est ce que les deux groupes se foutent sur la gueule ?

Bon, en l'écrivant ça parait vraiment extrêmement ambitieux et complexe, mais ça n'en est pas moins intéressant.

Vous en pensez quoi, vous avez quoi comme objectif en tête ?

cailloux
30/04/2011, 18h59
Je penses qu'on devrait commencer par établir clairement un objectif avant de commencer à réfléchir sur le cahier des charges, non ?

Cailloux, je sais pas ce que tu as en tête précisément quand tu parles d'aperçu de moteur de relation, mais voilà ce que je propose:

Ce qui me plairait bien, c'est qu'au final on ai un prototype du genre une petite map, une représentation d'une pièce dans laquelle on enfermerai des personnes (représentées comme cailloux l'a décris par exemple), et qu'on les laisse "vivre leur vie" de manière autonome, dans le but arriver à observer des comportement humainement logique.

Ces personnes seraient définies par les caractéristiques dont on a parlé.
Elles peuvent se déplacer librement (enfin en fonction de leur caractère) et auraient deux ou trois actions sociales comme parler (avec des nuances, bavarder, insulter, charmer), ignorer, agresser (?), menant à terme à une sorte de simili paix sociale, ou ceux qui s'aiment pas reste généralement dans leur coin, les autre restent ensemble.

Une fois ça en place on pourrait de manière très facile ajouter un personnage joueur pour "donner des coups de pieds dans la fourmilière" et voir le résultat.

Concrètement, deux groupes "d'amis" se sont formé, neutre l'un envers l'autre, le groupe A et le groupe B. Tu deviens amis avec le groupe A, tu insulte un membre du groupe B, est ce que les deux groupes se foutent sur la gueule ?

Bon, en l'écrivant ça parait vraiment extrêmement ambitieux et complexe, mais ça n'en est pas moins intéressant.

Vous en pensez quoi, vous avez quoi comme objectif en tête ?

C'est l'idée que j'avais en tête sauf que j'y ajoutais des objectifs et, pour y arriver la possibilité d'infléchir sur les comportements des PNJ (en les faisant se droguer, faire du sport etc)... Mais bon l'essentiel c'est le moteur, ensuite ce qu'on en fait.... Tains j'ai l'impression de recréer les sims les gars, je me trompe ?

Par contre, comme je le disais tantôt le moteur doit être assez ouvert pour pouvoir ajouter des équations à volonté.

Batto
30/04/2011, 19h07
Tain j'ai l'impression de recréer les sims les gars, je me trompe ?

Il y a de ça ^_^
Il y aura surement des similarités, mais pour l'instant on ne fait que réfléchir au moteur, donc c'est normal que ça rejoigne certains trucs déjà faits. On n'est pas les seuls à avoir voulu intégrer du social dans un jeu :p

oks2024
30/04/2011, 19h07
C'est exactement ce que j'ai pensé en l'écrivant.

C'est ça sur le principe, mais pas avec la même finalité ^_^.

Sinon oui, l'essentiel c'est le moteur, mais je penses que c'est intéressant de se fixer un premier objectif pour pas partir dans tous les sens.

Louck
30/04/2011, 19h52
De ce que j'avais compris, c'étais au joueur de déplacer les pions/NPJ dans un damier, afin de modifier leurs états et leurs sentiments.
C'est sûrement plus simple... mais ca fixe les bases du moteur avant de s'attaquer à un AI plus complexe :p.

cailloux
30/04/2011, 20h00
De ce que j'avais compris, c'étais au joueur de déplacer les pions/NPJ dans un damier, afin de modifier leurs états et leurs sentiments.
C'est sûrement plus simple... mais ca fixe les bases du moteur avant de s'attaquer à un AI plus complexe :p.

Being ça ne change pas grand chose à la suite. Mieux vaux faire un moteur global et ensuite y insérer les possibilités d'action extérieure.
Enfin je vous laisser causer de ça entre développeur, moi j'y connais rien.

Louck
30/04/2011, 20h05
Disons que de définir "l'état" d'un PNJ (ou les champs d'un objet) est simple à faire, tant qu'on ne se trompe pas dans les calculs.
Lui donner la possibilité d'agir, de faire des actions, cela demande plus de travails.

Et c'est deux tâches qui peuvent se faire indépendamment (d'un point de vue technique).

cailloux
30/04/2011, 20h08
Disons que de définir "l'état" d'un PNJ (ou les champs d'un objet) est simple à faire, tant qu'on ne se trompe pas dans les calculs.
Lui donner la possibilité d'agir, de faire des actions, cela demande plus de travails.

Et c'est deux tâches qui peuvent se faire indépendamment (d'un point de vue technique).

Pour l'instant la seule action autonome que j'ai envisagé c'est le déplacement sur la grille, mais on peut en effet imaginer d'autres actions (tel que l'agression/soutiens) que j'avais envisagé au début.

oks2024
30/04/2011, 20h40
D'ailleurs question bête, tu parles d'une grille, c'est pour une raison particulière ?
Pourquoi pas un écran libre ou on peut placer les pions ou on veut ?

Louck
30/04/2011, 20h48
Pourquoi pas un écran libre ou on peut placer les pions ou on veut ?

Cela reste la même chose si on réfléchie bien, entre une position sur une grille et une position à l'écran.
Enfin l'un est plus simple à concevoir que l'autre :ninja:.

Tylers
01/05/2011, 04h42
(petite insomnie)

Ce topic a même pas atteint la page 3 et c'est déjà un bordel :XD: !
Vu qu'on a une section rien que pour les projets, ce serait pas mieux de faire: un topic, un projet ? Et éventuellement ce topic référençant le tout et servant à lancer peut être de nouveaux projets ou discuter d'idées communes.

Louck
01/05/2011, 13h28
Si je résume, ce qu'on souhaite faire pour l'instant :
- Définir la psychologie d'un PNJ (sociable, empathique...)
- Les faire bouger aléatoirement ou non dans une grille ou terrain
- Afficher leurs "états"


Et que le moteur puisse être réutilisé pour rajouter des actions au PNJ.
Il manque juste à déterminer les calculs à faire.


Non ?

cailloux
01/05/2011, 16h42
Si je résume, ce qu'on souhaite faire pour l'instant :
- Définir la psychologie d'un PNJ (sociable, empathique...)
- Les faire bouger aléatoirement ou non dans une grille ou terrain
- Afficher leurs "états"


Et que le moteur puisse être réutilisé pour rajouter des actions au PNJ.
Il manque juste à déterminer les calculs à faire.


Non ?


Oui, j'ai proposé une typologie mais personne n'a eu l'air de me contredire, c'est dommage ça aurait put être intéressant.
J'en profite pour ajouter la variable CREL qui est la contre relation (Le vecteur reliant PNJ à ETAT (par opposition à ETAT à PNJ)
Prenons une base de 0 à 1 avec la valeur médiane, 0.5 définit comme "neutre", quelles formules faut-il appliquer pour les interactions ?

Je pense remodeler ma pensée de manière plus schématique : ça sera plus facile à gérer : l'ETAT varie en fonction de FAIT (PROX; PNJ; REL; CREL) et de pondérateurs (=PSYs) je les relis par le sigle * mais la multiplication n'est pas forcément la plus adéquate le signe + veut dire que les 2 facteurs sont pris en compte.

Action :
ETAT = [PNJ+REL+PROX+CREL]*[PSY SOC+PSY Emp]

Réactions (une réaction autonome si ETAT <0.1 ou ETAT >0.9 )*(PSYs) :
PROX varie si ETAT*PSYS Soc (un solitaire fuira si il est très malheureux et très proche d'un PNJ)
REL varie si ETAT+(CREL*PSY emp) (Quelqu'un de très amoureux peut sombrer dans la haine si très malheureux et non retour d'affection)

On doit pouvoir en trouver d'autres.

PSYs varient (dans une petite mesure) si ETAT+REL+CREL+PNJ+PROX très bas ou très élevé : des évènements extérieurs fort peuvent légèrement influer sur la personnalité.

VOilà un autre schémas pour résumer.

http://zecailloux.perso.neuf.fr//partage/canardprojet2.gif

Louck
01/05/2011, 19h36
C'est quoi la différence entre REL et CREL du coup ?

J'ai du mal à voir avec ce graph...


Globalement, si je continue à résumer sans faute, la "psychologie" d'un PNJ a 4 variables :
- Empathie
- Sociable
- Relation
- "CREL" (à comparer avec Relation)

Une variable psychologique varie sur 7 niveaux (du plus mauvais au meilleur).

L'état du PNJ dépend donc de sa psychologie et de son environnement (les PNJ proches, et leurs états).
Mais son état peut faire varier sa propre psychologie (sûrement dans les situations critiques).


Donc si je ne me trompe pas, il faudra donc déterminer comment l'état peut perturber la psychologie d'un PNJ... sous quel degré.
De même, quels sont les impacts de chaque variables psychologiques sur l'état du PNJ. On peut rajouter la variable "Optimiste/Pessimiste" pour cela.


Ces calculs vont sûrement finir dans un cercle vicieux :p.

cailloux
01/05/2011, 23h14
Bon évidement j'ai eu une coupure d'électricité de secteur juste au moment d'envoyer ma réponse...


C'est quoi la différence entre REL et CREL du coup ?

J'ai du mal à voir avec ce graph...


Globalement, si je continue à résumer sans faute, la "psychologie" d'un PNJ a 4 variables :
- Empathie
- Sociable
- Relation
- "CREL" (à comparer avec Relation)

Une variable psychologique varie sur 7 niveaux (du plus mauvais au meilleur).

L'état du PNJ dépend donc de sa psychologie et de son environnement (les PNJ proches, et leurs états).
Mais son état peut faire varier sa propre psychologie (sûrement dans les situations critiques).

Donc si je ne me trompe pas, il faudra donc déterminer comment l'état peut perturber la psychologie d'un PNJ... sous quel degré.
De même, quels sont les impacts de chaque variables psychologiques sur l'état du PNJ. On peut rajouter la variable "Optimiste/Pessimiste" pour cela.

Ces calculs vont sûrement finir dans un cercle vicieux :p.

Pour plus de clarté je vais changer la nomenclature et refaire mon schémas du post précédent.
-ETAT devient : PION [en fait en théorie il est le résumé des ETATS temporaire du pion, en pratique il n'y en a qu'un pour le moment : le BONHEUR. Je rajoute un ETATX secondaire que je ne définit pas, pour plus de clarté)
-PNJ désigne donc bien le PION des autres pions.

Le REP c'est la relation de PION vers PNJ alors que le CREL c'est la relation de PNJ vers PION car je considère que les relations ne sont pas forcément réciproque.

Ce n'est pas la psychologie qui a 4 variables c'est PION.

Les PSYs sont, elles, quasiment stable (un social ne va pas devenir solitaire en gros). A noter que les PSYs peuvent varier si les FAITS sont extrêmes.

Par contre les FAITS (REL+CREL+PNJ+PROX) sont variables.

Pour résumer si tu veux définir un nouvel ETAT de PION il faut regarder quel FAIT a changé (par exemple [PROX augmente]) tu le pondère par les PSYs et tu mets à jours l'ETAT. Si, d'aventure un ETAT pondéré par les PSYS est proche des extrèmes, alors s'engage un mouvement de réaction en retour vers les FAITS.

Au lieu de faire des variables à 7 niveaux il a été préconisé de gérer tout ça par des fonctions/équations pour rendre le système plus souple et pouvoir le transformer à la volée. Justement pour ajouter des variables PSY tel [optimiste/pessimiste].

Je me demande si je suis bien clair :huh:. Ce qu'il faut définir ce sont les calculs des interactions et j'ai l'impression d'être un peu seul là dessus et je suis nul en math. :cry:

Louck
02/05/2011, 00h10
Le REP c'est la relation de PION vers PNJ alors que le CREL c'est la relation de PNJ vers PION car je considère que les relations ne sont pas forcément réciproque.

Ok, en faite c'est l'aspect "relation" qui est ambigü :p. Mais je comprend mieux.
Donc :

FAITS (REL+CREL+PNJ+PROX) == Environnement, relation avec l'extérieur (et réciproque)
PSY (EMP+SOC+...) == Psychologie du pion/pnj

Pour l'histoire des fonctions/équations, il faut au moins définir un maximum et minimum (genre 0% à 200%).

Concernant les FAITS, globalement cela sera des chiffres ronds : le nombre de pnj proche, le nombre de pnj qui nous aiment ou non... a part l'état "PNJ" qui peut être une moyenne de tout les états extérieurs, donc un réel.
Même cas pour les PSY.


Comme indiqué, on pourra donc déterminer des "sous-états", ou le score de satisfaction pour chaque états PSY : Est ce que l'associable est solitaire ou non... en est il satisfait ?

Enfin j'ai compris ca.

cailloux
02/05/2011, 00h31
Ok, en faite c'est l'aspect "relation" qui est ambigü :p. Mais je comprend mieux.
Donc :

FAITS (REL+CREL+PNJ+PROX) == Environnement, relation avec l'extérieur (et réciproque)
PSY (EMP+SOC+...) == Psychologie du pion/pnj


Voilà, les FAITS sont variables, les PSY sont peu variable, les ETATS sont très variable.



Pour l'histoire des fonctions/équations, il faut au moins définir un maximum et minimum (genre 0% à 200%).


Je sais pas si le plus simple ce n'est pas de choisir entre 0 et 1 (0.50 étant la valeur neutre n'ayant aucune influence;0.11 la valeur minimale avant réaction, 0.89 la valeur maximale avant réaction). Entre 0 et 1 parce que les fonctions ont tendance à réagir bizarrement dans ces intervalles là. De -1 à 1 pourrait être encore plus pratique.*



Concernant les FAITS, globalement cela sera des chiffres ronds : le nombre de pnj proche, le nombre de pnj qui nous aiment ou non... a part l'état "PNJ" qui peut être une moyenne de tout les états extérieurs, donc un réel.
Même cas pour les PSY.

Le nombre est en prendre en compte mais surtout les degrés en fait. Un solitaire serait tout aussi malheureux d'avoir une seule personne très proche de lui que 4 à distance moyenne. Je pense que ça serait d'ailleurs plus facile de gérer des degrés à ce niveau : il suffirait de rajouter les uns aux autres ensuite pour avoir le total.
PNJ serait plutot une moyenne des ETATS des PION extérieur...
De manière général le BONHEUR est définit par [FAITs]*[PSYs] non ?




Comme indiqué, on pourra donc déterminer des "sous-états", ou le score de satisfaction pour chaque états PSY : Est ce que l'associable est solitaire ou non... en est il satisfait ?

Exactement : le solitaire aura son bonheur inversement proportionnel à la proximité et aux nombres des PNJ alentours.: plus il est isolé, plus il est heureux.
Pour l'instant je n'ai mis que l'ETAT BONHEUR", ça me semble pas mal, mais ensuite on pourra rajouter des trucs.



*Je ne suis pas sûr que ça soit valable pour toutes les variables.

Un Demi-Solitaire [=-0.5 sur variable PSY Soc] en présence de quelqu'un de proche PROX (= à 10 mêtre la variable est à 0; 1 mêtre =-0.1; 20 mêtres = +0.9) devrait réagir en ayant une baisse du bonheur.

-0.5*-0.5 = +0.25 Donc ça marche pas. :tired:
Un Demi-Social en présence de monde devrait avoir du bonheur.
+0.5*+0.5 = +0.25 là ça marche bien par contre... :tired:

Bon j'essaye autre chose : Si Uniquement les pondérateurs [PSY] sont compris entre -1 et 1 et que les FAITS entre 0 et 1. On a, mêmes exemples :
-0.5*0.2=-0.1 : ça marche .
0.5 *0.2=+0.1 : ça marche aussi.

Essayons d'augmenter la PROX si la tendance se poursuit :

-0.5*0.1 =-0.05 : Et merde ça marche pas mon modèle est pas bon.


Je suis F*** nul en math il faut trouver une équation pour gérer ce genre de trucs et je sais pas faire. Peut être en élevant au carré ce genre de trucs...

Edit : je crois que je tiens quelque chose.

Même exemple sauf qu'on inverse le rapport de distance [-0.9= longue distance; 0.9= courte distance]
-0.5*-0.5=0.25 : ça marche, il gagne en bonheur.
0.5*-0.5 =-0.25 : ça marche, il perd en bonheur

Bon même calculs mais avec cette fois une distance plus grande
-0.5*-0.9=0.45 : ça marche : il gagne en bonheur.
0.5*-0.9 =-0.45 : ça marche il perd en bonheur.

:lol:

Ultime test : Un social doit gagner en bonheur quand la distance baisse.

0.5*0.5 = 0.25 : ça marche il gagne en bonheur
0.5*0.9 = 0.45 : ça marche il gagne encore plus de bonheur

Plus il est social plus la proximité doit lui apporter du bonheur.

0.1*0.9 = 0.09 : pas mal !
0.9*0.9 = 0.81 : Logique !

:lol:

Louck
02/05/2011, 09h44
Je remarque quand même une chose avec ces calculs :


On suppose un PNJ très faiblement insociable : 0,1 en PSY

Pour qu'il puisse gagner son bonheur au maximum, il doit être proche de tout les PNJ : 0,1 * 0,9 = 0,09

Ce qui signifie que :
- Il ne gagne pas énormément de bonheur (bon, ce n'est pas trop critique comme cas on va dire). Ni trop de malheur, d'ailleurs.
- Mais surtout, pour maximiser son score, il doit être entourer par un grand nombre de PNJ. Ce que le PION ne souhaite pas toujours.


Avis personnel : le mieux à faire est de comparer le score PSY et FAIT entre eux : un sociable/insociable est heureux quand il y a du monde/ou non, et les mitigés le seront quand il y a un nombre équitable, ect ect...

Exemple (sûrement plus simple à faire comprendre) :
_ 0,9 et 0,5 = 0,4 points de différences. Ce n'est pas gros, mais il n'est heureux qu'à 80% ( (2-0,4) / 2 ). Donc ETAT "sociable" = 0,8 (si on garde l'aspect [0, 1] pour ETAT).
_ 0,9 et -0,9 = 1,8 points de différences => cas extrême !! Seulement 10% de "bonheur" (2-1,8) / 2 ).
Donc ETAT "sociable" = 0,1
_ -0,9 et -0,1 = 0,8 points de différences (Sachant que FAIT à 0 représente le cas moyen). Ce qui donne 60% au score; ETAT "sociable" = 0,60


Il est vrai que pour qu'un PNJ soit malheureux d'un point de vue sociable, il doit toucher les cas les plus extrêmes. On peut modifier le calcul pour limiter ce problème. Par exemple, le calcul du bonheur sera de cette façon : (1-x)/2.
Si on reprend les trois précédents scores, on aura : 0.6, -0.4 (qu'on peut limiter à 0), 0.1.
Ce qui semble plus logique.


C'est une autre façon de penser.
Ou je n'ai pas tout compris, c'est autant possible :p.

TheMothMan
02/05/2011, 14h27
Si vous avez le courage, je vous conseil d'aller voir du coté des réseaux de neurones ;)

un petit liens, (mais en Anglais)
http://www.ai-junkie.com/ann/evolved/nnt1.html

cailloux
02/05/2011, 14h46
Bonne critique le cas du moyen dont la satisfaction moyenne ne lui apporte pas de bonheur.

Ton système est pas mal je dois dire.

Par contre Je ne pensais pas encore faire un ETAT sociable en fait, il s'agissait plus d'une psychologie. L'idée c'était plutôt de prendre en compte tout les FAITS, de les pondérer avec les valeurs PSYs pour donner une valeur [chagement] à appliquer au BONHEUR pour savoir ce que le BONHEUR devient après l'action.

Ton système est bon mais il ne peut pas générer de valeur négative qui ferait baisser le BONHEUR de base vers un BONHEUR après les changements de FAITS. ..

En suivant ta bonne idée on peut associer les FAITS à des PSYs :
PNJ et PROX serait dépendant de PSY emp.
REL et CREL serait dépendant de PSY Soc.

Ahhhh : j'arrête tout j'ai une super idée : je vais demander dans le topic des math ! Ahahah je suis machiavélique!

---------- Post added at 13h46 ---------- Previous post was at 13h42 ----------


Si vous avez le courage, je vous conseil d'aller voir du coté des réseaux de neurones ;)

un petit liens, (mais en Anglais)
http://www.ai-junkie.com/ann/evolved/nnt1.html

Trop de math pour moi mais ça a l'air de bien être le genre de truc qu'on cherche.

Batto
02/05/2011, 14h59
Si vous avez le courage, je vous conseil d'aller voir du coté des réseaux de neurones ;)

un petit liens, (mais en Anglais)
http://www.ai-junkie.com/ann/evolved/nnt1.html

Attention.
Je me trompe peut-être, mais pour moi, un réseau de neurones, c'est un ensemble d'entités qui agissent ensemble dans le but d'atteindre un objectif commun à cet ensemble.
Et là, ce n'est pas ce qu'on essaye de faire. Ici, le but est que chaque entité vise un but qui lui est propre, et il n'y a pas d'objectif global au système.

La grosse différence en fait, c'est que dans un réseau de neurones, les neurones ne sont pas indépendants ni autonomes. On peut voir ça comme une fourmillière plus ou moins.

En gros, on pourrait regarder du côté des réseaux de neurones pour "diriger" chaque entité (qui auraient donc chacune leur réseau de neurones) et déterminer ses décisions d'actions (une IA quoi...).


En fait, en écrivant ce message, je me rends compte que c'est peut-être bien ce que tu voulais dire depuis le début. Si c'est le cas, désolé :p

Louck
02/05/2011, 15h13
Par contre Je ne pensais pas encore faire un ETAT sociable en fait, il s'agissait plus d'une psychologie. L'idée c'était plutôt de prendre en compte tout les FAITS, de les pondérer avec les valeurs PSYs pour donner une valeur [chagement] à appliquer au BONHEUR pour savoir ce que le BONHEUR devient après l'action.


Je le considère comme un "sous-état", qu'il sera réutilisé avec d'autre sous-états pour déterminer l'état principal du PION (ou l'état BONHEUR).


Ton système est bon mais il ne peut pas générer de valeur négative qui ferait baisser le BONHEUR de base vers un BONHEUR après les changements de FAITS.

J'ai du mal m'expliquer, mais la valeur minimale sera de 0 (Si le résultat est négative, il sera fixé à 0, qu'il pleut ou non).


Mais je te laisse faire la recherche sur le topic des maths :p

cailloux
02/05/2011, 15h49
J'ai du mal m'expliquer, mais la valeur minimale sera de 0 (Si le résultat est négative, il sera fixé à 0, qu'il pleut ou non).


Oui mais non : si la valeur minimale (le pourcentage de bonheur après calcul c'est ça ?) est à 0.1 alors le bonheur ne pourra qu'augmenter, non ? Alors que si on arrive à faire du -0.1 alors il pourra diminuer !

---------- Post added at 14h49 ---------- Previous post was at 14h46 ----------


Je le considère comme un "sous-état", qu'il sera réutilisé avec d'autre sous-états pour déterminer l'état principal du PION (ou l'état BONHEUR).

Oui aussi, c'est possible j'avais proposé un seul ETAT BONHEUR vu que ça résume vraiment bien un etat d'esprit temporaire d'un pion. Par contre du coup il faut trouver les autres ETATS qui rentrerait en compte pour définir le BONHEUR et comment ils interagissent entre eux et comment on les calcules ( via les FAITS et les PSY's):wacko:

Louck
02/05/2011, 16h08
Je dirais que ca se base sur la satisfaction de chaque cas psychologiques ? (sociable et empathie)

cailloux
02/05/2011, 16h18
Je dirais que ca se base sur la satisfaction de chaque cas psychologiques ? (sociable et empathie)

Non.

FAITS = environnement : n'a pas en sois de valeur "morale" on Définit juste un point de moyenne. Il varie dans le temps de manière autonome.
PSYs = perception de l'environnement : définit l'individu. Il invariable sauf cas exceptionnel.
ETATs (Bonheur/MALHEUR) = mise en relation de FAITS et PSY : comment l'individu se sent à un instant T.

D'ailleurs en toute logique intuitive (huhu) Les FAITS étant neutre ils devraient être compris entre 0 et 1 (moyenne =0.5). Par opposition aux PSYs qui peuvent être négatif (donc compris entre -1 et 1, moyenne = 0 ) non ? A moins que ce soit l'inverse...

BOn ils attendent quoi pour me répondre sur le topic des maths ^^

TheMothMan
02/05/2011, 16h28
En gros, on pourrait regarder du côté des réseaux de neurones pour "diriger" chaque entité (qui auraient donc chacune leur réseau de neurones) et déterminer ses décisions d'actions (une IA quoi...).


Oui, je parlais pas d'un objectif commun.
En gros, en fonction de qu'il a autour de lui et de certains paramètres qui le définissent, je me dit que ça pourrait permettre de calculer la valeur ETAT.

mais il y a surement plus simple :)

cailloux
02/05/2011, 16h29
En fait, en écrivant ce message, je me rends compte que c'est peut-être bien ce que tu voulais dire depuis le début. Si c'est le cas, désolé :p

Oui c'est ce qu'on fait : on demande à une entité de rassembler des FAITS de les analyser via ses PSYs et de définir si il est plus ou moins BONHEUR.

---------- Post added at 15h29 ---------- Previous post was at 15h29 ----------


Oui, je parlais pas d'un objectif commun.
En gros, en fonction de qu'il a autour de lui et de certains paramètres qui le définissent, je me dit que ça pourrait permettre de calculer la valeur ETAT.

mais il y a surement plus simple :)

Non, c'est exactement ça.

Louck
03/05/2011, 01h02
J'ai lu le topic des matheux, et en effet, on n'offre pas assez de données.

L'idée de la limite [-1;1] est retenu. Il faut juste définir les cas "-1", "0", et "1", pour un peu tout les états et calculs.
C'est à discuter pour ETAT (ou avec les matheux :ninja:).

Je me perd facilement avec le vocabulaire et les calculs. Il faudra faire un résumé de tout ce qu'on souhaite déterminer.


Globalement, qu'est ce qu'on a...

Variable du PION, définit au préalable (donc pas de calculs; PSYs) :
- PSY EMP
- PSY SOC

Variable du PION, à calculer (ETATS)
- ETAT EMP (secondaire. Est ce que son PSY EMP est satisfait ou non ?)
- ETAT SOC (secondaire. Est ce que son PSY SOC est satisfait ou non ?)
- ETAT BONHEUR (principal. Ce qu'on recherche au final)


Variable de l'environnement (externe du PION; FAITS) :
- Etat des autres PNJ (PNJ)
- Nombre de PNJ autour du PION (à quel moment on peut dire que le score est à 1, 0, et -1 ? Et comment cela varie ? A quel distance ?) (PROX)
- Relation et Contre-Relation avec les autres PNJ (REL et CREL)


Autre question : Faut il limiter le score REL/CREL/PNJ sur une certaine distance du PION ? Ou on prend en compte tout les PNJ de l'environnement ?


Il est tard, j'ai du esquiver certaines choses... Tu peux me corriger.
Je compléterais plus tard. Mais pour l'instant, c'est surtout savoir comment on détermine X ou Y (sans faire, obligatoirement, les calculs).

oks2024
03/05/2011, 01h53
J'avais 7 heures de train aujourd'hui, du coup j'ai sorti visual et commencé à programmer un prototype, mais j'ai fais quasiment tout de tête vu que j'avais à ce moment la plus d'accès internet. Donc j'ai un peu improvisé en fonction de ce que j'avais en tête, et seulement pour la sociabilité (dans un premier temps).

Bon, en gros ce que j'ai fait c'est mettre en place une classe Character, c'est à dire une entité qui représente un personnage.

Un Character possède plusieurs attributs. En gros:


Sociable: ça c'est un aspect psychologique du personnage, fixe (du moins pour l'instant). Pour le moment il est prévu entre -1 et 1, -1 représentant un associale, 1 représentant une personne qui aime les gens.

Happiness: bonheur du personnage, recalculé sans arrêt. Pour l'échelle, j'attends de m'attaquer sérieusement à la partie mathématique avant de décider.

PreviousHappinnes: Bonheur de la frame précédente, j'en reparlerai.

Distances: C'est ce qu'on appelle un dictionnaire, il associe à la liste de tous les personnages une distance. Ça permet de savoir ou se situent tous les autres personnages par rapport au personnage courant. Mis à jour à chaque frames.

ViewDistance: Une idée que je vais tester, la distance de vue. Concrètement si on définie cette valeur à 500, le personnage ignorera tout ce qui se passe au dela de 500 pixels. Donc s'ils sont deux, il se sentira aussi seul si l'autre personnage est à 550 pixels que s'il est à 1000.


Je passe sur les trucs purement technique.

J'ai aussi mis en place quelques fonctions, pour mettre à jour le dictionnaire distances et mettre à jour la happiness (il me manque juste le calcul, j'avais plus de batterie :/).

J'ai aussi commencé à penser à un système de déplacement automatique tout simple. Je vais essayer de faire en sorte que les personnages soient déplaçable à la main, mais aussi qu'ils avancent tout seul.
En gros les personnages avancent toujours tout droit, à chaque déplacement on recalcule donc leur bonheur. Tant que le niveau de bonheur augmente ils continuent tout droit. Si le niveau de bonheur baisse ils virent sur la gauche ou sur la droite (aléatoirement). C'est pour ça que je garde une trace du niveau de bonheur de la frame précédente. De cette manière il devraient avoir tendance à se regrouper de manière à être le plus heureux possible. Je vais tenter voir ce que ça donne, de toutes manières les calculs de trajectoires sont pas compliqués.


Pour l'aspect technique (qui intéresse peut être pas d'ailleurs :p) j'ai aussi fait une classe CharacterManager, qui gère les Character. C'est par elle qu'on passe par exemple si on veut ajouter un nouveau personnage, elle se charge alors de prévenir tout es autres personnages qu'un petit nouveau est arrivé et que ça serait sympa d'en tenir compte.


Bon, voilà à peu près ce que j'ai fait pour le moment, ça reste très théorique, mais c'est normal c'est le début. Il me reste à faire le calcul du bonheur, les placements déplacements et l'interface graphique, histoire d'avoir un retour visuel. A priori j'aurai pas le temps demain, je penses faire ça après demain.
Si vous avez des commentaires, remarques, critiques, hésitez pas, c'est pour ça que j'ai tenu à faire un mini compte rendu.

Louck
03/05/2011, 08h25
Concernant la technique, je préfère attendre la fin des calculs et psychologies (vu qu'il n'y a que ca à faire, pour définir un PNJ). J'ai aussi ma propre idée de conception (que je montrerais à la fin).

Par contre je vois mal comment tu vas gérer la "Distance", sans que ca soit redondant entre 2 PNJ. Je vais faire un truc toute bête à ce niveau, donc tu as sûrement une meilleure idée là dessus.

Ca va finir en plusieurs programmes différents :ninja:.

oks2024
03/05/2011, 11h49
C'est peut être pas plus mal d'avoir plusieurs bases de programme dans un premier temps, on pourra tout mettre en commun ensuite et garder le meilleur de chaque.

Pour les distances, concrètement, mettons qu'on à 4 PNJ, fort pertinemment nommés PNJ1, PNJ2, PNJ3 et PNJ4.

Déjà le character manager va s'assurer que tout ces PNJ se connaissent entre eux.
Ensuite par exemple le dictionnaire de PNJ1 aura cette tête:


PNJ2 --- la distance PNJ1-PNJ2
PNJ3 --- la distance PNJ1-PNJ3
PNJ4 --- la distance PNJ1-PNJ4


En effet la distances PNJ1-PNJ2 par exemple est aussi présente dans le PNJ2.

Je pourrais gérer les distances un niveau plus haut, c'est à dire dans le character manager, qui aurai un tableau global, du genre




PNJ1 PNJ2 PNJ3 PNJ4

PNJ1
PNJ2
PNJ3
PNJ4

La plus de redondance, mais ça implique que le Character connaisse sont manager, ce qui n'est pas le cas pour l'instant, pour pouvoir l'interroger quand il à besoin d'une information.
Mais merci de le souligner, je vais y reflechir ;).

Louck
03/05/2011, 12h14
En faite, tu as un peu raison d'implémenter de cette façon.
Mais il faudra l'agrémenter d'un autre paramètre : la relation du PION vers chaque PNJ.

Comme cela, l'histoire de redondance n'est plus un problème, mais une nécessité pour d'autres calculs (de relations et contre-relations).

Came Yon
03/05/2011, 15h28
Oh putain j'avais jamais vu cette section du forum !:O

J'aime beaucoup ce que vous essayez de faire. J'ai bien envie de contribuer. Du point de vue technique, je fais du fortran toute la journée, ca va pas beaucoup aider...
Je suis moins bon que les mecs du topic des matheux, mais j'ai bien envie de réfléchir aux fonctions mathématiques qui serviront à définir votre modèle.
Je relis tout le topic ce soir et on verra ce que ça donne.

Pour oks2024:
Ca a l'air compliqué ton affaire.
J'ai en tête quelque chose comme un fonction densité de population. Avec ca, a chaque début de frame, on peut calculer sur toute la carte/grille une fonction à valeur dans [0,1] qui donne une indication du nombre d'entités dans les environs.

Par exemple. A la position P, on regarde s'il y a des entités dans un rayon R, on calcule la somme des inverses de la distance à P de chaque entité. On a alors un nombre Densité(P). Il suffit de répéter l'opération à chaque point de la grille. Ensuite c'est facile de normaliser la fonction Densité pour qu'elle soit dans l'intervalle voulu [0,1]. A la fin on a une carte de la Densité qui peut être utilisée par toutes les entités car indépendante de leur personnalité. Par exemple, si un solitaire/sociable trouve un point voisin qui a une densité plus faible/forte, il s'y déplacerait.

Voila, ça serait ptêt plus simple que de calculer des trucs redondants pour chaque personnage. Après pour l'implémentation je sais pas si c'est plus facile.

Si il faut prendre en compte des paramètres dépendants de chaque entité, ca devient plus compliqué.

oks2024
03/05/2011, 18h11
J'avais pas vu ça du tout comme ça, mais c'est très intéressant comme manière de faire.

J'ai pas (pour l'instant du moins) implémenté de système de grille, mais rien ne m'empêche en effet de faire un quadrillage logique, invisible, de calculer la densité pour chaque case et ensuite de calculer la valeur de bonheur d'un personnage en fonction de cette densité, et de son niveau de sociabilité, donc pour ce paramètre ça me semble pas trop problématique.

En fait j'ai d'abord bâti ma logique sur un parti pris: chaque entité est autonome et est influencé par ce qu'elle connaît et ce qu'elle calcul. Concrètement là chaque personnage calcul combien d'autres personnages l'influence, la distance (normalisée) de chaque, et donc la distance (normalisée) moyenne des PNJ l'entourant. L'étape suivante étant sélectionner les paramètres les plus pertinent, mélanger tout ça et en sortir une valeur de bonheur.Et c'est vrai que ça implique de la redondance.

Mais en effet c'est pas forcément le meilleur moyen de faire, se placer du point de vue du terrain plutôt que de celui du personnage est dans cas cas très intéressant.

Ça peut devenir problématique si on décide de mettre en place des liens d'amitié par exemple.

Un personnage est solitaire, mais il peut quand même avoir un ami dont il apprécie la proximité. En calculant l'impact des distances du point de vue du personnage, on peut réduire (ou inverser) l'impact de la présence d'un ami.
En le faisant du point de vue du terrain on ne peut pas, mais on peut toujours associer la densité et la présence d'un ami, et en tirer une valeur approprié.

Je penses que je vais tester les deux systèmes (je penses pas que ce soit très long à faire) et je verrais ce que ça donne en pratique.

cailloux
03/05/2011, 18h42
J'ai lu le topic des matheux, et en effet, on n'offre pas assez de données.

L'idée de la limite [-1;1] est retenu.

Being j'ai pris cet intervalle comme ça, mais, de mémoire ya pleins de fonction qui se déroule bizarrement dans cet intervalle, peut être que ce n'est pas une si bonne idée. Faut voir avec les matheux.


Il faut juste définir les cas "-1", "0", et "1", pour un peu tout les états et calculs.
C'est à discuter pour ETAT (ou avec les matheux :ninja:).

Je me perd facilement avec le vocabulaire et les calculs. Il faudra faire un résumé de tout ce qu'on souhaite déterminer.


Globalement, qu'est ce qu'on a...

Variable du PION, définit au préalable (donc pas de calculs; PSYs) :
- PSY EMP
- PSY SOC

Variable du PION, à calculer (ETATS)
- ETAT EMP (secondaire. Est ce que son PSY EMP est satisfait ou non ?)
- ETAT SOC (secondaire. Est ce que son PSY SOC est satisfait ou non ?)
- ETAT BONHEUR (principal. Ce qu'on recherche au final)



Je suis d'ac avec ça



Variable de l'environnement (externe du PION; FAITS) :
- Etat des autres PNJ (PNJ)
- Nombre de PNJ autour du PION (à quel moment on peut dire que le score est à 1, 0, et -1 ? Et comment cela varie ? A quel distance ?) (PROX)
- Relation et Contre-Relation avec les autres PNJ (REL et CREL)


Je pensais :
inférieur à 5m = -1
supérieur à 10 m =1 (ou l'inverse selon ce qui arrange.


Autre question : Faut il limiter le score REL/CREL/PNJ sur une certaine distance du PION ? Ou on prend en compte tout les PNJ de l'environnement ?


En fait PROX serait plutôt modulé par le PSY Soc
le PNJ, REL et CREL par le PSY Emp non ? ça serait plus logique finalement. On peut même carrément créer un PSY par FAITS, tout simplement. Du coup on aurait PROX1(PSYProx1) PROX2(PSYProx2) , PROXx(PSYPROXx) qui serait ptet plus facile à gérer ?

---------- Post added at 17h42 ---------- Previous post was at 17h37 ----------


Truc malin

Pas mal oui, très simple à mettre en place (je suppose), futé...

Came Yon
03/05/2011, 21h42
Hop j'ai fait des ptits dessins et un ou deux calculs.

J'ai simplifié le problème pour voir ce que je peux déjà trouver.

Je me concentre sur une seul caractéristique d'une entité, la sociabilité (S). Et un seul forçage externe, la densité de population (D). Pour l'instant pas de lien d'amitié. Je cherche à lier S et D au bonheur (B). Donc trouver une équation qui donne le bonheur induit par la densité de population sur l'entité, en fonction de sa sociabilité.
Mes contraintes :

B est dans [0,1], 0 malheureux, 1 heureux.
S est dans [-1,1], -1 asocial, 1 hypersociable
D est par définition dans [0,1], on suppose qu'on a normalisé D à 1
Je veux qu'un individu asocial soit malheureux quand il est très entouré: B(-1,1)=0
AU contraire, un individu sociable est heureux quand il y a plein de gens autour de lui : B(1,1)=1
Ensuite, les cas contraires quand il n'y a personne autour de l'individu : B(-1,0)=1 et B(1,0)=0

Pour vérifier toutes ces contraintes, j'ai trouvé B= S*(D-0.5) + 0.5.
Ça doit être ce qu'il y a de plus simple.

Avec ça, il n'y a pas d'effet de seuil. On voit qu'une entité avec S<0 devra se déplacer pour diminuer D et augmenter son bonheur, au contraire, si S>0, il faut augmenter D pour augmenter B. Par contre un personnage avec S=0 ne sentira aucun impact des variations de D sur son bonheur.

C'est vachement simplifié, mais ça peut vous donner un exemple de fonction simple à utiliser. On peut faire la même chose pour les interactions "caractéristique du perso"<->"forcage externe" qui ont un impact sur le bonheur. Il suffit d'attribuer un poids différent à chaque cas.

Bon j'ai pas utilisé la même nomenclature. Pour résumer, on peut facilement définir des fonctions ETAT1=f(PSY,FAIT1), ETAT2=f(PSY,FAIT2), ... FAITi pouvant être la densité de population, la température de l'air, l'odeur du voisin le plus proche, etc...

Alors on peut trouver le bonheur total ETATtotal= w1*ETAT1 + w2*ETAT2 + ...
Accessoirement, somme(wi)=1 pour avoir ETATtotal dans [0,1]

Les wi sont des poids qu'on peut définir à la main ou attribuer aléatoirement à chaque perso. Un perso accorderait alors plus d'importance au FAIT1 qu'au FAIT2 si w1>w2. Alors pour 2 perso avec les mêmes PSY, la voie pour optimiser ETATtotal ne sera pas la même si leurs wi sont différents. J'imagine que ETATtotal pourrait être le bonheur par exemple.


Ca me semble pas trop compliqué. Dans le calcul des FAIT on peut intégrer des considérations liées aux caractéristiques, relations des autres entités pour compliquer un peu le tout, tant qu'on se retrouve toujours avec une échelle entre [0,1]. Les FAIT indépendants des entités peuvent tous être représentés avec des cartes de densité (ex: l'odeur du plus proche voisin, la température...). Pour ce qui dépend des relations entre entités, je vais essayer d'y penser...

Louck
04/05/2011, 09h42
Mise à jour : je définis ma "vision" sur les variables et calculs (en résumé, toujours) :

J'estime que la limite de tout les variables est [-1; 1] (avec 0 comme milieu). Sûrement plus lisible qu'un [0; 1], ou des pourcentages.


[PSY] Variable du PION, définit au préalable (donc pas de calculs) :
- PSY EMP : -1 = Stoïque; 1 = Réceptif
- PSY SOC : -1 = Solitaire; 1 = Social (en groupe)

[FAITS] Variable de l'environnement (externe du PION) :
- [PNJ] (Etat des autres PNJ) = Moyenne de l'ETAT principal de tout les PNJ (exception du PION)
- [PROX] (PNJ autour du PION) = Distance moyenne des PNJ, par rapport au PION
- [REL] (Relation) = Distance et score de relation du PION envers les autres PNJ
- [CREL] (Contre-Relation) = Distance et score de relation des PNJ envers le PION

Variable du PION, à calculer (ETATS)
- ETAT EMP = PSY EMP, [PNJ], [PROX]
- ETAT SOC = PSY SOC, [REL], [CREL]
- ETAT BONHEUR (principal) = ETAT EMP, ETAT SOC



Voila en gros les éléments de calculs.
S'il n'y a pas d'erreurs, il faut donc trouver la formule de calcul pour chaque éléments :p.

Batto
04/05/2011, 10h32
Ça commence à prendre forme un peu :)

Mise à jour : je définis ma "vision" sur les variables et calculs (en résumé, toujours) :

J'estime que la limite de tout les variables est [-1; 1] (avec 0 comme milieu). Sûrement plus lisible qu'un [0; 1], ou des pourcentages.

Je pense que c'est plus adapté également. Ça permet plus facilement de représenter des opposés.



[PSY] Variable du PION, définit au préalable (donc pas de calculs) :
- PSY EMP : -1 = Stoïque; 1 = Réceptif
- PSY SOC : -1 = Solitaire; 1 = Social (en groupe)

[FAITS] Variable de l'environnement (externe du PION) :
- [PNJ] (Etat des autres PNJ) = Moyenne de l'ETAT principal de tout les PNJ (exception du PION)
- [PROX] (PNJ autour du PION) = Distance moyenne des PNJ, par rapport au PION
- [REL] (Relation) = Distance et score de relation du PION envers les autres PNJ
- [CREL] (Contre-Relation) = Distance et score de relation des PNJ envers le PION
Une remarque ici, c'est que en ne prenant que la moyenne, tu perds les extrêmes.
Exemple : un associal se retrouve coincé (pour une raison X ou Y) dans un groupe de mecs sociaux. Ils seront tous super contents, sauf lui qui sera très malheureux.

Ta moyenne te donnera un [PNJ] élevé, aux alentours de 0.8 par exemple. Du coup, même si ton perso est super réceptif, il ne se sentira pas désolé(alors qu'il devrait) pour le pauvre asocial coincé et malheureux.


Variable du PION, à calculer (ETATS)
- ETAT EMP = PSY EMP, [PNJ], [PROX]
- ETAT SOC = PSY SOC, [REL], [CREL]
- ETAT BONHEUR (principal) = ETAT EMP, ETAT SOC

Du coup pour la formule (je garde toujours EMP comme exemple, mais ça s'applique pour tous évidemment), il faudrait tenir compte de l'état de chaque PNJ plutôt que la moyenne.

Pour les paramètres des fonctions, pour moi tu pourrais presque les mettre tous les 4 pour EMP et SOC.
Pour EMP par exemple, il pourrait compatir d'autant plus qu'il apprécie le PNJ (donc [REL]) ou qu'il se sent apprécié (donc [CREL]).
Pour SOC, [PROX] me semble pertinent aussi. Il sera plus heureux socialement s'il est proche de quelqu'un qu'il apprécie (même si'l est asocial) ou loin de quelqu'un qu'il n'apprécie pas (même s'il est social).

Après, le risque c'est de se retrouver avec des équations identiques ou presque pour les deux états ^_^.

Wxug
04/05/2011, 10h59
J'vais pas mentir, j'ai lu en diagonale. :)

Est-ce qu'il y a un système du genre "Je ne vous aime pas mais alors pas du tout mais seul vous êtes compétence/disponible/fiable pour faire ce dont j'ai besoin" ? :)

Louck
04/05/2011, 11h51
Est-ce qu'il y a un système du genre "Je ne vous aime pas mais alors pas du tout mais seul vous êtes compétence/disponible/fiable pour faire ce dont j'ai besoin" ?

Tout ce qui est actions/réactions d'un PNJ, on n'est pas encore là :p.

cailloux
04/05/2011, 14h18
ETAT SOC = (PROX)f(PSY Soc)
Si Psy SOC<-0.33 : Il faut une courbe qui part de +1 et qui tend vers -1
Si Psy SOC>+0.33 :une courbe qui part de -1 ety qui tend vers +1
SI Psy SOC entre -0.33 et +0.33 une courbe qui part de -1 qui tend vers +1 aux alentours de 0 et qui tends vers -1

http://zecailloux.perso.neuf.fr//partage/courbes.GIF

Batto
04/05/2011, 14h23
ETAT EMP =
Si Psy SOC<-0.33 : Il faut une courbe qui part de +1 et qui tend vers -1
Si Psy SOC>+0.33 :une courbe qui part de -1 ety qui tend vers +1
SI Psy SOC entre -0.33 et +0.33 une courbe qui part de -1 qui tend vers +1 aux alentours de 0 et qui tends vers -1

http://zecailloux.perso.neuf.fr//partage/courbes.GIF

Va falloir nommer tes axes, parce que là, c'est pas super clair :p

cailloux
04/05/2011, 14h31
Pour SOC, [PROX] me semble pertinent aussi. Il sera plus heureux socialement s'il est proche de quelqu'un qu'il apprécie (même si'l est asocial) ou loin de quelqu'un qu'il n'apprécie pas (même s'il est social).

Oui.

Du coup ça serait pas beaucoup plus simple de faire un PSY FAIT pour chaque FAIT qui donnerait un ETAT= FAIT(PSY FAIT) ? ça serait d'autant plus facile de créer des profils différents ? Éventuellement si on trouve des

---------- Post added at 13h31 ---------- Previous post was at 13h29 ----------


Va falloir nommer tes axes, parce que là, c'est pas super clair :p

Abscisse : FAIT
Ordonné : ETAT

1er cas : plus le PROX est bas plus il est heureux : un solitaire
2eme cas : plus le PROX est haut, plus il est heureux : un social
3eme cas : plus le PROX tends vers des extrêmes plus il est malheureux : un "moyen"
4eme cas possible : un [psychotique (insérer ici un terme de psychiatrie)] pourrait avoir la courbe de 3 inversé il n'est heureux que si il est seul ou dans une foule.]

Ce qui m'ennuie c'est que du coup il faut faire 3 fonctions et j'aurais préféré une seule pour tout résumer...

Came Yon
04/05/2011, 14h54
Ce qui m'ennuie c'est que du coup il faut faire 3 fonctions et j'aurais préféré une seule pour tout résumer...

D'où l'intérêt de fonctions à plusieurs variables qui admettraient les 3 fonctions commes cas limites. Ca doit pouvoir se faire.

Batto
04/05/2011, 15h00
D'où l'intérêt de fonctions à plusieurs variables qui admettraient les 3 fonctions commes cas limites. Ca doit pouvoir se faire.

Oui c'est faisable sans trop de problème :)

Bon, il faut un peu jongler avec des maths (et ça fait longtemps que je l'ai plus fait...), mais je suis sur que des canards matheux ont l'habitude de telles fonctions.
L'important, c'est de bien déterminer quelles variables influencent quoi et dans quelles mesures. La mise en équation après relève plus du détail d'implémentation (sans connotation péjorative hein :p).

cailloux
04/05/2011, 16h39
Oui c'est faisable sans trop de problème :)

Bon, il faut un peu jongler avec des maths (et ça fait longtemps que je l'ai plus fait...), mais je suis sur que des canards matheux ont l'habitude de telles fonctions.
L'important, c'est de bien déterminer quelles variables influencent quoi et dans quelles mesures. La mise en équation après relève plus du détail d'implémentation (sans connotation péjorative hein :p).

Being faut voir avec le topic des matheux quoi, mais ils ont pas l'air super intéressé.

Møgluglu
04/05/2011, 17h24
Faut dire que vos histoires sont compliquées et pas super définies...
Pourquoi une fonction en 1-|D-S| ça vous irait pas, par exemple?
Avec D la densité de population entre 0 et 1, et S ma sociabilité, qu'on définit par la densité de population dans laquelle je me sens le plus à l'aise. Plus on s'en éloigne dans un sens où dans l'autre, moins je suis content.

On peut pondérer ensuite par un facteur de sensibilité/empathie E, donnant E(1-|D-S|).

Variante possible avec un carré à la place de la valeur absolue. Mais il faudrait quelques exemples et contre-exemple concrets, parce que là je vois pas trop ce qui fait qu'une fonction est meilleure qu'une autre...

cailloux
04/05/2011, 19h26
J'essaie de traduire en phrase : le - entre D et S veut dire : mettre en relation c'est ça ? Donc ta formule c'est :

Mettre en relation la réalité des faits [D] avec ce que veut l'individu [S] : si D est proche de S alors la valeur tend vers 0, si D est éloigné de S alors la valeur tend vers 1.

Du coup pour contrecarrer le fait de l'augmentation tu soustraits 1 : comme ça à la fin de la formule le rapport s'inverse et plus l'individu est heureux plus la valeur sera haute. En gros si D=S : Hausse maximale.

J'ai bien comprit ? ça a l'air pratique et en plus facile à mettre en place.

Pour l'exemple d'un individu "moyen" (0.5) on a
1- [0.2-0.5] = 1.3
1- [0.3-0.5] = 1.2
1- [0.4-0.5] = 1.1
1- [0.5-0.5] = 1
1- [0.6-0.5] = 0.9
1- [0.7-0.5] = 0.8
1- [0.8-0.5] = 0.7

Ça marche pas : normalement (je veux dire théoriquement hein) le max devrait être quand D=S hors ce n'est pas le cas. Comment gérer le cas "moyen" ?

Par contre j'adore la simplicité théorique de dire : si D = S alors bonheur. Très pratique et permettant de gérer les cas intermédiaires : S= 0.7.Et aussi pour tout les cas de figures en définitive : [FAIT réèl - FAIT voulu] pourrait marcher pour toutes les idées qui nous prendrait.

Il faudrait trouver la formule permettant de gérer aussi bien tout les cas. Peut être en jouant avec les intervalles ?

Batto
04/05/2011, 19h37
Pour l'exemple d'un individu "moyen" (0.5) on a
1- [0.2-0.5] = 1.3
1- [0.3-0.5] = 1.2
1- [0.4-0.5] = 1.1
1- [0.5-0.5] = 1
1- [0.6-0.5] = 0.9
1- [0.7-0.5] = 0.8
1- [0.8-0.5] = 0.7

Ça marche pas : normalement (je veux dire théoriquement hein) le max devrait être quand D=S hors ce n'est pas le cas. Comment gérer le cas "moyen" ?



Il faut prendre la valeur absolue de D-S.

1- |0.2-0.5| = 0.7
...
1- |0.5-0.5| = 1
...
1- |0.8-0.5| = 0.7

ElGato
04/05/2011, 19h39
Euh, le "-" veut dire "-". Soit "moins". Une bête soustraction.

Et avec la valeur absolue ça marche, le max est quand D = S.

edit : woké grillé.

cailloux
04/05/2011, 19h42
Il faut prendre la valeur absolue de D-S.

1- |0.2-0.5| = 0.7
...
1- |0.5-0.5| = 1
...
1- |0.8-0.5| = 0.7

Aaaaah 'tain je savais bien que les "| " avait un sens me souvenus plus lesquelles ! :ninja:

Elgato : oui je sais que moins c'est moins, c'était pour transcrire en mot l'opération... (je suis pas un gros littéraire mais en math je suis noob)

Du coup son système est excellent non ? On pourrait en effet le moduler avec une valeur psychologiqe "générale" qui serait l'empathie : l'influence de l'environnement sur l'individu dépends de son environnement, de ce qu'il veut pour environnement et de sa façon de gérer cette influence.

C'est trop super non ?

Louck
04/05/2011, 20h47
Ca reprend mon idée, mais en plus "fonctionnelle" :ninja:.

On peut faire comme cela en effet, mais on ne doit pas utiliser des valeurs négatives pour ce genre de fonction.
Du coup, les limites [-1; 1] n'est pas à prendre en compte, mais plutôt [0; 1].



Une remarque ici, c'est que en ne prenant que la moyenne, tu perds les extrêmes.
Exemple : un associal se retrouve coincé (pour une raison X ou Y) dans un groupe de mecs sociaux. Ils seront tous super contents, sauf lui qui sera très malheureux.

Ta moyenne te donnera un [PNJ] élevé, aux alentours de 0.8 par exemple. Du coup, même si ton perso est super réceptif, il ne se sentira pas désolé(alors qu'il devrait) pour le pauvre asocial coincé et malheureux.

La moyenne ne compte pas le cas personnel.
En effet, c'est le risque d'une "moyenne", mais ca représente un peu ce qu'on recherche.
A voir avec Cailloux ce qu'il souhaite pour son fait PNJ dans ce cas.



Du coup pour la formule (je garde toujours EMP comme exemple, mais ça s'applique pour tous évidemment), il faudrait tenir compte de l'état de chaque PNJ plutôt que la moyenne.

Pour les paramètres des fonctions, pour moi tu pourrais presque les mettre tous les 4 pour EMP et SOC.

J'en pense autant...
Mais va voir cela avec cailloux :p. J'ai repris sa définition, qui n'est pas non plus super fausse.
J'ai eu la même pensée que toi, mais il faut être capable de "partager" ces calculs.. Le but est de ne pas se retrouver avec une "psychologie dominante", et d'avoir quelque chose d'équilibré et d'intéressant à voir.

Donc le must est de ne pas retrouver plusieurs même FAIT dans les calculs de PSY ou de ETAT.

Møgluglu
04/05/2011, 21h14
Merci. B)

Après ça peut se généraliser en changeant les variables qu'on a appelé D et S par des vecteurs.
Le vecteur D devient l'état de l'environnement, et S l'idéal que j'aimerai atteindre. Par définition si D=S je suis heureux.

On garde la même formule qu'avant en remplaçant la valeur absolue par une norme. Mon malheur est alors la norme de la différence terme à terme des deux vecteurs : ||D-S||.

Comme norme on peut prendre la norme 1 (somme des valeurs absolues), la norme 2 (norme euclidienne, racine carrée de la somme des carrés)... jusqu'à la norme infinie (max des valeurs absolues).

Suivant si je suis exigeant ou pas on peut toujours pondérer en multipliant par E. Qui peut être un vecteur aussi : je vais être plus exigeant sur certaines choses que sur d'autres.
Le malheur devient ||E(D-S)||

Suivant les valeurs que peuvent prendre D et S je peux être arbitrairement malheureux, alors que le bonheur admet une limite finie.
Si philosophiquement ça vous gêne, on peut toujours s'arranger avec les intervalles de valeurs et la norme choisie pour que le malheur reste borné aussi.

cailloux
05/05/2011, 02h05
Merci. B)

Après ça peut se généraliser en changeant les variables qu'on a appelé D et S par des vecteurs.
Le vecteur D devient l'état de l'environnement, et S l'idéal que j'aimerai atteindre. Par définition si D=S je suis heureux.

On garde la même formule qu'avant en remplaçant la valeur absolue par une norme. Mon malheur est alors la norme de la différence terme à terme des deux vecteurs : ||D-S||.

Comme norme on peut prendre la norme 1 (somme des valeurs absolues), la norme 2 (norme euclidienne, racine carrée de la somme des carrés)... jusqu'à la norme infinie (max des valeurs absolues).

Suivant si je suis exigeant ou pas on peut toujours pondérer en multipliant par E. Qui peut être un vecteur aussi : je vais être plus exigeant sur certaines choses que sur d'autres.
Le malheur devient ||E(D-S)||

Suivant les valeurs que peuvent prendre D et S je peux être arbitrairement malheureux, alors que le bonheur admet une limite finie.
Si philosophiquement ça vous gêne, on peut toujours s'arranger avec les intervalles de valeurs et la norme choisie pour que le malheur reste borné aussi.

Bon pour commencer la norme j'ai jamais vu en math je crois bien (ou alors je dormais) du coup j'arrive pas trop à suivre (et la définition wikipédia est claire comme 1 litre d'eau dans 1 litre de pastaga.)

Je pense qu'on pourrait créer toute une série de "grands pondérateurs" qui affinerait encore chaque psychologie à appliquer à des |D-S| soit systématiquement, soit par groupe. La deuxième me semble plus approprié. (je tiens à souligner (avec un trait) que mon avis n'est QUE mon avis hein)

Pourquoi limiter les FAITs à 0 et 1 : tout simplement parce que j'ai dans l'idée de provoquer des contre-réactions quand les pions arrivent aux extrêmes : des sortes de réflexes de survit en somme (= le solitaire va fuir jusqu'à atteindre un degré de satisfaction acceptable.)

Le schémas ressemblerait du coup à ça :

http://zecailloux.perso.neuf.fr//partage/canardprojet3.gif


PSY C serait plutôt la tendance réactive du joueur (passif=0 : réagit peu; actif=1 réagit beaucoup) déterminera son envie d'influer sur les FAITS (en sa faveur : la fuite pour le solitaire) [tiens on pourrait même encore y ajouter les "possibilité"....]

Notez que ça ne me générait pas de passer tout les FAITs au crible de tout les PSYs. Ça serait même sans doute plus simple.:o


Autre idée :
On pourrait déterminer 2 groupes de PSY : en amont de la satisfaction pour déterminer sa perception de l'environnement. En aval de la satisfaction pour déterminer sa réaction. Oui ça peut être pas mal. Les satisfactions extrêmes entrainent des contre-réactions exagérés. (= création de quête (enfin on verra plus tard hein :rolleyes:))

Soit le schémas suivant :

http://zecailloux.perso.neuf.fr//partage/canardprojet4.gif

Vous en pensez quoi ?

Louck
05/05/2011, 12h34
Que représente les états "Envie" ? N'est ce pas forcement liée aux PSY ?
Ou tu confonds PSY avec Envie, et PSY avec sous-état ?

Par contre je préfère le premier schéma au second. On peut très bien fusionner les deux : à la place de "PSY C", on aura l'ensemble des PSYs réactionnelles, ou des actions/réactions qui dépendent de la satisfaction du PION et des PSYs liées.

Møgluglu
05/05/2011, 13h14
Bon pour commencer la norme j'ai jamais vu en math je crois bien (ou alors je dormais) du coup j'arrive pas trop à suivre (et la définition wikipédia est claire comme 1 litre d'eau dans 1 litre de pastaga.)

C'est juste une manière pédante de parler de distance.
La norme ||B-A||, c'est la distance entre le point A et le point B. Avec la norme euclidienne et en deux dimensions, tu retombes sur le bon vieux théorème de Pythagore.

Après ça se généralise juste à plus de dimensions et à d'autres définitions de « distance ». Mais l'idée de base est la même. Ici on mesure la distance entre le monde idéal du personnage et le monde réel (ou mieux, le monde qu'il perçoit comme dans ta proposition, parce que si on ne peut pas mentir pour manipuler les gens c'est pas marrant).

(Un jour j'essaierai de relire et comprendre le reste de ton post. Promis.)

cailloux
05/05/2011, 13h49
Que représente les états "Envie" ? N'est ce pas forcement liée aux PSY ?
Ou tu confonds PSY avec Envie, et PSY avec sous-état ?

Par contre je préfère le premier schéma au second. On peut très bien fusionner les deux : à la place de "PSY C", on aura l'ensemble des PSYs réactionnelles, ou des actions/réactions qui dépendent de la satisfaction du PION et des PSYs liées.

ETAT = réalité du monde
ENVIE = ce que voudrait le PION pour cet ETAT

Avec ces 2 éléments on fait le calcul précité 1-|PROX-PROXenvie| qu'on modère ensuite par les PSYs de perceptions pour donner un sous-ETAT lui même modéré par les PSYs réactionnelle pour faire varier les FAITS.

J'ai un peu changer la façon de dire quoi. Un peu comme si j'avais confondu en effet.

TU préfères le 1er schémas alors ? il faudra du coup rassembler les FAITS en groupe pour décider quels PSYs de perceptions serait utilisé pour la modulation.

---------- Post added at 12h49 ---------- Previous post was at 12h48 ----------


C'est juste une manière pédante de parler de distance.
La norme ||B-A||, c'est la distance entre le point A et le point B. Avec la norme euclidienne et en deux dimensions, tu retombes sur le bon vieux théorème de Pythagore.

Après ça se généralise juste à plus de dimensions et à d'autres définitions de « distance ». Mais l'idée de base est la même. Ici on mesure la distance entre le monde idéal du personnage et le monde réel (ou mieux, le monde qu'il perçoit comme dans ta proposition, parce que si on ne peut pas mentir pour manipuler les gens c'est pas marrant).


Je me rappelais plus, mais les maths c'est cool quand c'est appliqué.

Wxug
05/05/2011, 14h16
Bonjour,

Le sujet m'intéressant, je souhaite exposer ma vision des choses, en espérant que ça puisse vous apportez quelque chose dans votre étude actuelle. :)

En premier, le PNJ disposerais de valeurs représentant autant des valeurs personnelles (actif/passif ; sain/fou ; etc.) que sociales (justice ; liberté ; etc.) ainsi qu'une mémoire (temps avant l'oubli d'un fait, voire plus bas). Ces valeurs pouvant évoluer avec le temps mais faiblement je dirais.

Et puis, des faits. Ceux-ci disposeraient de valeurs à concurrence de celles du PNJ. Les faits se cumulant dans l'esprit du PNJ, les valeurs aussi. Et lorsqu'un ou plusieurs seuils sont franchit, le PNJ déclare qu'il est temps d'intervenir.

Après, de cette base, on peut effectuer moults variations. La durée en mémoire peut-être plus forte pour certains faits que d'autres, le nombre de seuil à franchir, etc. :)

Qu'en pensez-vous ?

cailloux
05/05/2011, 19h38
Bonjour,

Le sujet m'intéressant, je souhaite exposer ma vision des choses, en espérant que ça puisse vous apportez quelque chose dans votre étude actuelle. :)

En premier, le PNJ disposerais de valeurs représentant autant des valeurs personnelles (actif/passif ; sain/fou ; etc.) que sociales (justice ; liberté ; etc.) ainsi qu'une mémoire (temps avant l'oubli d'un fait, voire plus bas). Ces valeurs pouvant évoluer avec le temps mais faiblement je dirais.

Et puis, des faits. Ceux-ci disposeraient de valeurs à concurrence de celles du PNJ. Les faits se cumulant dans l'esprit du PNJ, les valeurs aussi. Et lorsqu'un ou plusieurs seuils sont franchit, le PNJ déclare qu'il est temps d'intervenir.

Après, de cette base, on peut effectuer moults variations. La durée en mémoire peut-être plus forte pour certains faits que d'autres, le nombre de seuil à franchir, etc. :)

Qu'en pensez-vous ?

EN fait c'est exactement ce qu'on fait : ce que tu nommes actifs/passifs; sain/fou) serait les PSYs. On prends les FAITS réèls, on le compare avec les FAITs souhaités on applique des PSYs de personnalités pour voir le résultat sur l'individu. Les seuils que tu évoques sont proches de mon système de limites pour les réactions.
Par contre la mémoire pourrait être un PSYs réactionnel très intéressant.

Wxug
05/05/2011, 20h36
D'autant que le concept de la mémoire peut se décliner de différentes façon : gestion de sa durée selon le coté choquant (point de vu personnel du PNJ bien sur, comme je le disais en exemple), peut s'estomper progressivement (ne pas disparaitre d'un coup), être permanente pour certains faits précis, et puis cela apporte la possibilité de l'amnésie pour plus tard. ;)

Louck
05/05/2011, 22h09
Avec ces 2 éléments on fait le calcul précité 1-|PROX-PROXenvie| qu'on modère ensuite par les PSYs de perceptions pour donner un sous-ETAT lui même modéré par les PSYs réactionnelle pour faire varier les FAITS.

A quel moment on calcul les FAITS alors ? Et comment on détermine le PROXenvie ?
Surtout que si un PNJ a un besoin et qu'il le satisfait, il est logiquement heureux non ? Pourquoi utiliser ce besoin pour dénigrer le score d'ETAT ?

Enfin je ne comprend pas vraiment le principe. Combiner |PSY - FAIT|, ca d'accord.
Rajouter les ENVIEs peuvent être pas mal, mais je pense que cela doit impacter le résultat du calcul |PSY - FAIT| (s'il le souhaite vraiment ou non), et non faire partir du calcul en elle même.

cailloux
06/05/2011, 04h38
Les FAITS sont des valeurs fluctuantes environnementale (à mon sens) Ils se calculent (comme par exemple pour PROX) en faisant, pour chaque point de la grille la densité( tout comme l'a proposé Came yon ici (http://forum.canardpc.com/threads/56465-PROG-Moteur-de-relation-sociale-made-in-canard.?p=4251346&viewfull=1#post4251346)). On peut y rajouter l'insécurité (=le nombre de crime perpétré autours du pion) [la météo ? l'heure ? serait plûtot des PSY's, enfin pour l'instant je met ça de cotés]

*

On met ensuite en relation cette valeur vrai, avec ce que veux le pion selon la formule 1-|FAIT1-FAIT1 Envie| pour déterminer si les faits sont loin de ses envies ou non.** En fonction de la réponse on fait varier l'ETAT FAIT1 [si on trouve <0.5 on le fera baisser : pas de satisfaction; si il est >0.5 on le fait augmenter : satisfaction]****. La somme de toutes ces SATISFACTIONS [= les ETATS mais SATISFACTIONS est plus pertinent je trouve] détermineront le général de Pion, une sorte de META SATISFACTION bonheur/malheur.

Ensuite on prend chaque SATISFACTIONS qu'on modère avec les PSYs REACTION [passivité, empathie etc] par exemple pour déterminer ce que fait le PNJ en réaction de la SATISFACTION.

Si une SATISFACTION est extrême alors il déclenche une réaction extrême [ l'idéal serait de créer une quête en adéquation avec les SATISFACTIONS les PSYs et les FAITs du pion]***

Pour résumer les FAITS sont mis en balance avec les ENVIES pour mettre à jour les SATISFACTIONS. Les PSYs ne servent qu'à pondérer les calculs pour éviter les situations prévisibles. On peut insérer des PSYs n'importe où dans la chaine pour simuler divers aspect de la personnalité.

J'espère avoir été plus clair ? Sur ma façon de voir (qui est, comme toujours, discutable)

**Comment définir les ENVIES (on en a pas parlé mais j'y ai pensé tout à l'heure (au boulot alors que j'avais du taf par dessus la tête) : A la création du pion on lui attribut tout un tas de paramètres influant sur les ENVIES :
-l'age pourrait par exemple être pris en compte pour définir la sociabilité d'un individu.
-le sexe pour définir l'empathie.
-le métier pour l'envie d'ordre.
-la situation maritale pour baisser les tempéraments.
-d'autres trucs à définir.
-penser à mettre de l'aléatoire pour que toute les filles de 18 ans mariés et masseuse ne soient pas identique.

On aurait donc un ADN des envies des pions qui , une fois le monde généré varieront en fonction des FAITs.

*En fait on pourrait faire entrer ici le premier facteur PSY perception : la tendance pour le pion de minimiser, ou exagérer les FAITS (par exemple il y a 10 personne autours de lui mais il n'en compte que 9) [note qu'ensuite on pourrait y ajouter des PSY perceptions objectives tel que les lignes de vu mais c'est pour plus tard]

***Note qu'on pourrait ne prendre aucune réaction autonome en dehors des extrêmes. Si par exemple on fait un moteur au tour par tour le pion prendra de lui même la décision de changer les FAITs pour qu'ils correspondent à ses envies sans intervention directe du joueur.

****Là aussi on peut insérer un PSY Perception (=genre influençabilité : le facteur par lequel l'éloignement des FAITS-ENVIES influe sur les SATISFACTIONS)



Celà dit je pense que pour un premier jet du moteur il serait judicieux de ne se contenter que d'un unique ETAT/ENVIE/PSY/SATISFACTION/REACTION. Le plus sympa serait plutôt le PROX. Je pense qu'on devrait se concentrer uniquement sur ce cas, élaborer tout ce qui doit être pris en compte pour avoir un premier proto bien carré.

Je suis clair j'espère ?

Louck
06/05/2011, 10h48
Globalement. Mais cette idée représente une modification importante dans la conception de l'engin. Donc on s'y perd très rapidement.


Et vu que cette idée semble aller plus loin que les PSY EMP et SOC, il faudra trouver des exemples et les calculs qui vont avec.

Pour les calculs, ca semble bon. Mais c'est les exemples et les données qui manquent.

cailloux
06/05/2011, 15h51
Globalement. Mais cette idée représente une modification importante dans la conception de l'engin. Donc on s'y perd très rapidement.
Et vu que cette idée semble aller plus loin que les PSY EMP et SOC, il faudra trouver des exemples et les calculs qui vont avec.

Pour les calculs, ca semble bon. Mais c'est les exemples et les données qui manquent.

Mais heu, pourquoi tu me vois comme le leader incontesté de ce projet ? Je peux me tromper hein, si tu estimes que je fais fausse route ou que ma vision n'est ni plausible ni applicable faut le dire.

Bon, on pourrait résumer chaque calcul de
f(SATISFACTION1) = [1-|(FAIT1*PSY1)-ENVIE1|]*PSY2

[SATISFACTION Globale] que je renomme ETAT (oui je suis un fou ! mais je ferais un tableau !) est la moyenne des SATISFACTIONs pondéré par un PSY3 (=bonheur/malheur) = (somme des SATISFACTIONS/Nombre des satisfaction)*PSY3

PSY1 = perception des FAITs : 0.5 = plus proche de la réalité ; 0=sous estimations des FAITs ; 1= sur-estimation des FAITs (dans l'idée c'est ça, je laisse aux matheux le soin de définir la fonction *)
PSY2 = sensibilité aux FAITs : 0 = pas d'influence; 1= sur-influence.
PSY3 = optimisme/pessimisme naturel : un optimiste continuera à l'être même si ses SATISFACTIONS ne lui sont pas favorable ce qui augmentera son ETAT.

Dans un soucis de véracité on pourrait éventuellement faire varier les PSYs avec l'ENVIRONNEMENT (heure, météo) mais on ne le fera que si on y trouve un intérêt pour le gameplay.

Maintenant il faut définir quels FAITs sont pris en compte :

PROX = la densité de pion dans une case donné.

PNJ = l'ETAT des pions voisins influe sur La SATISFACTION PNJ du joueur (qui se définirait par l'empathie en fait : plus les gens autours de lui sont heureux plus il est heureux (si c'est un saint) plus les gens autours de lui sont heureux moins il est heureux (si il s'agit d'un salopard).

REL = la relation que le pion a envers un pion voisin. 0= déteste, 1=aime

CREL =La relation que le pion voisin entretient avec le pion donne une SATISFACTION de CONTRE-RELATION (qui se définirait par l'estime de sois via le regard des autres (j'avais trouvé un super mot et je l'ai oublié, 2 fois en 1 minutes:|) ) : Pour le cas d'un vrai méchant : il est heureux quand il est détesté. Un vrai gentil est heureux quand il est aimé.

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

Stoppez les machines j'ai une autre idée qui pourrait être bien plus logique et cohérente ! (oui je suis lourd à changer d'avis, mais c'est pour la bonne cause et puis si c'est de la merde on peut en rester là où on en est actuellement.)

Définir un BONHEUR SOCIAL il prend en compte les variables sociales et les PSYs sociales. Là où c'est cohérent c'est que pour définir si un pion est heureux socialement on prends en compte le Nombre, la nature et l'etats des pions alentours, ce qui est logique : un solitaire sera moins affecté par la présence de gens qu'il aime que de gens qu'il déteste, d'autant plus si ils sont heureux ou pas.
Nombre=PROX,
Nature = REL,
Etats = PNJ.

Mêmes calculs : que précédemment :

f(SATISFACTION soc) = [[1-|(PROX*PSY1)-PROX ENVIE|]PSY2]*[[1-|(REL*PSY1)-REL ENVIE|]PSY2]*[[1-|(PNJ*PSY1)- PNJ ENVIE|]PSY2] ( on doit pouvoir simplifier ça non ?)


Définir un BONHEUR Physique
Sécurité = gardiens au km²(les voleurs par exemple veulent moins de sécurité)
Richesse = supérieure ou inférieure à la moyenne des pions (les moines ne cherchent pas forcément à être riche)
Santé (les enfants veulent parfois être malade (pour louper l'école))
Gloire = le CREL

f(SATISFACTION PHYSIQUE )= [[1-|(RICHESSE*PSY1)-RICHESSE ENVIE|]PSY2]*[[1-|(SECURITE*PSY1)-SECURITE ENVIE|]PSY2]*[[1-|(SANTE*PSY1)-SANTE ENVIE|]PSY2]*[[1-|(CREL*PSY1)-CREL ENVIE|]PSY2]



[(SATISFACTION SOCIALE+SATISFACTION Physique)/2]*PSY3 = ETAT


Notez que chaque * définit une fonction que je n'ai pas définit encore (je laisse ça aux matheux)
Z'en dites quoi ?

Edit : en fait les * pourraient être tout bêtement des "+" non ? Qu'on divise par 3 à la fin
Une personne qui a que des ENVIES satisfaites :
( 0.8 +0.8+0.8)/3= 0.8 : il est content
Une personne qui a que des ENVIES insatisfaites
(0.2+0.2+0.2)/3 = 0.2 : il n'est pas content.
Une personne qui est contente du nombre de personne autours d'elle mais mécontente de leur nature et de leur PNJ :
(0.8 +0.2+0.3)/3 = 0.43
Pareil mais leurs PNJ est bien apprécié :
(0.8+0.2+0.8)/3 = 0.6

Un solitaire avec sa famille autours de lui pour le réconforter donne :
(0.2+0.8+0.8)/3 = 0.6
La moitié de sa famille part (il gagne en solitude donc)
0.6+0.8+0.8/3 = 0.73
Sa famille se barre et un ennemie vient l'embêter.
(0.8+0.2+0.2)/3 = 0.4
Son ennemie fait venir encore plus de méchant
(0.2+0.2+0.2)/3= 0.2

Ça marche bien je trouve !

Re Edit : l'intérêt de ce système c'est qu'on peut :
-Rajouter des FAITs sans difficulté (il suffira de diviser le total par le nombre de FAIT.
-Cibler encore plus les particularités des ENVIES en y ajoutant des multiplicateurs : par exemple un "solitaire +" donnera plus de valeurs à la SATISFACTION PROX ce qui donnera à la fin ([SATISFACTION PROX *3] +SATISFACTION PNJ +SATISFACTION REL )/5 la valeur de satisfactiion PROX influencera plus le résultat final que les autres.
-On peut aussi, de la même façon créer des Pion dont la SATISFACTION SOCIALE est plus importante que la SATISFACTION PHYSIQUE. voire même en créer d'autre (par exemple diviser la "Physique" en "matérielle" : Maison, richesse, sécurité et "santé": blessé, nourriture etc.

Batto
06/05/2011, 16h19
Moi j'aurais juste une remarque générale.

Tous ces beaux calculs et réflexions sur comment agencer tout le bordel, c'est chouette, mais je conseillerais de commencer gentiment avec UNE seule variable psy (par exemple Social/Solitaire), UNE seule variable extérieure (par exemple PROX) et UNE action possible (par exemple un déplacement).

Commencer par bien gérer ça et bien le réfléchir, ça permettra de beaucoup plus sereinement attaquer la suite.
Ça permet de bien saisir le fonctionnement du truc, de trouver les erreurs de raisonnement, le tout sans se perdre dans des calculs inutilement complexes de fonctions à 15 variables.

Une fois ça bien peaufiné (avec pourquoi pas un premier prototype fonctionnel), il sera nettement plus simple de rajouter petit à petit des variables, des fonctionnalités, et d'autres trucs et machins.

Ce n'est pas pour ça qu'il ne faut pas réfléchir plus loin hein, c'est même nécessaire pour pouvoir faire un code facilement adaptable et évolutif. Mais je trouve qu'il serait plus simple de se focaliser, pour commencer, sur une version (très) simple et (très) basique.

cailloux
06/05/2011, 16h37
Oiu c'est ce que j'ai proposé un peu plus haut.

Je pense que les trucs les plus importants ce sont :

1/les FAITS (par exemple PROX)
2/L'ENVIE du pion (= PROX ENVIE) (pour l'instant généré de manière aléatoire/à la main plus tard en fonction de la carte d'identité du pion)
3/Faire varier la valeur de satisfaction en le modérant via le PSY2 (les Psys sont aléatoire) (=sensibilité au FAIT) :

(1-|PROX-ENVIE PROX|)PSY2 = variation de satisfaction

4) la réaction, mais pour l'instant je ne sais pas trop comment la faire marcher (soit par limite, soit systématique) ça dépend de ce qu'on veut faire : systématique pour du temps réèl. Limite pour un puzzle game.

Louck
06/05/2011, 17h06
Tous ces beaux calculs et réflexions sur comment agencer tout le bordel, c'est chouette, mais je conseillerais de commencer gentiment avec UNE seule variable psy (par exemple Social/Solitaire), UNE seule variable extérieure (par exemple PROX) et UNE action possible (par exemple un déplacement).


Pour l'action, d'accord. Pour les autres variables, c'est surtout pour avoir une idée de la structure du moteur. C'est pour ca que je prend toujours exemple de 2 variables, et non 1 ou plus.

Avoir qu'une seule variable PSY/FAIT/... c'est souvent trompeur. Techniquement.

cailloux
06/05/2011, 17h17
Pour l'action, d'accord. Pour les autres variables, c'est surtout pour avoir une idée de la structure du moteur. C'est pour ca que je prend toujours exemple de 2 variables, et non 1 ou plus.

Avoir qu'une seule variable PSY/FAIT/... c'est souvent trompeur. Techniquement.

Que penses tu de ma dernière proposition ? je la trouve relativement simple à comprendre et à mettre en place, non ?

http://zecailloux.perso.neuf.fr//partage/canardprojet5.gif

Il faudrait faire le même genre d'arbre pour définir l'ETAT GENERAL B à mon avis. Et là je ne parle pas du tout des réactions.

cailloux
07/05/2011, 05h18
Je vous soumets rapidement un cahier des charges pour un futur premier prototype :

Résumé : Au tour par tour on déplace par glissé-déposé des pions sur une grille pour maximiser le bonheur général des pions

Bonheur général des pions =SOMME des SATISFACTIONS SOCIALES/nombre de pions qui sera affiché en haut à droite. (avec également le SATISFACTION SOCIALE au moment de la création du monde, celle minimale, la maximale atteinte et la maximale théorique = le score de la partie

Une grille de 40*40 carreaux sur laquelle sont posé (dans les cases) aléatoirement un nombre de pions aléatoire itou (plus il y en a plus le "jeu" sera difficile). On attribue de manière aléatoire à chaque pion un PROX ENVIE (plus il est proche de 0 moins le pion veut des gens autours) la formule (1-|PROX-PROX ENVIE|) servira à définir l'éloignement de l'ENVIE PROX de la PROX réelle*
Une autre variable elle aussi aléatoire de PSY sensibilité pour chaque pion. la formule devient

SATISFACTION SOCIALE= SENSIBILITE(1-|PROX-PROX ENVIE|)

Les pions n'ont, pour l'instant, aucune réaction.

Une fois les pions placés sur la grille, le joueur sélectionne un pion, le fait bouger où il veut, et le moteur recalcule tout ça, le but étant évidement de faire un score le plus haut possible ( ou le plus bas, chacun décide).

En option : En sélectionnant un pion on affiche un infobulle avec la PROX, la PROX ENVIE, la PSY et la SATISFACTION. La couleur du jeton varie selon la SATISFACTION : plus elle est basse plus elle est noire, plus elle est haute plus elle est blanche.

Voilà ça me semble raisonnable, ouvert et clair.

*calcul de la PROX


J'ai en tête quelque chose comme un fonction densité de population. Avec ca, a chaque début de frame, on peut calculer sur toute la carte/grille une fonction à valeur dans [0,1] qui donne une indication du nombre d'entités dans les environs.

Par exemple. A la position P, on regarde s'il y a des entités dans un rayon R, on calcule la somme des inverses de la distance à P de chaque entité. On a alors un nombre Densité(P). Il suffit de répéter l'opération à chaque point de la grille. Ensuite c'est facile de normaliser la fonction Densité pour qu'elle soit dans l'intervalle voulu [0,1]. A la fin on a une carte de la Densité qui peut être utilisée par toutes les entités car indépendante de leur personnalité.

Louck
07/05/2011, 12h24
Que penses tu de ma dernière proposition ? je la trouve relativement simple à comprendre et à mettre en place, non ?

C'est surtout que ca doit être la X changement majeur, et je suis encore bloqué sur les 2 précédentes modifications.
En lisant en diagonale, l'idée semble plus complexe et moins logique. Mais cela peut représenter une bonne idée, une autre façon de calculer l'état d'un PNJ ou PION.

Donc vu que j'ai du mal à tout maitriser (et c'est sûrement ma faute), et que j'ai des choses à faire à côté, je ne peux pas donner une avis plus objective sur le moment.


PS : Par moins logique, je pense à :
- Comment calculer une Envie qui va finir par une grosse variable aléatoire (ce qui n'est pas intéressant) ?
- Pourquoi regrouper tout les faits, envies, et satisfaction d'un côté ? Une satisfaction dépend de X et de Y, et non d'une moyenne globale. Par exemple : Je suis satisfait de ma vie sociale, mais pas de ma situation professionnelle. Je préfère faire "ceci" et non "ca". Ces calculs ne semble pas répondre à ce cas. Ou j'ai mal lu.


Mais vu que je lis en diagonale, je donnerais une meilleure avis plus tard.
Pour l'instant, je préfère les premiers schéma, sans les "formules à gogo", sans les envies, ni les perceptions/satisfactions, ce qui rendait la chose plus logique (mais plus prévisible).

cailloux
07/05/2011, 13h15
PS : Par moins logique, je pense à :

- Comment calculer une Envie qui va finir par une grosse variable aléatoire (ce qui n'est pas intéressant) ?

L'envie est une variante aléatoire du départ propre à chaque pion. Elle n'a pas vocation à changer via des PSYs. On peut ensuite y rajouter de la cohérence mais pour l'instant il n'en est pas question.


- Pourquoi regrouper tout les faits, envies, et satisfaction d'un côté ?

En fait on fait une chaine unique FAIT X>ENVIE X>SATISFACTION X pour chaque cas.
Et ensuite on regroupe des thermes pour dégager les SATISFACTIONs GLobales (= ETATS) telles que l' ETAT SOCIAL (on prends en compte les SATIS PROX, PNJ, REL : tout ce qui se réfère au interactions humaines). L'ETAT MATERIEL (on prends en compte les SATIS d'argent, sécurité, santé : tout ce qui se réfère au mode de vie)
On se retrouve avec 2 blocs de SATIS GLOBALE. Et chaque individu mettra en priorité l'un ou l'autre (Définit aussi aléatoirement) ce qui correspond exactement à la phrase ensuite :

Une satisfaction dépend de X et de Y, et non d'une moyenne globale. Par exemple :Je suis satisfait de ma vie sociale, mais pas de ma situation professionnelle. Je préfère faire "ceci" et non "ca". Ces calculs ne semble pas répondre à ce cas. Ou j'ai mal lu.


Mais vu que je lis en diagonale, je donnerais une meilleure avis plus tard.
Pour l'instant, je préfère les premiers schéma, sans les "formules à gogo", sans les envies, ni les perceptions/satisfactions, ce qui rendait la chose plus logique (mais plus prévisible).


Les ENVIES ont étaient créé pour répondre à une question simple : un FAIT est par essence neutre, ce n'est que en comparant un FAIT avec une ENVIE qu'on arrive à définir si la SATISFACTION est bonne ou pas.
Genre [FAIT PLUIE] "il pleut" c'est neutre. [ENVIE PLUIE] "Je suis une grenouille donc j'ai des envies de pluie".[SATIS PLUIE] Mes envies de grenouilles sont effectives. [ETAT GLOBAL] "je suis heureuse".
"Il pleut" [FAIT PLUIE]. [ENVIE PLUIE]"Je suis un oiseau donc j'aime pas la pluie" [SATIS PLUIE] Mes envies d'oiseaux ne sont pas satisfaites. [ETAT GLOBAL] Je suis pas heureux.

Les PSYs ne sont absolument pas indispensable, elles ne servent qu'à rajouter un peu de variété aux situations.

Louck
07/05/2011, 13h23
D'accord je comprend mieux.
Mais cela signifie que la Perception d'un fait ou d'une envie ne peut être une variable globale, vu qu'on donne une importance à quelque chose (et non à tous).

Par exemple, ta grenouille qui a faim va plus s'inquiéter de sa nourriture que de la pluie.
Comment représenter cela ? Dans ce cas, quel est le sens de "Perception" et "Sensibilité", si ce sont des valeurs globales ?

cailloux
07/05/2011, 14h09
D'accord je comprend mieux.
Mais cela signifie que la Perception d'un fait ou d'une envie ne peut être une variable globale, vu qu'on donne une importance à quelque chose (et non à tous).

Par exemple, ta grenouille qui a faim va plus s'inquiéter de sa nourriture que de la pluie.
Comment représenter cela ? Dans ce cas, quel est le sens de "Perception" et "Sensibilité", si ce sont des valeurs globales ?

Je te répond avec un schémas qui va éclaircir le propos.

http://zecailloux.perso.neuf.fr//partage/canardprojetcreation.gif

Pour ton cas particulier : on applique X = à 5 pour [l'ENVIE Nourriture] et X =3 pour [l'ENVIE pluie]. l'importance accordé à la nourriture par rapport à la pluie est supérieure pour déterminer si la grenouille est heureuse.

SENSIBILITE et PERCEPTION sont des valeurs générales, propre à chaque pion qui influent dans une moindre mesure à chaque maillon de la chaine (pour plus de variété). Ce sont en fait les PSYs du pion : sa façon de voir/réagir au monde. Par exemple la PERCEPTION fera augmenter ou diminuer la réalité des FAITs avant de les comparer à l'envie : Il y a 1000 bonbons autours de moi, mais, je suis optimiste, j'ai l'impression qu'il y en a en vrai 1100 : du coup ( si on considère que l'envie de bonbon est élevé...) je suis plus satisfait que je ne devrait l'être en vrai.

Louck
07/05/2011, 16h41
Quelques remarques en plus donc :
- Et s'il y a d'autres PSYs qui entrent en jeu (comme indiqué sur le schéma), comment ils seront pris en compte ?
Les calculs font blocus sur 2 PSYs et seulement 2. En rajouté une de plus dans le calcul signifie qu'on doit repenser un peu à tout.

Pour ce problème, le mieux est de ne pas prendre en compte les PSYs "Perception" et "Sensibilité" comme des cas généraux. Il faut trouver donc d'autre PSYs qui peuvent répondre à chaque FAITs ou ENVIEs... ou un groupement de FAITs/ENVIEs.


- Les PSYs et les ENVIEs sont dépendants entre eux (pour les calculs)... et ils dépendent aussi de la carte d'identité du PION. Il va être difficile de trouver des situations extrêmes avec ces données.

Je pense qu'il faut séparer les PSYs et les caractéristiques du PION. Une personne mature peut avoir le syndrome de Peter Pan.

Batto
07/05/2011, 17h37
Quelques remarques en plus donc :
- Et s'il y a d'autres PSYs qui entrent en jeu (comme indiqué sur le schéma), comment ils seront pris en compte ?
Les calculs font blocus sur 2 PSYs et seulement 2. En rajouté une de plus dans le calcul signifie qu'on doit repenser un peu à tout.

Pour ce problème, le mieux est de ne pas prendre en compte les PSYs "Perception" et "Sensibilité" comme des cas généraux. Il faut trouver donc d'autre PSYs qui peuvent répondre à chaque FAITs ou ENVIEs... ou un groupement de FAITs/ENVIEs.


- Les PSYs et les ENVIEs sont dépendants entre eux (pour les calculs)... et ils dépendent aussi de la carte d'identité du PION. Il va être difficile de trouver des situations extrêmes avec ces données.

Je pense qu'il faut séparer les PSYs et les caractéristiques du PION. Une personne mature peut avoir le syndrome de Peter Pan.

En fait, depuis tes quelques derniers posts, je me demande si tes inquiétudes sont en rapport avec le code ou sur les principes de fonctionnement.
Parce que si le code est bien pensé, structuré et cloisonné, qu'il y ait 1, 2 ou 25 variables, ça ne changera pratiquement rien (voire rien du tout).

La seule chose qui changera sera l'équation finale. Et ça, ce n'est jamais qu'une ligne à changer. Alors oui, pour trouver l'équation, il faudra réfléchir et éventuellemnt repenser les interactions entre variables, mais pour la mettre à jour dans le code, ça prendra 10 secondes à tout casser.


Désolé si j'ai mal compris tes posts :p

cailloux
07/05/2011, 19h10
Quelques remarques en plus donc :
- Et s'il y a d'autres PSYs qui entrent en jeu (comme indiqué sur le schéma), comment ils seront pris en compte ?
Les calculs font blocus sur 2 PSYs et seulement 2. En rajouté une de plus dans le calcul signifie qu'on doit repenser un peu à tout.

Facile : il suffit de rajouter un [*PSY] dans l'équation où qu'il se trouve dans la chaine. Eventuelllement appliquer un système de moyenne (avec facteur préférentiel) si 2 PSYs entrent en compte pour déterminer un truc [genre PSY1*3+PSY2*2]/5 exactement comme je propose pour les ETATS.
Par exemple on peut estimé que l'ENVIE peut être modéré par une PSY X quelconque, l'équation devient donc 1-[(FAIT*PSY PERCEPTION)]-[ENVIE*PSY X]



Pour ce problème, le mieux est de ne pas prendre en compte les PSYs "Perception" et "Sensibilité" comme des cas généraux. Il faut trouver donc d'autre PSYs qui peuvent répondre à chaque FAITs ou ENVIEs... ou un groupement de FAITs/ENVIEs.

Certes on pourrait faire un truc comme ça sauf que ça nécessiterait de trouver voire d'inventer des PSYs.

- Les PSYs et les ENVIEs sont dépendants entre eux (pour les calculs)... et ils dépendent aussi de la carte d'identité du PION. Il va être difficile de trouver des situations extrêmes avec ces données.

Non, je crois pas : un asocial extrême aura un ENVIE PROX 0.1; si on le met au milieu d'une foule 0.9 on obtient 0.2 de satisfaction 1-|0.1-0.9|. La limite de 0.1 est envisagé mais on peut la fixer à 0.2, c'est pas vraiment un soucis.


Je pense qu'il faut séparer les PSYs et les caractéristiques du PION. Une personne mature peut avoir le syndrome de Peter Pan.

Je suis assez d'accord finalement. On peut se passer des caractéristiques pour créer des PSYs.

Mon idée de relier les caractéristiques aux PSYs est discutable mais il ne faut pas perdre de vue que les PSYs ne sont que des modérateurs : leur influence est faible dans les faits (c'est pour ça que je disais qu'on peut s'en passer) Et puis nier que le sexe, l'age ou autre influe sur nos ENVIEs (ça c'est bon tu le fais pas , on est d'accord la dessus !) mais aussi sur nos PSYs me semble difficile. Je sais pas, on peut toujours penser que les femmes sont plus SENSIBLE que les hommes. Mais c'est ptet juste du cotés de la croyance.
[/QUOTE]

Mais je vois qu'on commence à être assez d'accord tout les deux !


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

Tiens j'étais partis sur une explication qui a vachement influé ma pensé et fait germé une nouvelle complication dans mon fertile cerveau de malade mental. Il n'est absolument pas question de mettre ça dans le moteur social, mais peut être plus tard...

Au delà des humains on peut aussi rajouter des animaux ou des objets.
Pour faire interagir tout ça il faudrait donner à chaque objet des variables de DIFFUSIONS. que je vais diviser pour l'instant en 3 parties qui se réfèrent à 3 sens :

DIF SON : se réfère aux sens de l'ouïe. à 0 l'objet n'émet aucun son, à 1 un son assourdissant : on l'entends à 100 mètres.
DIF LUMENS : se réfère au sens de la vue. à 0l'objet est microscopique, à 1 de la taille d'une maison (j'omets volontairement l'environnement type montagne) = on le voit ) 100 mètres.
DIF ODEUR : se réfère au sens de l'odeur. à 0 l'objet n'a pas d'odeur, à 1 on le sent à 100 mètres.

EXEMPLEs
objet charogne [DIF SON = 0.1; DIF LUMENS = 0.5 ; DIF ODEUR = 0.9]
objet mulot [DIF SON = 0.3; DIF LUMENS =0.2 ; DIF ODEUR = 0.3]
objet troll [DIF SON =0.7; DIF LUMENS =0.7; DIF ODEUR = 0.6]

On rajoute à chaque être vivant des SENSEURS des 3 DIF qu'on hiérarchise via des multiplicateurs et qui sont définis et inscrit dans leur carte d'identité. la moyenne donne les chances de détections.

Exemple de la taupe qui entend moyen, voit très mal et sens bien :

DETECTIONS =[(DIF SON *3) + (DIF LUMENS *1) +(DIF ODEUR *5)]/9

Le troll qui entends bien, voit bien et sens très bien

DETECTIONS =[(DIF SON *5) + (DIF LUMENS *5) +(DIF ODEUR *6)]/16

L'aigle entends mal, voit très bien et sens très mal

DETECTIONS =[(DIF SON *2) + (DIF LUMENS *6) +(DIF ODEUR *1)]/9


Avec ce système même si un objet diffuse une odeur forte, il ne sera pas détecté par un animal avec un odorat nul. A contrario un objet diffusant très peu de lumens sera détecté par un animal ayant une vision acéré.

EDIT : en fait on peu appliquer une carte d'identité à tout les objets ! (évidement il faut trouver une astuce pour que les objets inanimés n'est ni ENVIE, ni PSY, mais uniquement des DIF et des CARACTÉRISTIQUES, que les animaux réagissent avec leur ENVIE plutôt que leurs PSY...

Louck
07/05/2011, 20h21
En fait, depuis tes quelques derniers posts, je me demande si tes inquiétudes sont en rapport avec le code ou sur les principes de fonctionnement.

Oui et non. Surtout sur les principes de fonctionnement, dont j'ai du mal à tout comprendre (moi et la compréhension, ca fait 2). Et bien sûr, cela va impacter le code, dont je tente de faire le plus manipulable/ouvert possible (surtout pour ce genre de moteur).




Facile : il suffit de rajouter un [*PSY] dans l'équation où qu'il se trouve dans la chaine. Eventuelllement appliquer un système de moyenne (avec facteur préférentiel) si 2 PSYs entrent en compte pour déterminer un truc [genre PSY1*3+PSY2*2]/5 exactement comme je propose pour les ETATS.
Par exemple on peut estimé que l'ENVIE peut être modéré par une PSY X quelconque, l'équation devient donc 1-[(FAIT*PSY PERCEPTION)]-[ENVIE*PSY X]


De ce que j'avais compris, on a 2 gros groupement de PSYs : ceux qui concernent la perception, et la sensibilité. L'un touche aux FAITs, l'autre aux ENVIEs.
C'est une idée qui peut être bonne, mais cela reste "fermé" comme calcul... Enfin, après cela reste de la technique, donc je proposerai mon idée à ce sujet pour corriger ce défaut.



un asocial extrême aura un ENVIE PROX 0.1; si on le met au milieu d'une foule 0.9 on obtient 0.2 de satisfaction 1-|0.1-0.9|. La limite de 0.1 est envisagé mais on peut la fixer à 0.2, c'est pas vraiment un soucis.

Tu ne sembles pas prendre en compte les calculs avec les PSYs, ou je me trompe ?
En faite non, je me suis trompé et mal exprimé... Ce n'est pas une question de moyenne ou d'extrémité, mais que l'ETAT sera difficilement variable, vu qu'on passe un PSY et une ENVIE dans la moulinette, qui ont beaucoup de chances d'être dans les mêmes valeurs (et donc, avec ces calculs de différences, le résultat tombera plus souvent vers le 1)... vu qu'ils dépendent, les deux, de la carte d'identité.

Pour les ENVIEs, on est parfaitement d'accord, c'est dépendant. C'est les PSYs qui me posent plus problèmes.
On peut donc faire varier les PSYs par rapport au caractère du protagoniste, mais que cela n'influe pas totalement. Un satanique, qu'il fasse beau, moche, ou non, restera satanique jusqu'à un cas ou fait purement extrême. Ce n'est pas l'age qui va lui faire changer d'avis... ou un tout petit peu.

cailloux
08/05/2011, 05h27
De ce que j'avais compris, on a 2 gros groupement de PSYs : ceux qui concernent la perception, et la sensibilité. L'un touche aux FAITs, l'autre aux ENVIEs.

En fait non on s'est mal compris il n'y a qu'une seule PSY de perception : la psy positif/négatif ( mais je ne trouve pas un mot unique pour définir si un homme voit les choses mieux ou pire qu'elles ne le sont. Evidement comme il s'agit de PSY ça peut pas être une différence monstrueuse : un mec dans une foule ne va jamais se sentir seul, par contre il pourra se sentir comme dans une petite foule. Ca n'influe donc quasiment pas sur le résultat final, c'est juste un pondérateur (au lieu de 0.6 la valeur deviendra 0.65 ou 0.55)

La sensibilité aussi est unique : elle indique dans qu'elle mesure la différence entre l'envie et les faits influx sur l'état : un hyper sensible verra sa valeur augmenté.



C'est une idée qui peut être bonne, mais cela reste "fermé" comme calcul... Enfin, après cela reste de la technique, donc je proposerai mon idée à ce sujet pour corriger ce défaut.

Being en fait je n'arrive pas à définir d'autres PSY qui ne soient pas de facto des ENVIES (du moins dans les PSY d'analyse et réception des FAITS) (Quand on parlera des réactions on pourra en mettre des tas : jalousie, gout du pouvoir, honnêteté, pondération etc etc.) Mais je suis ouvert à toute forme d'ajustement évidement.


Tu ne sembles pas prendre en compte les calculs avec les PSYs, ou je me trompe ?

Exact dans ces exemples je n'ai pas fais mention des PSYs. avec les PSYs le calcul deviendraient : 1-|(0.1*0.5)-0.9|. *

*Tiens ? là je me rends compte que la multiplication n'est pas du tout une bonne opération pour l'intervalle [0;1] : Dans la logique un gros positif devrait avoir, dans ce calcul Un (FAIT Modéré par le PSY sensibilité) = 0.19, un grand négatif à 0.01 et un parfait neutre à 0.1. Avec la fonction multiplication ça marche pas faut trouver une solution mathématique qui permette d'arriver à ces résultats.



En faite non, je me suis trompé et mal exprimé... Ce n'est pas une question de moyenne ou d'extrémité, mais que l'ETAT sera difficilement variable, vu qu'on passe un PSY et une ENVIE dans la moulinette, qui ont beaucoup de chances d'être dans les mêmes valeurs (et donc, avec ces calculs de différences, le résultat tombera plus souvent vers le 1)... vu qu'ils dépendent, les deux, de la carte d'identité.


La SATISFACTION varie à chaque nouvelle opération 1-|(FAIT*PSY1)-ENVIE FAIT| en gros chaque fois qu'un FAIT change il faut recalculer si la SATISFACTION monte ou descend ce qui permettra de definir l'ETAT.



Pour les ENVIEs, on est parfaitement d'accord, c'est dépendant. C'est les PSYs qui me posent plus problèmes.
On peut donc faire varier les PSYs par rapport au caractère du protagoniste, mais que cela n'influe pas totalement. Un satanique, qu'il fasse beau, moche, ou non, restera satanique jusqu'à un cas ou fait purement extrême. Ce n'est pas l'age qui va lui faire changer d'avis... ou un tout petit peu.

Voui voui je suis d'acc avec ça : les PSYs ne sont pas déterminé par les CARACTERISTIQUES et sont purement aléatoire. Ca me va. Finalement l'age le sexe ETC fait plutôt évolué les ENVIE que les psychisme, c'est raisonnable.

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


Tiens je pensais qu'on pourrait rajouter des ENVIE TEMPORAIRE : ce sont les envies ponctuelles qui varient donc énormément en fonction de l'environnement global : heure, temps etc. : FAIM, SOIF, CUL, ce genre de trucs.

Louck
08/05/2011, 10h26
On va en discuter sur msn :p (cf mp donc).

cailloux
08/05/2011, 14h31
On va en discuter sur msn :p (cf mp donc).

WOkay !

cailloux
10/05/2011, 15h34
Les fonctions PSY pourraient tout bêtement être une addition d'un nombre compris entre ]-0.1; 0.1[
Par exemple pour la PSYs perception : quelqu'un de très optimiste verrait son fait augmenté de 0.09 quelqu'un de très pessimiste le verrait diminuer de 0.09. Quelqu'un d'objectif verrait son fait évoluer de 0.

LaVaBo
10/05/2011, 17h07
Je vous soumets rapidement un cahier des charges pour un futur premier prototype :

Résumé : Au tour par tour on déplace par glissé-déposé des pions sur une grille pour maximiser le bonheur général des pions

Bonheur général des pions =SOMME des SATISFACTIONS SOCIALES/nombre de pions qui sera affiché en haut à droite. (avec également le SATISFACTION SOCIALE au moment de la création du monde, celle minimale, la maximale atteinte et la maximale théorique = le score de la partie

Une grille de 40*40 carreaux sur laquelle sont posé (dans les cases) aléatoirement un nombre de pions aléatoire itou (plus il y en a plus le "jeu" sera difficile). On attribue de manière aléatoire à chaque pion un PROX ENVIE (plus il est proche de 0 moins le pion veut des gens autours) la formule (1-|PROX-PROX ENVIE|) servira à définir l'éloignement de l'ENVIE PROX de la PROX réelle*
Une autre variable elle aussi aléatoire de PSY sensibilité pour chaque pion. la formule devient

SATISFACTION SOCIALE= SENSIBILITE(1-|PROX-PROX ENVIE|)

Les pions n'ont, pour l'instant, aucune réaction.

Une fois les pions placés sur la grille, le joueur sélectionne un pion, le fait bouger où il veut, et le moteur recalcule tout ça, le but étant évidement de faire un score le plus haut possible ( ou le plus bas, chacun décide).

En option : En sélectionnant un pion on affiche un infobulle avec la PROX, la PROX ENVIE, la PSY et la SATISFACTION. La couleur du jeton varie selon la SATISFACTION : plus elle est basse plus elle est noire, plus elle est haute plus elle est blanche.

Voilà ça me semble raisonnable, ouvert et clair.

*calcul de la PROX
J'ai programmé ton prototype en partant d'un début de projet de jeu perso, qui colle vraiment pas mal avec ce projet. En Java.
Enfin, quasiment programmé. Je ne sais pas ce qu'est la sensibilité (les valeurs que la variable peut prendre)...

J'ai défini la densité comme étant :
RAYON_DENSITE c'est égal à un nombre de cases dont on s'éloigne d'une case pour calculer sa densité, dans toutes les directions (diagonales comprises). Par exemple, si RAYON_DENSITE=1, alors on parcourt les 8 cases autour de la case.
Si RAYON_DENSITE=2, on parcourt 24 cases. Etc

D'où
Densité = nombre de pions trouvés / nombre de cases parcourues

cailloux
10/05/2011, 18h24
la sensibilité c'est en fait une exagération/diminution de l'influence de l'ENVIE sur la SATIS : en gros quelqu'un de très sensible verra une augmentation/diminution de la SATIS plus grande qu'une personne peu sensible. Je n'ai pas vraiment d'idée sur la fonction à utiliser. Une bête multiplication ferait ptet l'affaire ?

LaVaBo
11/05/2011, 10h28
la sensibilité c'est en fait une exagération/diminution de l'influence de l'ENVIE sur la SATIS : en gros quelqu'un de très sensible verra une augmentation/diminution de la SATIS plus grande qu'une personne peu sensible. Je n'ai pas vraiment d'idée sur la fonction à utiliser. Une bête multiplication ferait ptet l'affaire ?

Bon, j'ai testé en mettant 1.0 en sensibilité pour tout le monde (test avec 10 pions sur un espace de 30x30 cases). J'ai l'impression que regrouper tout le monde augmente à peu près tout le temps le bonheur global...
Je vais essayer d'exporter le projet, il reste plein de trucs à régler mais ça semble fonctionnel.

---------- Post added at 10h28 ---------- Previous post was at 09h34 ----------

OK, j'ai exporté (de façon très sale, ça donne un truc de 15Mo, mais ça fonctionne).

Si quelqu'un peut me donner l'adresse d'un site où déposer le fichier, tous ceux que je connais sont bloqués par le proxy de mon boulot.

Voilà un screenshot :
http://img263.imageshack.us/img263/2694/cpcprog.jpg (http://img263.imageshack.us/i/cpcprog.jpg/)

Le tileset (la mosaïque de fond) réduit un peu la lisibilité, mais ça me permettait de modifier très peu le prog existant.

A noter :
- pas de gestion du changement de couleur des pions selon leur humeur.
- attention en agrandissant la fenêtre, je promet pas que ça va pas planter lorsque vous afficherez plus de 30 cases, verticalement ou horizontalement
- la position de départ de chaque pion est calculée aléatoirement au lancement du programme
- la variable prox_envie est calculée aléatoirement aussi
- sensibilité fixée à 1.0 pour tout le monde
- il faut cliquer une fois sur la fenêtre de "jeu", avec les cases, avant de pouvoir gérer les clics ou le déplacement sur la map.
- flèches de direction pour le déplacement sur la map de cases
- clic gauche pour sélectionner une case, et afficher les infos de la case (densité, coordonnées), et d'un pion éventuel se trouvant dessus. Sur le screenshot, pas de pion sur la case dont on affiche les infos.
- clic gauche sur un pion, puis clic gauche sur une case vide, pour déplacer le pion
- clic droit pour déselectionner un pion.
- les boutons "tours suivant" et "sauvegarder" ne sont pas fonctionnels, ce sont des artefacts de mon prog d'origine
- calcul automatique du bonheur de chacun, de la densité de chaque case et du bonheur global avant de commencer, puis à chaque déplacement de pion.
- éventuellement des problèmes de calcul, considérez ça comme un beta test.

cailloux
14/05/2011, 19h42
Je t'ai envoyé un MP mais pas de réponses...

LaVaBo
25/05/2011, 14h21
Hop, j'ai enfin récupéré le projet sur une clé USB (j'ai fait les modifs dessus au boulot).

Je le met en ligne sous forme exécutable, avec tout le code source ce soir.

En attendant, je vous reposte un aperçu du code, que j'avais envoyé à quelqu'un qui me demandait le code (c'est pas très parlant sans l'avoir sous les yeux) :

Tout est en java, avec awt/swing, en particulier la gestion de la map basée sur un tileset (des tuiles de même taille avec chacune un bout de décor, comme l'herbe ou un bout de route) avec déplacement de la caméra. La seule bibliothèque externe que j'ai utilisée est destinée à la lecture de fichiers xml : jdom.
J'ai créé en tout 10 classes, dont une qui n'est utilisée que pour lancer le reste. Ensuite, il y a des classes héritées de swing, pour l"interface (JFrame, JPanel), et des classes utilisées pour construire la map, et gérer les pions (que j'ai appelés "personnes").

Je vais mettre la totalité du code source en ligne, il n'y a rien de novateur ou d'assez avancé pour valoir que je les garde pour moi.

2 points à noter :
- le code est crado, vu que je ne suis pas un très bon développeur, et que c'est à la base un début de jeu que je développais, auquel j'ai retiré tout ce qui n'était pas nécessaire et j'ai ajouté le code spécifique au truc de caillou. Il y a un mélange français/anglais un peu moche dans les noms de variables et de methods, et des trucs qui rendent le tout pas très compréhensible, comme des fonctions qui prennent les coordonnées (x,y) et d'autres qui prennent (y,x).
J'ajoute que je n'ai rien commenté, les prototypes des methods sont à peu près clairs, mais vu que l'ensemble est bordélique, ça sera pas forcément des plus simple à comprendre.

- à l'heure actuelle, ça n'est pas un algorithme d'IA, juste une formule de calcul qui s'exécute sur un événement donné (ici, le déplacement d'un pion). Il n'y a pas de situation à prendre en compte, de truc complexe en fonction de paramètres donnés ou je ne sais quoi, c'est juste une formule simple basée sur certains attributs des pions. Heureusement d'ailleurs, parce que je ne connais pas grand-chose en IA.

Si tu me donnes une adresse email, je peux t'envoyer tout ça (je galère à exporter le projet en un jar exécutable, mais je peux te donner le projet zippé, avec une rapide description des fichiers, les ressources en particulier : beaucoup d'image et quelques fichiers de paramétrage). Ensuite, je pourrai répondre à des questions précises que tu te poses. Questions précises, parce que je ne te ferai pas un cours de prog orientée objet, j'espère que tu as les bases. Si tu ne connais pas awt et swing (bibliothèques de gestion d'IHM en java), je te conseille les cours du site du zero, avec lesquels j'ai tout appris, qui sont clairs et concis.



Voilà un zip contenant les codes sources et toutes les ressources indispensables. J'ai juste pris le répertoire du projet et je l'ai zippé (quel sagouin...), et dans lequel je n'ai quasiment pas fait le ménage (ah bah bravo...).
Je peux te refaire un jar à importer de ton côté, si tu veux importer le projet dans eclipse ou je ne sais quel jdk.

J'ai développé dans un environnement Java 1.6, je crois qu'avec java 1.5, ça marche pas. Testé uniquement sur Windows XP et 2003 server.

En gros :
- le répertoire .settings est apparemment un cache d'eclipse, c'est pas utile.

- le répertoire /res contient les images et les fichiers de paramétrage xml et csv. La plupart sont des artefacts de mon jeu (items.xml, skills.xml...)
Le seul fichier image utilisé, si je ne me trompe pas, est tile.png, qui contient toutes les briques de construction de la map.
La map elle-même est décrite dans tilemap.csv, que j'édite avec excel pour modifier la map facilement. Il s'agit d'un fichier de 50 lignes de 50 nombres, séparés par des point-virgules. Si la map fait moins de 50x50 cases, je ne lis que N x N cases (attention : si la map n'est pas carrée, ça bug). La taille de la map se modifie dans la classe TileMap

- ywnte est le fichier où se trouvent les .java source. Et aussi des fichiers de ressource en doublon, pour je ne sais plus quelle raison.
Rapide description des classes :
Launcher ne sert qu'à lancer la fenêtre principale, c'est dedans que se trouve la fonction "main". Elle est superflue ici (sauf pour le fait qu'elle contient le main), mais j'avais commencé à gérer plusieurs threads dans mon jeu, et ça me permettait d'avoir une classe parente de tous les threads que je créais pour les fermer proprement lors d'une sortie du programme.
MainWindow est le conteneur principal, la fenêtre dans laquelle se trouve le reste. Elle a aussi un lien vers chacune des classes principales utilisées pour la gestion de chaque module (genre PersonManager, TileMap, PanGamePlay, PanInfoDisplay), et tous les modules ont un lien vers elle. Donc de n'importe quelle classe, en repassant par la classe mère, on peut accéder à l'instance de n'importe quelle autre classe.
PanButtonMenu est le panneau qui contient les 4 boutons en bas à droite, rien de particulier.
PanGameplay est le panneau où se trouve la map avec le quadrillage. C'est ici qu'est affichée la tilemap (l'affichage est géré dans la method paintComponent) en fonction de la position de l'observateur.
PanInfoDisplay est le panneau en bas à gauche, où sont affichées les informations sur les cases et les pions, ainsi que le bonheur global.
Person : c'est la classe qui représente les pions, et contient les attributs sensibilité, prox_envie, bonheur et les coordonnées. C'est dans cette classe que se trouvent les méthodes de déplacement d'un pion (le côté gestion de la souris est dans PanGameplay) et le calcul du bonheur de chaque pion.
PersonManager contient la liste de la totalité des personnes, et permet de stocker la moyenne de bonheur global.
Tile représente une case de la map. Je ne l'ai pas modifiée de mon jeu, je ne me rappelle donc plus trop ce qu'il y a dedans.
TileMap représente la map du jeu : lecture du csv, création de NxN tiles et calcul de la densité de chaque case.
La densité est calculée en parcourant les cases qui entourent une case, et en calculant nombre_de_persons_trouvées/nb_de_cases_parcourues. Le nombre de cases parcourues dépend de la variable RAYON_DENSITE présente dans TileMap. Par défaut, elle est à 1, càd qu'on parcourt les 8 cases en contact direct (diagonales comprises) avec la case dont on fait le calcul.
Enfin, TileSet crée un modèle de chaque tile et permet à TileMap de comprendre comment charger l'image de chaque Tile depuis le fichier tile.png, qui les contient toutes, en se basant sur le fichier de description tileset.xml. Chaque modèle de tile sera cloné autant de fois que nécessaire dans TileMap (par exemple, la map que j'ai créée ne contient quasiment que la tile avec de l'herbe, qui a donc été clonée plus de 150 fois). Le clonage permet de définir des attributs spécifiques à chaque tile (par exemple ici, densité).


J'insiste lourdement sur le fait que le code est sale, si vous êtes un ayatollah de l'optimisation (lol java :ninja:), n'allez pas voir, vous risquez l'attaque cérébrale.

Comme je l'ai dit à cailloux, je ne compte pas maintenir le code, parce que le projet ne m'intéresse pas plus que ça. J'ai modifié mon jeu d'origine, car cela vous donne une base pour continuer à implémenter les idées développées sur le topic sans me demander beaucoup de taf (le concept du jeu permettait de mettre en place le prototype de cailloux avec un minimum de modifications), mais je ne suis pas intéressé pour passer du temps à développer un moteur social théorique.
Je peux par contre répondre à des questions sur le code, mais uniquement si vous avez lu et globalement compris ce code avant, pas des questions sur "comment je peux ajouter des animations de déplacement des persos" ou "comment ça marche l'affichage d'une fenetre en java".

Bref, je poste deux liens ce soir :
- la totalité du code source avec toutes les ressources. A réserver aux programmeurs, ou aux gens très motivés.

- projet exécutable par tout le monde. Le fichier zip contiendra :
un répertoire "res" avec les ressources
un jar avec le code compilé
un csv qui doit se trouver dans le même répertoire que le .jar parce que je me suis chié quelque part et que je ne vais pas débugger
un fichier .bat à lancer pour exécuter le programme.
Il suffit de dézipper tout ça dans un même répertoire et de lancer le .bat. Vous aurez besoin du JRE java 1.6 dispo gratuitement ici : http://www.java.com/fr/download/windows_xpi.jsp?locale=fr pour que ça tourne.

LaVaBo
25/05/2011, 23h37
Les fichiers pour exécuter le prog se trouvent ici :
http://dl.free.fr/vppkH2MhX

J'ai oublié de récupérer les sources, je fais ça dans la semaine et je les met en ligne de la même façon.

cailloux
28/05/2011, 18h40
Merci lavabal pour ton post et tes efforts.

temujingamer
06/08/2011, 14h52
cailloux> je trouve ton idée de départ très intéressante, justement ça fait des années que je réfléchis à la même question et que je teste dans mon coin certaines idées. Seulement je pense que tu glisses de plus en plus d'un Moteur de relation sociale vers le design et la programmation d'une I.A complète. Dans ce domaine beaucoup de travaux sont en cours, notamment des I.A capables de permettre à des "individus" d'interagir entre eux selon leurs priorités et leurs "envies" (ça donne des organismes virtuels basiques qui copulent, chassent et mutent de manière indépendante et non prévisible)

Est ce la ce que tu veux ? creer une I.A est un travail de Titan, mais il faut dire que dans les jeux vidéos personne ne s'y est vraiment interessé. (moi je dirais que c'est au moins le travail d'un thésard au minimum)

cailloux
13/08/2011, 20h08
cailloux> je trouve ton idée de départ très intéressante, justement ça fait des années que je réfléchis à la même question et que je teste dans mon coin certaines idées. Seulement je pense que tu glisses de plus en plus d'un Moteur de relation sociale vers le design et la programmation d'une I.A complète. Dans ce domaine beaucoup de travaux sont en cours, notamment des I.A capables de permettre à des "individus" d'interagir entre eux selon leurs priorités et leurs "envies" (ça donne des organismes virtuels basiques qui copulent, chassent et mutent de manière indépendante et non prévisible)

Est ce la ce que tu veux ? creer une I.A est un travail de Titan, mais il faut dire que dans les jeux vidéos personne ne s'y est vraiment interessé. (moi je dirais que c'est au moins le travail d'un thésard au minimum)

Non mais comme je le dis depuis le début j'ai aucune connaissance de quoi que ce soit en info, tout ça est très théorique pour moi (en fait je m'embrouille pas mal et suis carrément inefficace, oui, même pour avoir juste des idées.) Finalement le projet est au point mort par manque de codeur (entre autres)

Mais j'ai adoré la discussion.