Puissance 4 en Python : Nouvelle compétition

L’objectif était de mettre au point une intelligence artificielle (IA) la meilleure possible pour jouer à Puissance 4, sans descendre en profondeur dans un arbre comme avec l’algorithme minimax ou alpha-bêta. Je pense être très près du but avec IA15 bien que l’IA en question soit encore facile à battre pour un humain. Va désormais venir le temps des arbres, puis de l’apprentissage…

Présentation des IA :

Codage de la stratégie :

H veut dire Hasard
P veut dire Poids des cases (il y a plus de possibilités d’alignements pour certaines cases)
AX veut dire Alignement de X pions (l’IA essaye d’aligner X pions ; les alignements « troués » de 2 ou 3 pions sont pris en compte)
BX veut dire Blocage de X pions (l’IA essaye d’empêcher l’adversaire d’aligner X pions ; les alignements « troués » de 2 ou 3 pions sont pris en compte)

Le codage des IA en compétition est :

IA0 : Priorité H
IA1 : Priorité PH
IA12 : Priorités A4PH / A3PH / A2PH / PH
IA13 : Priorités B4PH / B3PH / B2PH / PH
IA14 : Priorités A4PH / B4PH / A3PH / B3PH / A2PH / B2PH / PH
IA15 : Priorités A4PH / B4PH / A3PH / B3PH / B2PH / A2PH / PH
IA16 : Priorités A4PH / B4PH / B3PH / A3PH / A2PH / B2PH / PH
IA17 : Priorités A4PH / B4PH / B3PH / A3PH / B2PH / A2PH / PH
IA18 : Priorités A4PH / B4PH / A2PH / B2PH / PH
IA19 : Priorités A4PH / B4PH / B2PH / A2PH / PH
IA20 : Priorités A4PH / B4PH / B3PH / B2PH / A3PH / A2PH / PH

Présentation des résultats :

Sur 1 million de parties, les résultats bruts sont :

IA0 / IA0 / Nulles : 499 231 / 498 300 / 2 469
IA1 / IA0 / Nulles : 878 716 / 121 257 / 27
IA12 / IA0 / Nulles : 970 480 / 29 520 / 0
IA13 / IA0 / Nulles : 967 884 / 18 236 / 13 880
IA14 / IA0 / Nulles : 996 952 / 3 034 / 14
IA15 / IA0 / Nulles : 995 524 / 4 369 / 107
IA16 / IA0 / Nulles : 993 656 / 6 191 / 153
IA17 / IA0 / Nulles : 993 568 / 5 938 / 494
IA18 / IA0 / Nulles : 992 092 / 7 886 / 22
IA19 / IA0 / Nulles : 988 123 / 11 735 / 142
IA20 / IA0 / Nulles : 991 937 / 7 195 / 868

IA15 / IA0 / Nulles : 995 524 / 4 369 / 107
IA15 / IA1 / Nulles : 979 122 / 0 / 20 878
IA15 / IA12 / Nulles : 1 000 000 / 0 / 0
IA15 / IA13 / Nulles : 724 198 / 266 561 / 9 241
IA15 / IA14 / Nulles : 1 000 000 / 0 / 0
IA15 / IA15 / Nulles : 500 000 / 500 000 / 0
IA15 / IA16 / Nulles : 1 000 000 / 0 / 0
IA15 / IA17 / Nulles : 1 000 000 / 0 / 0
IA15 / IA18 / Nulles : 771 989 / 228 011 / 0
IA15 / IA19 / Nulles : 746 678 / 0 / 253 322
IA15 / IA20 / Nulles : 723 979 / 266 779 / 9 242

Commentaires :

Si on compare IA14 et IA15, il n’y a qu’une seule inversion dans le codage de la stratégie : on passe de A2PH / B2PH pour IA14 à B2PH / A2PH pour IA15 et l’effet est radical : IA15 écrase IA14. De même, si on compare IA15 et IA17, on passe de A3PH / B3PH pour IA15 à B3PH / A3PH pour IA17 et l’effet est radical : IA17 est écrasée par IA15.

Code source sur GitHub.

Puissance 4 en Python : Les alignements « troués » sont désormais pris en compte

Je viens de reprendre mon travail sur Puissance 4 après 9 mois d’interruption. La mise à jour qui intègre cette fois les alignements « troués » est sur GitHub. Une nouvelle compétition entre IA sera lancée très bientôt.

J’ai rajouté 9 nouvelles IA avec les correspondances suivantes :
IA12 (alignements troués) / IA2 (alignements pleins)
IA13 (alignements troués) / IA3 (alignements pleins)
IA14 (alignements troués) / IA4 (alignements pleins)
IA15 (alignements troués) / IA5 (alignements pleins)
IA16 (alignements troués) / IA6 (alignements pleins)
IA17 (alignements troués) / IA7 (alignements pleins)
IA18 (alignements troués) / IA8 (alignements pleins)
IA19 (alignements troués) / IA9 (alignements pleins)
IA20 (alignements troués) / IA10 (alignements pleins)

Sur 1 000 parties, IA20 contre IA10 (la meilleure jusqu’ici) donne 957 victoires à IA20, 0 victoires à IA10 et 43 parties nulles. Dans la suite, je laisserai donc tomber les stratégies basées sur les alignements pleins.

Calculatrice NumWorks et Debian 10

Sous Debian 10, pour mettre à jour la calculatrice NumWorks, il faut au préalable installer sur son ordinateur le fichier 50-numworks-calculator.rules dans le répertoire /etc/udev/rules.d/.

Dans la console, on tape :
wget https://cdn.numworks.com/assets/files/my/drivers/linux/50-numworks-calculator-f2be8a48f68f1ee4d88c997c35194960.rules
sudo mv 50-numworks-calculator-*.rules /etc/udev/rules.d/50-numworks-calculator.rules

La mise à jour se fait depuis le Workshop.

Eukleides et Geany sous Debian 10

Eukleides est un langage de programmation pour tracer des figures de géométrie au format EPS (images vectorielles).

Dans la console :
sudo apt-get install eukleides

Paramétrer Geany pour des fichiers sources au format euk (Construire > Définir les commandes de construction) :
eukleides %e.euk

Attention à bien utiliser l’encodage ISO 8859-1 sous peine d’erreur : Document > Définir l’encodage > Européen de l’ouest > Occidental (ISO 8859-1). Appuyer sur la touche F8 pour obtenir une image au format EPS dans le répertoire du fichier source.

Installer Cura 4.8 sous Debian 10

Ultimaker Cura est un logiciel d’impression Open Source pour imprimantes 3D. Il est très simple à utiliser.

Dans la console :

Si le répertoire Cura n’existe pas déjà, je le crée :
sudo mkdir /usr/share/cura

Je télécharge l’application : Ultimaker_Cura-4.8.0.AppImage

J’installe l’application à l’endroit voulu :
cd Téléchargements
sudo mv Ultimaker_Cura-4.8.0.AppImage /usr/share/cura

Je rends le fichier exécutable :
sudo chmod +x /usr/share/cura/Ultimaker_Cura-4.8.0.AppImage

Je télécharge l’icône Cura et l’installe à l’endroit voulu :
wget http://entropie.org/3615/download/cura.png
sudo mv cura.png /usr/share/cura

Pour effacer une version précédente de Cura (à adapter) :
sudo rm -rf /usr/share/cura/Ultimaker_Cura-*

Pour intégrer le programme au menu de Xfce, je crée un fichier cura.desktop dans le répertoire /usr/share/applications :
cd /usr/share/applications
sudo nano cura.desktop

[Desktop Entry]
Type=Application
Name=Cura 4.8.0
Comment=Impression 3D
Exec=/usr/share/cura/Ultimaker_Cura-4.8.0.AppImage
Icon=/usr/share/cura/cura.png
Terminal=false
Categories=Engineering;

Convertir une vidéo d’un format vers un autre sous Debian 10

Mon appareil photo filme en 1280×720 pixels à 24 fps avec un débit du flux vidéo d’environ 22000 kb/s. Le format du sous-échantillonnage de la chrominance est du type yuvj422p. Le débit du flux audio de 176 kb/s. La fréquence d’échantillonage du son est de 11025 Hz (en mono).

J’utilise en mode console FFmpeg :
ffmpeg -i video.avi -s 1024×576 -b:v 1024k -crf 23 video.webm
-b:v : on spécifie le bitrate vidéo.
-crf : de 0 à 63 (0 : meilleure qualité).
Voir également : Recommended Settings for VOD.

Remarque : Pour pouvoir lire la vidéo sur un ordinateur un peu ancien, enregistrer en ogg :
ffmpeg -i video.avi -s 1024×576 -b:v 1024k -crf 23 video.ogg

Le format H264 qui suit est un format fermé. J’évite de l’utiliser.
ffmpeg -i video.avi -s 1024×576 -c:v libx264 -pix_fmt yuv420p -b:v 1024k -crf 23 video.mp4