Navigation

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

Intelligence artificielle Discussion :

Un algorithme pour développer l'amour


Sujet :

Intelligence artificielle

  1. #1
    Membre actif
    Un algorithme pour développer l'amour
    Bonjour,

    cette discussion fait suite à celle sur un projet de jeu vidéo en Java que je développe actuellement, AnAcondA :
    AnAcondA, jeu vidéo

    Je veux qu'AnAcondA soit aussi vivant que possible et j'en arrive à la programmation de cette interaction sociale qu'on appelle amour, ce fait d'être amoureux(se) d'une personne.

    Comment faire un algorithme qui ressemble autant que possible au charme de l'amour ?

    Actuellement, j'en suis là :

    Je pars d'une variable plaisir qui peut augmenter ou diminuer. Je n'ai pas encore d'idée pour des algorithmes d'effet de plaisir mais j'y pense aussi.

    Nous avons donc une variable plaisir et une interaction entre deux êtres supposés amoureux l'un de l'autre. L'effet de cette interaction sur la variable plaisir serait une augmentation en fonction du temps si les deux êtres sont proches et une diminution s'ils sont loin.

    Cela donne (en Java)

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      public void amour(LifeForm lf0, LifeForm lf1, double instantQuality, double time) {
         double distance = getDistance(lf0, lf1);
         plaisir = plaisir + instantQuality * time / distance;
      }


    Le mérite de ce code est sa simplicité, instantQuality est une évaluation de la qualité de l'instant, positive ou négative. La viariable time désigne la longueur du moment évalué. Enfin,lf0 et lf1 sont un couple d'êtres vivants amoureux. On programme l'algorithme pour chaque tour de la boucle infinie d'une vie artificielle.

    Je veux d'autres opinions que la mienne sur ce sujet, qu'en pensez-vous, tant au niveau philosophique qu'au niveau de la faisabilité de créer l'amour dans un logiciel ?

    Merci,
    __________________________________
    | +
    | Sylvain Tournois - Création logicielle
    |
    | sylv.tournois.free.fr
    |

  2. #2
    Expert éminent sénior
    va voir comment font les sims?
    sinon, va te falloir un modèle hormonale si tu veux être réaliste. Mais beaucoup te diront qu'en amour, personne n'y comprend rien. Donc une bonne dose de random() devrait suffir
    David Delbecq Java developer chez HMS Industrial Networks AB.    LinkedIn | Google+

  3. #3
    Modérateur

    Bonjour,

    Citation Envoyé par tchize_ Voir le message
    va voir comment font les sims?
    sinon, va te falloir un modèle hormonale si tu veux être réaliste. Mais beaucoup te diront qu'en amour, personne n'y comprend rien. Donc une bonne dose de random() devrait suffir
    Je plussoie
    J'ajouterai juste que le plaisir que deux personnes éprouvent lorsqu'elles sont ensembles, n'est pas forcément de l'amour : que fait on de l'amitié dans ce jeu ?
    Disons par contre, que tu peux ajouter le coté hormonal attribué aléatoirement et que tu peux décider d'une frontière de décision dépendant de ces deux variables : compatibilité hormonale et plaisir d'être ensemble. Si le seuil est atteint, alors on peut commencer à incrémenter la variable amour.

    J'aurai tendance à affiner le coté plaisir par des variables de type : compatibilité de caractères, centres d'intérêts, opinions, ...
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  4. #4
    Membre éclairé
    Citation Envoyé par ToTo13 Voir le message
    J'ajouterai juste que le plaisir que deux personnes éprouvent lorsqu'elles sont ensembles, n'est pas forcément de l'amour : que fait on de l'amitié dans ce jeu ?
    J'ajouterai également : "Que fait-on du sexe ?" (façon un peu trash je vous l'accorde d'exprimer un plaisir sans amour forcément)

  5. #5
    Rédacteur

    Citation Envoyé par Captain_JS Voir le message
    J'ajouterai également : "Que fait-on du sexe ?" (façon un peu trash je vous l'accorde d'exprimer un plaisir sans amour forcément)
    Même si je ne l'aurais pas tourné comme ça, c'est une des principales composantes de la vie. J'avais vu une étude qui démontrait qu'il y avait un lien entre l'attirance entre deux personnes et la diversité de leur génome afin de favoriser le brassage génétique de leur descendance.

    Bref un bon random collera parfaitement à la réalité

  6. #6
    Membre confirmé
    Citation Envoyé par gege2061 Voir le message
    la diversité de leur génome
    Pas tout à fait La diversité de ce qui est exprimé par les systèmes immunitaires, en fait. Parce que les génomes sont tous différents

    Mais ce n'est qu'un détail : le random devrait être la faàon de faire par excellence
    Le tact dans l'audace c'est de savoir jusqu'où on peut aller trop loin. Cocteau
    L'abjection la plus totale, ce n'est pas de trahir, c'est de ne jamais donner un commencement de réalité à ses rêves les plus fous. M. Moreau


    Les indispensables : Les règles, , FAQ et tutos avant de poster, et !
    Traduction de Linux Device Drivers 3 : venez participer
    membre de l'April - Promouvoir et défendre les logiciels libres

  7. #7
    Expert éminent sénior
    Hello AnadonCamille, je clique sur le lien j'ai une erreur HTTP 404.
    Sinon quelque chose de plus évolué serait d'introduire des paramêtres psychologiques et évidemment subjectifs comme la sensibilité,charme,etc..
    Sinon oui voir comment cela se passe avec les Sims c'est une bonne idée
    La théorie, c'est quand on sait tout et que rien ne fonctionne.
    La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.
    ( A Einstein)

  8. #8
    Membre actif
    Séduction et affinité
    Salut,

    Effectivement, Les Sims ont un très bon algorithme pour mettre l'amour en scène. J'ai vu qu'ils utilisent des horoscopes comme base de hasard pour les réactions et interactions des personnages. Pour mon jeu, je cherche à simplifier le programme autant que possible car je vise la quantité. En fait tous les pnjs du jeu auront sensiblement la même base comportementale. Localement, les comportements sont précisés en fonction des besoins du scénario.

    On pourrait avoir une variable vibration qui varie de façon plus ou moins aléatoire en fonction du temps et d'autres paramètres. Si deux personnages se rencontrent et ont des vibrations similaires ("Sur la même longueur d'onde" ou "en phase"), ils créent un lien d'attraction entre eux qui les incite régulièrement à se rapprocher l'un de l'autre. Cela permettrait d'implémenter l'amitié dans un premier temps, puis l'amour avec un algorithme similaire prioritaire sur celui de l'amitié.

    Cela donnerait :

    Pour chaque personnage, gestion des vibrations :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    // initialisation :
    double vibrationAmitie = baseTirageAléatoire();
    double vibrationAmour = baseTirageAléatoire();
    Personnage am0; // futur amour
    Personnage am1; // future amitié
     
    // à chaque tour de boucle :
    vibrationAmitie = vibrationAmitie + petitTirageAléatoire();
    vibrationAmour = vibrationAmour + petitTirageAléatoire();


    Lors d'une rencontre entre deux personnages P0 et P1 :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if (affiniteAmitie(P0, P1))
      creerLienAmitie(P0, P1);
    if (affiniteAmour(P0, P1))
      creerLienAmour(P0, P1);


    Ici on va faire des choix sur le nombre d'amis et d'amours d'un personnage, je suis parti sur une base de une amitié et un amour pour simplifier le code présenté, on peut facilement augmenter l'algorithme pour X amour(s) et Y amitié(s). D'autres choix devront être faits vis-à-vis du lien créé, est-il permanent ou temporaire, sur quels critères choisit-on de remplacer un lien par un autre, etc ...

    Pendant la vie des personnages, pour chaque tour, on va avoir :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    if (existeLienAmour)
      allerVersLAmour();
    else
      if (existeLienAmitie)
        allerVersLAmitié();
    if (avecAmour())
      plaisir = plaisir + getQualiteMomentAmour();
    if (avecAmitie())
      plaisir = plaisir + getQualiteMomentAmitie();
    if ((!avecAmour()) && (!avecAmitié()) {
      plaisir = plaisir - getQualiteDeception();
      chercheATisserDesLiens();
    }


    Pour voir depuis hier cet algorithme tourner dans mon jeu, il fonctionne bien, c'est migon tout plein. Pour simplifier et programmer plus vite, je me suis limité à un seul lien d'amour permanent (principe des âmes soeurs). Les personnages sont sur une carte en nombre pair, autant d'hommes que de femmes et les mouvements de base sont aléatoires. Quand deux personnages de sexe opposé se rencontrent et sont libres, ils créent leur lien d'amour. Quand ils sont ensemble, ils se font des strip-teases et se chargent de plaisir. Quand ils sont rechargés en plaisir, ils reprennent leurs occupations habituelles (marcher fièrement de long en large sur la carte).

    Pour les systèmes immunitaires et hormonaux, je ne sais pas comment ils fonctionnent, mais le système hormonal m'intéresse pour son lien avec la l'excitation et la jouissance. Je ne me suis pas penché sur la question en termes d'algorithmes. Par contre, pour ce qui est de faire en sorte qu'un programme éprouve réellement du plaisir, je me pose la question suivante : qu'est-ce qui fait réellement plaisir à un programme ?
    __________________________________
    | +
    | Sylvain Tournois - Création logicielle
    |
    | sylv.tournois.free.fr
    |

  9. #9
    Modérateur

    Bonsoir,

    Citation Envoyé par anadoncamille Voir le message
    je me pose la question suivante : qu'est-ce qui fait réellement plaisir à un programme ?
    d'expérience... ... aboutir à un segmentation fault !

    Plus sérieusement est ce que tu ne peux pas tirer des petites doses de plaisir sur tous les paramètres qui font que deux personnes sont en phase ?
    Même opinion, mêmes intérêts, ... à chaque fois tu augmentes un peu le plaisir d'être proche.

    Je pensais à un petit détail pour une future évolution de ton jeu : deux personnes sont ensembles, ce sont des âmes soeurs, ... c'est bien.
    Mais lorsqu'ils commencent à s'aimer, ne peux tu pas donner un seuil limite à leur amour qui serait fonction des hormones, des centres d'intérêts, de leurs opinions et encore un peu d'aléatoire.
    De sorte que cela n'empêche pas un individus d'éprouver du plaisir à être avec quelqu'un d'autre, donc de se rapprocher, ... patati et patata et lorsque le seuil de plaisir se transforme en amour, commencer à décrémenter d'autant l'amour de l'individu avec son âme soeur (compagne).
    Cela permettrait de ne pas figer le jeu au niveau des couples, de donner un certain réalisme (ben ouai... désolé mais ça arrive dans la vie ce genre de chose). Comme ça un individu pourra évoluer.
    Consignes aux jeunes padawans : une image vaut 1000 mots !
    - Dans ton message respecter tu dois : les règles de rédaction et du forum, prévisualiser, relire et corriger TOUTES les FAUTES (frappes, sms, d'aurteaugrafe, mettre les ACCENTS et les BALISES) => ECRIRE clairement et en Français tu DOIS.
    - Le côté obscur je sens dans le MP => Tous tes MPs je détruirai et la réponse tu n'auras si en privé tu veux que je t'enseigne.(Lis donc ceci)
    - ton poste tu dois marquer quand la bonne réponse tu as obtenu.

  10. #10
    Membre actif
    Java d'exception
    Salut,

    Citation Envoyé par ToTo13 Voir le message

    d'expérience... ... aboutir à un segmentation fault !
    J'en arrive à la même conclusion sur les erreurs système ! On dirait que les programmes ont l'air d'aimer chatouiller les parties les plus lointaines de l'ordinateur .
    En parallèle, je réfléchissais avec l'histoire des vibrations et du fait d'être en phase et sur la même longueur d'onde pour créer une simulation d'affinité.

    En gros ça donne :
    soient vib0 et vib1 les valeurs actuelles des vibrations :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
     
    plaisir = plaisir + qualiteMoment / Math.abs(vib1 - vib0);


    La division provoque une apparition de l'infini et une erreur de division par zéro, ce qui déclenche une exception chaque fois que les valeurs de vibration sont égales . Je pourrais éviter l'exception ainsi :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    double dv = Math.abs(vib1 - vib0);
    if (dv != 0)
      plaisir = plaisir + qualiteMoment / dz;
    else
      plaisir = 2 * plaisir;


    Mais vu l'idée d'essayer de faire plaisir à un programme en le poussant à créer des erreurs, je vais faire plutôt quelque chose du style :

    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    try {
      plaisir = plaisir + qualiteMoment / Math.abs(vib1 - vib0);
    }
    catch (Exception e) {
      plaisir = 2 * plaisir;
      dire("Aaah");
    }


    Je vais essayer dès que possible, je suis curieux.

    Pour les relations variables, j'y pense mais c'est plus difficile à coder que les liens fixes. Actuellement, c'est la variable plaisir qui fait que deux amoureux ne restent pas ensemble en permanence. Quand le plaisir est suffisant, il ne cherchent pas à se retrouver et vont à leurs activités habituelles. Pendant ce temps, leur plaisir diminue lentement. Quand leur plaisir est sous un certain seuil, ils cherchent avant tout à se retrouver.

    Ce que j'envisage pour les changements de partenaires serait d'utiliser la variable vibration avec une mémoire de la vibration de partenaire. Si lors d'une rencontre deux personnages ont des valeurs de vibration plus proches de ce qu'ils ont connu récemment, ils forment un nouveau duo et rompent les deux anciens.
    Pour l'instant je reste sur l'idée des duos stables car c'est plus simple à faire.
    __________________________________
    | +
    | Sylvain Tournois - Création logicielle
    |
    | sylv.tournois.free.fr
    |

  11. #11
    Futur Membre du Club
    amour <> sexe
    N'oublie pas de faire un distinction entre amour et sexe.
    Ce qui permet d'approcher l'éternelle réalité : je le/la trompe, mais je l'aime

  12. #12
    Membre actif
    Je ne partage pas ton avis, c'est personnel, mais si j'aime une femme, je n'ai pas envie d'être avec une autre.

    La distinction est faite entre sexe et amour, par contre je m'intéresse maintenant aux algorithmes type hormones ou imunitaires.

    Quelqu'un saurait-il me conseiller dans ce domaine ?
    Comment puis-je les appliquer dans le jeu ?
    __________________________________
    | +
    | Sylvain Tournois - Création logicielle
    |
    | sylv.tournois.free.fr
    |

  13. #13
    Membre averti
    Je pense que réduire l'amour à une notion de plaisir est une erreur.
    Et lier l'amour directement à la distance aussi.
    Le phénomène de cristallisation est justement l'inverse, il/elle est loin, il/elle me manque, je l'aime encore plus.
    Je pense que tu devrais ajouter le plus de variables possibles (affinité intellectuelle, centres d'intérêt, affinité sexuelle, attirance physique etc...) , afin de générer un peu de chaos dans tout cela
    La sécurité de l'emploi
    "Ce n’est pas une pratique médicale sensée que de risquer sa vie en se soumettant à une intervention probablement inefficace afin d’éviter une maladie qui ne surviendra vraisemblablement jamais."
    Docteur Kris Gaublomme, médecin belge ("Vaccins et maladies auto-immunes")

  14. #14
    Membre actif
    Loin de moi l'idée de réduire l'amour à la notion de plaisir, mais je ne conçois cependant pas d'amour sans plaisirs (entre autres sexuels). Le but de ma démarche est de simuler la réalité, non d'en extraire les arcanes secrets connus de seuls quelques généreux initiés.

    Pour la distance, je désire mettre en oeuvre une force appelée force d'attraction laquelle est uniquement lié à la distance. La lune ne tourne pas autour de la terre par amour (ça se saurait). Cependant l'amour est une force d'attraction, à moins d'être masochiste. J'ai vécu des relations à distance et je n'aime pas, mon désir d'être avec ma copine quand elle est loin ne m'aide pas, cela m'attriste et me freine. Au contraire, quand elle est près de moi, je me sens pousser des ailes.

    L'idée d'ajouter le plus de variables possible est excellente, mais je ne veux pas me faire avoir par le piège d'ajouter jusqu'à la longueur de chaque cheveux des personnages pour rendre l'interaction plus réaliste. Comme je gère plusieurs centaines de personnages en même temps, j'ai plutôt besoin d'algorithmes simples et rapides. Pour l'instant il y a une seule variable affinité qui regroupe les autres affinités et intérêts possibles et en simule la moyenne. Cette variable suit une courbe d'onde et je calcule l'affinité en fonction de la différence de longueur d'ondes, comme je le décris dans les messages précédents.

    Au niveau des performances, j'ai besoin que le fonctionnement des personnages soit assez rapide pour avoir une bonne fluidité d'affichage, même sur un ordinateur bas de gamme, afin de toucher un public aussi large que possible (aussi parce que mon ordinateur est un bas de gamme et que j'aime jouer à mon jeu ).
    __________________________________
    | +
    | Sylvain Tournois - Création logicielle
    |
    | sylv.tournois.free.fr
    |

  15. #15
    Membre expérimenté
    Pour simuler l'influence du milieu exterieur, il pourrait être interessant d'ajuster ta longueur d'onde de temps à autres.
    Genre toutes les minutes passées avec quelques personnes, le personnage à sa longueur d'onde qui se "déplace" un tout petit peu vers la moyenne des longueurs d'ondes des gens présents.
    A contrario (et pour éviter une convergence qui ferait qu'a termes tout le monde à la même longueur d'onde), si le personnage se retrouve seul un certain temps, sa longueur d'onde retourne vers son seuil initial.

    Eventuellement, quand deux personnages sont amoureux et ensembles, leurs longueurs d'ondes peuvent converger vers la moyenne des deux, voire à termes évoluer ensemble indépendament du milieu, parce qu'ils sont dans une "bulle" ^_^
    Rakken

    Oneira, un monde imaginaire d'Heroic Fantasy.

    Parce que la présomption d'innocence est un des fondements de notre pays et qu'elle doit le rester, dans tous les domaines : http://www.laquadrature.net/

  16. #16
    Membre actif
    Ouii
    Merci Rakken pour ton idée sur l'influence des interactions entre personnages, je suis partant pour la coder.

    Pour l'instant l'onde que j'utilise est une onde aléatoire bornée par un maximum et un minimum. Même si j'utilise les expressions "sur la même longueur d'onde" et "décalage de phase/en phase", l'onde que j'utilise n'a ni paramètre de phase ni longueur d'onde définies. Je vais donc partir sur une onde sinusoidale :
    Code :Sélectionner tout -Visualiser dans une fenêtre à part
    1
    2
     
    onde(temps) = phase + sinus(temps * longueur)

    Je reviens avec du code, merci encore.
    __________________________________
    | +
    | Sylvain Tournois - Création logicielle
    |
    | sylv.tournois.free.fr
    |

###raw>template_hook.ano_emploi###