Introduction to Artificial Intelligence (ai-class) + Google AI Contest 2011

Oui, je sais, septembre est déjà loin et j’aurais dû poster ici depuis bien longtemps…

En cette année académique 2011-2012, les étudiants vont retenter le Google AI contest de cette année nous parle de fourmillières et de petites fourmis. Celle-ci doivent explorer une carte, chasser de la nourriture et en profiter pour dégommer les fourmis ennemies. Pas de mal de choses à gérer en perspective. Le jeu est bien plus compliqué que l’année dernière.

Comme d’habitude, vous pouvez consulter les classements à un niveau mondial, national ou même local à Bordeaux 1.

Pour l’instant, les candidats les plus sérieux semblent être 101010 et medrimonia (le retour).

Afin d’aider les étudiants qui participent à ce concours (et aussi pour ceux que cela intéressent), nous avons mis en place une réunion hebdomadaire le jeudi soir (18h20 à l’amphi LaBRI) où nous visionnons et essayons de comprendre le cours en ligne d’introduction à l’intelligence artificielle de Stanford.

Tout le monde est le bienvenu ! Même si vous prenez le cours en route, mais essayez de rattraper un peu votre retard en visualisant les cours déjà mis en ligne.

Introduction to AI course

Publié dans Atelier, Divers, Informatique théorique, Programmation, Réunion | Marqué avec , | Commentaires fermés

Les Gagnants des Pwnies Awards 2011

Chaque année les Pwnies Awards décernent des prix sur la scène underground de l’informatique pour des exploits divers (ou des erreurs épiques). Les gagnants de cette année sont assez habituels. Mais je ne peux m’empêcher de vous montrer le gagnant de la catégorie de la meilleure chanson (Geohot) ainsi que deux autres nominés (avec notamment un membre de Anonymous, lulzsec, etc). Les deux premières sont des raps d’anthologie.

Geohot a été poursuivi par Sony pour avoir cracké les systèmes de protection de la Playstation 3.

Les paroles de la chanson #antisec (au-dessus), écrites par ytcracker.

Cette chanson a fait l’ouverture de la conférence PH-Neutral 0x7db (attention, c’est super kitch!).

Publié dans Divers | Commentaires fermés

Google Code Jam

Google Code Jam

Google Code Jam est un concours international de programmation informatique parrainé et administré par Google. Originalement inventé par Google en tant que tests pour repérer des candidats prometteurs pour ses groupes de développement technique, le Google Code Jam fut tellement populaire qu’il fut rendu public en 2003.

La compétition consiste en un ensemble de problèmes qui mesure l’habilité des participants à concevoir et implémenter efficacement un algorithme pour résoudre un problème donné en un temps prédéfini. Le temps est donc compté. Les compétiteurs peuvent utiliser le langage de programmation et l’environnement de développement de leur choix et doivent livrer un programme qui répond aux critères requis par le problème.

Le concours de cette année est hélas déjà commencé, mais vous pouvez vous entraîner pour l’année prochaine.

Publié dans Énigme, Programmation | Marqué avec , | Commentaires fermés

RoboZZle: Un jeu pour programmeurs avertis

RoboZZle

RoboZZle (blog) est un petit jeu en ligne qui n’a l’air de rien mais qui se révèle assez rapidement addictif et plus compliqué que l’on ne l’aurait cru de prime abord. Pourquoi en parler sur le blog des Samedis du CREMI ? Parce que c’est avant tout un jeu pour programmeurs !

En effet, chaque tableau du jeu vous propose une arène sur laquelle vous devez collecter un certain nombre d’étoiles. Pour ce faire, il vous faudra programmer un petit robot avec un jeu d’instructions extrêmement simples (avance d’une case, tourne à gauche/droite, …) mais aussi avec la possibilité d’avoir accès aux appels de fonctions (et aussi à la récursion et à la pile d’appel si vous réfléchissez bien). Sans compter certains tableaux spéciaux qui viennent avec des fonctionnalités supplémentaires (détecter la couleur de la case courante, changer la couleur de cette case, etc…).

Mine de rien, certains tableaux sont extrêmement compliqués et nécessitent pas mal d’astuce et gymnastique mentale pour les résoudre. Ceci tout en faisant progresser votre niveau en programmation… le jeu de l’été chez le programmeurs. :-)

Publié dans Énigme, Programmation | Marqué avec | Commentaires fermés

Concours INRIA: « Boost Your Code ! »

Concours « Boost Your Code »

Le concours « Boost Your Code ! » de l’INRIA (Institut National de Recherche en Informatique et en Automatique) veut soutenir le développement Open-Source en France en offrant un CDD de douze mois au lauréat du concours pour développer son logiciel. Les autres candidats dont les projets auront été présélectionnés par le jury se verront remettre un Netbook.

Bien que très « tape-à-l’œil » (mais l’INRIA nous a habitué à cela à présent), la page du concours « Boost Your Code ! » vous donne accès:

Si vous avez un projet en tête, ou que vous avez déjà commencé un projet, n’hésitez pas à participer.

Publié dans Développement, Divers, Programmation | Marqué avec , | Commentaires fermés

Naissance de Geek-eirb !

Quelques collègues ont lancé une initiative à l’ENSEIRB-MATMECA pour se réunir autour de sujets techniques liés à l’informatique. Cette initiative a été baptisée Geek-eirb et se décompose, pour l’instant, en deux parties:

  • Des réunions qui ont lieu à l’ENSEIRB le mardi à 18h30 au cours desquelles seront présentées des points techniques liés à l’informatique.
  • Un blog qui sert de moyen de communication et aussi de « mémoire » pour les sujets traités pendant les différentes réunions.

Les séances sont ouvertes à tous, donc n’hésitez pas y aller si l’un des sujets traités vous intéresse.

Publié dans Divers | Marqué avec | Commentaires fermés

Présentation du bilan du « Google AI Contest » à Bordeaux

Mercredi 9 février 2011, a eu lieu une petite présentation des programmes de deux étudiants de Bordeaux 1qui ont participé au « Google AI Contest« . Ils ont expliqué leurs choix d’implémentation ainsi que les stratégies qu’ils ont essayé d’implanter dans leur bot.

Publié dans Divers, Réunion | 2 commentaires

BattleCode (MIT AI Programming Competition)

Oui, je sais… Cela fait longtemps que je n’ai pas eu le temps de poster un petit quelque chose sur ce blog… Cela ne veut pas forcément dire que nous ne faisons rien !

Entre temps, le Google AI contest s’est terminé et les concurrents qui venaient aux Samedis du CREMI ne s’en sont pas si mal tirés. Notamment, on remarquera surtout les bots medrimonia et asbadrobot qui s’en tirent tout à fait honorablement.

Le vainqueur, quant à lui, a produit un bot en Lisp en se basant sur une exploration de l’arbre des possibilités. Il explique (partiellement) sa méthode sur son blog.

Quoiqu’il en soit, le Google AI Challenge est passé, et nous devons attendre l’année prochaine pour nous y recoller… En attendant, et pour ne pas nous rouiller, certains de nos membres se sont lancés dans le BattleCode (MIT AI Programming Competition).

Grossièrement, il s’agit de gérer une troupe de petits robots dans un jeu similaire (dans sa forme) à StarCraft. La programmation des robots se fait en Java et le terrain de jeu est en 2D. Néanmoins, les possibilités du jeu sont énormes et risquent de poser pas mal de problème pour les gérer. Nous nous rencontrons toutes les deux/trois semaines pour discuter de l’avancement des différentes équipes qui veulent participer.

N’hésitez pas à nous rejoindre !

Publié dans Développement, Programmation | Commentaires fermés

Énigme #3: Modèle objet de Python

La façon dont les objets sont crées en Python diffère assez des modèles objets « classiques » et apporte certains effets de bords intéressants ou même surprenants.

Par exemple, si je compare ces deux programmes, à priori identiques, l’un en Python, l’autre en Java:

class Foo:
    x = {}
 
    def __init__(self, id):
        self.x[id] = id
 
f1 = Foo(5)
print(f1.x)   # {5:5}, as expected...
 
f2 = Foo(6)
print(f2.x)   # {5:5, 6:6}, wtf ?!?
 
print(f1.x)   # {5:5, 6:6}, wtf too ?!?
import java.io.*;
import java.util.*;
 
public final class Foo {
    public Dictionary x = new Hashtable();
 
    public Foo(int id) {
	x.put(id, id);
    }
 
    public static void main(String[] args) {
	Foo f1 = new Foo(5);
	System.out.println(f1.x); // {5=5}, as expected...
 
	Foo f2 = new Foo(6);
	System.out.println(f2.x); // {6=6}, as expected...
 
	System.out.println(f1.x); // {5=5}, as expected...
    }
}

Le résultat de l’exécution donne pourtant des différences assez marquées… Le plus surprenant c’est que si on prend le programme Python suivant, tout se passe comme nous le souhaiterions à priori:

class Bar:
    x = 3
 
    def __init__(self, id):
        self.x = id
 
 
f1 = Bar(5)
print(f1.x)   # 5, as expected...
f2 = Bar(6)
print(f2.x)   # 6, as expected...

Alors, comment expliqueriez-vous ce comportement pour le moins étrange de Python ? Et quelles règles de programmation, spécifique à Python, en déduiriez-vous pour éviter des erreurs ?

Publié dans Énigme, Programmation | 14 commentaires

Énigme #2: Chacun cherche son SHA1

Cette fois-ci, l’énigme est en langage C et porte sur l’utilisation de la bibliothèque OpenSSL.

Il y a quelques semaines, un ami m’a pointé un comportement étrange dans l’un de ses programmes. Le programme en question s’appuye sur la bibliothèque OpenSSL et calcule le SHA1 d’un fichier:

#include <stdio.h>
#include <stdlib.h>
#include <openssl/sha.h>
 
int
main (int argc, char **argv)
{
  char *content;
  SHA_CTX ctx;
  unsigned char message_digest[SHA_DIGEST_LENGTH];
  int retval;
  FILE *fh;
 
  /* SHA1 DIGEST */
  SHA1_Init (&ctx);
 
  fh = fopen (argv[1], "r");
  content = (char *) malloc (4096);
 
  while (!feof (fh))
    {
      retval = fread ((char *) content, 1, 4096, fh);
      printf ("Read:%d\n", retval);
      SHA1_Update (&ctx, content, retval);
    }
 
  SHA1_Final (message_digest, &ctx);
  puts ((char *) message_digest);
 
  free ((void *) content);
  fclose (fh);
 
  return EXIT_SUCCESS;
}

Tout semble marcher sur la plupart des fichiers, sauf que lorsqu’on essaye de calculer le SHA1 de fichier.bin, le programme ne semble rien faire…

Sauriez-vous expliquer pourquoi et surtout proposer une solution à ce problème ?

Publié dans Énigme, Programmation | 3 commentaires