Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 28/04/2013, à 16:57

Melrock

Concours de robots

Bonjour à tous !

Je vous lance un défi collectif smile

J'ai écrit un petit programme servant à faire combattre 2 robots.
Chaque robot est entièrement autonome. Ses actions sont définies par une fonction écrite en C.
Donc le défi est simple : qui réussira à écrire un robot  capable de battre les miens ?
(en fait c'est très bidon : mes robots sont écrits à l'arrache, loin d'être parfaits et comportent même quelques bugs tongue)

Plus en détail :
Ici les sources : https://mega.co.nz/#!TQ93UaRa!dmfll2bt4 … 4LeaComp4w

Voir, dans le fichier LISEZ-MOI.txt, la façon d'ajouter un robot.

Le graphisme est simpliste. Il s'appuie, au choix, sur une interface GL ou X11 (voir dans LISEZ-MOI.txt la façon de paramétrer la compilation).

Les robots combattent dans un labyrinthe généré par le programme. Il y a a priori 2147483647 labyrinthes possibles.

Il y a quelques règles à respecter :
    - le source d'un robot ne doit pas inclure d'autre header du programme que "interactions.h" (il peut utiliser ce qu'ils veut comme header système). Ceci parce que ce serait ingérable si les robots avaient un accès direct aux données.
    - la fonction principale du robot DOIT commencer par :
        while (!Depart) usleep (1);
        pour attendre que le moteur ait fini de s'initialiser.
    - on n'a pas le droit d'utiliser des astuces du genre écrasement mémoire, bidouille de la table des threads ou autre pour gagner (encore que je serais curieux de voir ... wink )
    - un robot marque deux points s'il tue son adversaire sans mourir lui-même. Si les deux robots meurent ou si tout les deux survivent, le plus proche du centre marque un point.

Postez ici les sources de robots que vous aurez écrit pour que chacun puisse les confronter.
Posez aussi toutes les questions que vous voudrez, j'essaierai d'y répondre. Le fichier LISEZ-MOI.txt donne la réponse à toutes les questions auxquelles j'ai pensé pour l'instant.

Et, bien sûr, si vous trouvez un bug, ne manquez pas de le signaler. roll
Je l'ai testé sous Ubuntu 11.10, sur un AMD Athlon dual core à 2.9 GHz et une carte graphique ATI Radeon 3000 dotée de 256 Mo de mémoire. C'est amplement suffisant, mais je n'ai pas une idée très claire de la configuration minimale requise.

A+

Dernière modification par Melrock (Le 30/04/2013, à 22:48)


Tout problème a sa solution, donc s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.

Hors ligne

#2 Le 28/04/2013, à 17:48

FelixP

Re : Concours de robots

Hou la mocheté ! Une archive rar ! Utilise plutôt du bzip2 ou gzip ! smile (et mets tous tes fichiers dans un dossier dans l'archive, histoire de pas se retrouver avec tous les fichiers éparpillés dans son ~/ wink )

Sinon je suis la discution, ça m'a l'air intéressant même si au milieu de mes concours je n'ai pas le temps, je me penche sur tes robots 'asap' wink

Félix

Dernière modification par FelixP (Le 28/04/2013, à 17:49)


Envoyé depuis mon navigateur libre sous mon os libre.
Manjaro (basé Arch) + Cinnamon, et Firefox-Nightly 44.0 !
Voyez mes astuces ici : http://doc.ubuntu-fr.org/utilisateurs/felixp

Hors ligne

#3 Le 28/04/2013, à 19:02

ssdg

Re : Concours de robots

On dirait vachement l'idée de robocode. (mais bon, robocode, c'est du java) et le terrain de jeu et les règles sont bien plus simple.


s'il n'y a pas de solution, c'est qu'il n'y a pas de problème... ou pas.

Hors ligne

#4 Le 29/04/2013, à 11:40

Bigcake

Re : Concours de robots

Bonjour

Intéressant comme défi
J'ai un peu regardé le code, et y a un truc qui ma parait pas très clair dans tout ça : la fonction dormir()
A première vue, tu 'conseille' de l'utiliser mais si je veut avoir un robot plus réactif que le tiens, il suffit que je ne l'utilise pas (même si ça risque de monopoliser le CPU)
Ne faudrait-il pas définir une obligation d'utiliser dormir() avant ou après un regarder() ?

Sinon, une petite idée pour une fonctionalité supplémentaire pour ton logiciel, ce serai d'inclure le chargement automatique de nouveaux robots (au format .so), plutôt que de devoir recompiler à chaque fois qu'une nouvelle IA est testé (genre via dlopen, dlopen, dlsym, ...)

En tout cas, le concept me plait bien (en C en plus, c'est parfait), j'essayerai de me programmer un robot (que je publierai si j'ai pas trop honte du résultat lol)

Dernière modification par Bigcake (Le 29/04/2013, à 11:45)


"Les gens" ne sont pas cons, ils ont été habitués à la facilité et à la désinformation. Le meilleur moyen de ne pas les aider, c'est de se moquer. Le meilleur moyen de les aider, c'est de les informer, encore et encore. La réflexion viendra. N'oubliez pas que vous aussi, vous êtes le con d'un autre.
Smartphone+GNU/Linux=Librem5

Hors ligne

#5 Le 30/04/2013, à 22:41

Melrock

Re : Concours de robots

Bonjour

Bigcake a écrit :

A première vue, tu 'conseille' de l'utiliser mais si je veut avoir un robot plus réactif que le tiens, il suffit que je ne l'utilise pas (même si ça risque de monopoliser le CPU)
Ne faudrait-il pas définir une obligation d'utiliser dormir() avant ou après un regarder() ?

J'y ai pensé. Javais envisagé de lancer usleep() à chaque appel de la fonction regarder(), ou alors si on la lance à de trop brefs intervalle. Mais en fait, il n'y a rien à gagner big_smile. Alors on peut aussi partir du principe qu'on est fair play ... Surtout que mobiliser le CPU d'un ordi à plusieurs cores c'est pas gagné !
Mais si c'est necessaire, effectivement, ce n'est pas difficile à ajouter ...

Bigcake a écrit :

Sinon, une petite idée pour une fonctionalité supplémentaire pour ton logiciel, ce serai d'inclure le chargement automatique de nouveaux robots (au format .so), plutôt que de devoir recompiler à chaque fois qu'une nouvelle IA est testé (genre via dlopen, dlopen, dlsym, ...)

Bonne idée. Je n'ai jamais fait ça, ce qui explique que je n'y ai pas pensé. D'un autre côté, je tiens à donner les sources, ça me paraît la moindre des choses, et comme toute personne qui écrit un robot en C doit nécessairement savoir se servir d'un compilateur, ça suffit forcément comme ça. Mais je vais le faire, ne serait-ce que pour apprendre : c'est une technique intéressante.


Tout problème a sa solution, donc s'il n'y a pas de solution, c'est qu'il n'y a pas de problème.

Hors ligne