IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
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

Haskell Discussion :

Transformation de programmes


Sujet :

Haskell

  1. #1
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    65
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Janvier 2007
    Messages : 65
    Points : 54
    Points
    54
    Par défaut Transformation de programmes
    Salut!
    Je m'intéresse à la transformation de programmes en haskell, vous auriez des pointeurs là-dessus?

    Supposons que je veuille mettre au point des "agents intelligents" qui jouent à un jeu. Par exemple, le puissance 4.
    Par "agent intelligent", je veux dire qu'il s'agit de programmes qui savent jouer au puissance 4, bien sur, mais qui savent en plus analyser la stratégie de l'adversaire... Et changer sa propre stratégie en conséquence.

    Le joueur A à donc accès au code (la stratégie) du joueur B, et inversement.
    Il va donc analyser le code du joueur B et changer sa propre stratégie en fonction: il devient le joueur A'. Le joueur B fait pareil, et il devient le joueur B'. Et ainsi de suite.

    On a donc successivement les programmes suivants:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    rang 1: A                 B
    rang 2: A.B              B.A
    rang 3: (A.B).(B.A)    (B.A).(A.B)
    Y a t'il des études qui ont été faites dans ce sens?
    Quelles outils utiliser?
    Vers quoi cela va converger?

  2. #2
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Points : 18 679
    Points
    18 679
    Par défaut
    pour ce genre de problèmes, je dirais que les techniques min-max ou systèmes de classeurs devraient suffire à "faire croire" qu'on a une certaine adaptation de sa stratégie, à un coût raisonnable
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  3. #3
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    65
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Janvier 2007
    Messages : 65
    Points : 54
    Points
    54
    Par défaut
    Non non non l'objet de mon post était de parler de transformation de programmes en Haskell!!
    Le puissance 4 était juste un prétexte...

  4. #4
    Rédacteur/Modérateur

    Avatar de gorgonite
    Homme Profil pro
    Ingénieur d'études
    Inscrit en
    Décembre 2005
    Messages
    10 322
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur d'études
    Secteur : Transports

    Informations forums :
    Inscription : Décembre 2005
    Messages : 10 322
    Points : 18 679
    Points
    18 679
    Par défaut
    Citation Envoyé par kaukau Voir le message
    Non non non l'objet de mon post était de parler de transformation de programmes en Haskell!!

    qu'appelles-tu "transformation de programme" ?
    si c'est évolution du comportement d'un programme donné en fonction des résultats obtenus, alors les techniques "évolutionnistes" de l'IA sont adaptées
    Evitez les MP pour les questions techniques... il y a des forums
    Contributions sur DVP : Mes Tutos | Mon Blog

  5. #5
    Inactif  
    Profil pro
    Inscrit en
    Juillet 2005
    Messages
    1 958
    Détails du profil
    Informations personnelles :
    Âge : 58
    Localisation : France

    Informations forums :
    Inscription : Juillet 2005
    Messages : 1 958
    Points : 2 467
    Points
    2 467
    Par défaut
    C'est vague effectivement. Veux-tu dire « transformation de code source » ? Car ce que tu présentes se fait par des approches d'IA classiques.

  6. #6
    Membre émérite
    Avatar de SpiceGuid
    Homme Profil pro
    Inscrit en
    Juin 2007
    Messages
    1 704
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2007
    Messages : 1 704
    Points : 2 990
    Points
    2 990
    Par défaut
    Citation Envoyé par kaukau
    Le joueur A à donc accès au code (la stratégie) du joueur B, et inversement.
    C'est exactement comme le dit gorgonite, ton minimax (ou ton alpha-beta) peut utiliser une fonction d'évaluation pour le joueur A et une autre pour le joueur B. Ensuite, si ça t'amuse, tu peux imaginer un comportement évolutionnaire (j'aime pas "évolutionniste") sur les composantes de tes fonctions d'évaluations.

    Le titre pourrait inciter à penser que ce dont tu parles c'est en fait de manipuler du code comme des données, auquel cas :
    • tu te tromperais de langage, de système de types, et peut être même de paradigme, tout traiter comme des données c'est une approche réifiante plutôt que fonctionnelle même si bien entendu Scheme/Lisp peuvent très bien le faire
    • à mon avis tu te tromperais de démarche, tu ne vas pas ajouter de l'autonomie en mécanisant l'écriture de la fonction d'évaluation, par contre tu es presque certain d'ajouter une source inépuisable d'Imbécilité Automatique

    En résumé toute la force d'alpha-béta réside dans le fait que c'est une intelligence humaine qui conçoit les principaux composants de la fonction d'évaluation. De ce côté là, si tu reste autour de Haskell/Caml, attends toi à des opinions assez conservatrices.
    Du même auteur: mon projet, le dernier article publié, le blog dvp et le jeu vidéo.
    Avant de poser une question je lis les règles du forum.

  7. #7
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    65
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Janvier 2007
    Messages : 65
    Points : 54
    Points
    54
    Par défaut
    Effectivement c'est un peu vague!!
    Je voulais juste initier une discussion sur la transformation de programmes en Haskell.
    C'est à dire un programme, en Haskell, qui transforme un autre programme (son code), éventuellement en Haskell.
    Par exemple, pour en extraire de la doc, faire de l'analyse statique, faire du refactoring etc.
    C'est globalement un sujet qui m'intéresse, donc tout commentaire/pointeur est bienvenu.
    Quelques questions en vrac:
    Haskell supporte-t'il la réflection?
    Comment programmeriez vous un algorithme génétique? Et un algorithme génétique qui agit sur des programmes?
    Comment manipuler un programme en Haskell?


    Pour en revenir à mon post initial, je voudrais inventer un jeu dans lequel les agents doivent lire le code de l'adversaire pour adapter leur propre stratégie.

  8. #8
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Généralement vu le but original, il me semblerait bien plus raisonnable de créer un petit EDSL pour exprimer les stratégies.

    Néanmoins si tu tiens à aborder le sujet de la réflexion en Haskell, il y a plusieurs outils intéressants, d'une part il y a tout ce qui est programmation générique (SYB, Uniplate, EMGM...). Ensuite tu as Template Haskell (les macros typés, en Haskell) qui couplé avec un parser Haskell (comme celui fourni par haskell-src-ext) apporte des possibilités intéressantes. Enfin tu peux attaquer directement l'API GHC ou de façon plus raisonnable utiliser l'un des packages à l'interface un peu plus abordable comme intermédiaire et charger du code à l'exécution.

    Je te souhaite bien du plaisir, il y a matière à faire des choses jolies dans le tas.

    --
    Jedaï

  9. #9
    Membre du Club
    Inscrit en
    Janvier 2007
    Messages
    65
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Janvier 2007
    Messages : 65
    Points : 54
    Points
    54
    Par défaut
    Merci pour vos réponses.
    En effet, un EDSL me semble approprié, bien que je n'ai aucune expérience dans ce domaine.
    ya t'il des exemples d'EDSL pour exprimer des stratégies à un jeu?

  10. #10
    Membre du Club Avatar de limestrael
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 86
    Points : 57
    Points
    57
    Par défaut
    J'ai envie de dire LUA, mais bon, c'est quand même un langage de script plus qu'un EDSL, et puis pour interfacer ça avec Haskell, tu vas rigoler.

  11. #11
    Expert éminent
    Avatar de Jedai
    Homme Profil pro
    Enseignant
    Inscrit en
    Avril 2003
    Messages
    6 245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Avril 2003
    Messages : 6 245
    Points : 8 586
    Points
    8 586
    Par défaut
    Citation Envoyé par limestrael Voir le message
    J'ai envie de dire LUA, mais bon, c'est quand même un langage de script plus qu'un EDSL, et puis pour interfacer ça avec Haskell, tu vas rigoler.
    Je ne pense pas que Lua soit vraiment adapté à exprimer des stratégies de jeu, tu confonds avec le fait que Lua soit utilisé en tant que langage de script pour un certain nombre de jeux vidéos, mais dans ces cas il est principalement utilisé pour faire des macros, ou des triggers, pas grand chose à voir avec de la stratégie globale.

    --
    Jedaï

  12. #12
    Membre du Club Avatar de limestrael
    Profil pro
    Inscrit en
    Juin 2009
    Messages
    86
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2009
    Messages : 86
    Points : 57
    Points
    57
    Par défaut
    Citation Envoyé par Jedai Voir le message
    Je ne pense pas que Lua soit vraiment adapté à exprimer des stratégies de jeu, tu confonds avec le fait que Lua soit utilisé en tant que langage de script pour un certain nombre de jeux vidéos, mais dans ces cas il est principalement utilisé pour faire des macros, ou des triggers, pas grand chose à voir avec de la stratégie globale.
    Ouaip, tu as sûrement raison. A vrai dire, j'ai pas trop pratiqué le scripting d'IA. Est-ce que CLisp (ou Scheme) serait adapté et facile à utiliser dans ce cas ? Pour définir une stratégie j'entends, pas pour faire de la transformation de programmes.

Discussions similaires

  1. [6809] Transformer un programme C en Assembleur
    Par caribou90 dans le forum Autres architectures
    Réponses: 1
    Dernier message: 20/06/2009, 02h30
  2. [SHAREWARE] Transformer son programme en shareware ?
    Par telodo dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 08/10/2007, 16h32
  3. Transformer un programme en démon
    Par Info_76 dans le forum Applications et environnements graphiques
    Réponses: 5
    Dernier message: 08/08/2007, 16h08
  4. Réponses: 1
    Dernier message: 12/04/2007, 11h30
  5. Transformer un programme java en service windows
    Par daninho dans le forum Général Java
    Réponses: 41
    Dernier message: 15/01/2006, 18h36

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo