El Dilema del Prisionero Iterado

Hoy propongo una competencia al más puro estilo Bits en el Ring para conmemorar el 25 aniversario de la que, probablemente, sea la primera competición de este tipo.
La competición la organizó Robert Axelrod y la relata con cierto detalle Richard Dawkins en su libro El gen egoísta.
La idea es programar unos cuantos algoritmos que jueguen al Dilema del Prisionero Iterado y enfrentarlos. Con la puntuación obtenida por cada uno de esos algoritmos se generará una descendencia que premiará (con más copias) a los algoritmos que mejor lo hagan.
El objetivo es ver cómo fluctúa la capacidad de conseguir puntos de un determinado algoritmo en función de la población que le rodee. Un algoritmo muy eficiente contra todos sus adversarios pero muy ineficiente enfrentándose a sí mismo nunca podrá dominar esta competición.
Los algoritmos, en cada enfrentamiento, conocen los siguientes datos:
- El número r de rondas que se han jugado.
- Los vectores con el historial de jugadas propias (A) y ajenas (B)
- La puntuación propia (a) y ajena (b) obtenida en las primeras r rondas de el actual enfrentamiento.
- La población propia (Pa) y ajena (Pb).
En cada ejecución, y basándose en esos datos, el algoritmo debe devolver True si coopera y False si traiciona. Se puede hacer uso de la función randint(x,z) que devuelve un entero y que cumple x<=y<=z.
Hay tiempo hasta el viernes 11 a las 12 de la noche para participar. Tan sólo es necesario describir el algoritmo en los comentarios de esta entrada. Se pueden enviar tantos como se quiera.
Algunos ejemplos que ya he recibido son:
- Algoritmo 1: En la primera jugada coopera y en las siguientes haz lo que hizo el contrario en la jugada anterior.
- Algoritmo 2: En las tres primeras jugadas coopera y luego, si el contrario te ha traicionado al menos dos veces en las últimas 3 jugadas lo traicionas y si no cooperas.
- Algoritmo 3: En la primera ronda cooperar y en el resto imitar al azar una jugada que haya hecho el contrario.
Por cierto, la matriz de pagos que usaré otorga 0 puntos a cada jugador si ambos traicionan, 3 puntos a cada uno si ambos cooperan y 5 puntos al que traiciona si uno traiciona y el otro coopera.
BOLAEXTRA: ¿Cómo? ¿Que no sabes lo que es el Dilema del Prisionero? ¡Pues pasa por la Wikipedia!
Pseudolog.com