En la China imperial, los rangos de la sociedad no se decidían por nacimiento o riqueza, sino por la capacidad de una persona para sobresalir en los exámenes imperiales. El Emperador de Jade, el divino gobernante de los Cielos, ha pedido que todos sus súbditos sean examinados para determinar su valor, y a quién dar el Mandato Divino para gobernar China.
Reglas de la burocracia:
- La Divina Burocracia consiste en rangos de valores enteros no negativos, comenzando con 0. Cada miembro (bot) de la burocracia pertenece a un rango. Cada rango puede contener muchos miembros arbitrarios, pero no puede estar vacío a menos que todos los rangos anteriores estén vacíos
- Al comienzo del juego, todos los miembros tienen rango 0
- Cada turno, cada miembro de la burocracia tiene que responder a un examen. El examen consiste en adivinar correctamente los valores booleanos de una lista. La longitud de la lista es el número del rango por encima del miembro.
- Las preguntas del examen son preparadas por un miembro aleatorio del rango anterior. Los miembros del rango más alto obtienen sus preguntas directamente del
JadeEmperor
(ver más abajo) - Un miembro que obtenga al menos un 50% en su examen es elegible para la promoción. Un miembro que obtenga menos del 50% en su examen es elegible para Demotion.
- A un miembro elegible para Demotion se le reduce su rango en uno solo si hay un miembro elegible para Promoción en el rango siguiente para tomar su lugar.
- Todos los miembros elegibles para la promoción tienen su rango aumentado en uno siempre que esto no deje ningún rango vacío.
- Si no todos los miembros elegibles pueden ser degradados o promocionados, la preferencia se aplicará a los de menor (para Demotion) resp. puntuación más alta (para promoción). Los lazos se rompen al azar.
- El rango de un miembro solo puede cambiar como máximo 1 por turno.
Reglas del juego:
- A cada bot se le asignará aleatoriamente una ID al comienzo del juego, que no cambiará a lo largo de su curso. El
JadeEmperor
tiene el ID -1, todos los demás tienen IDs no negativos consecutivos, comenzando con 0. - Todos los bots compiten al mismo tiempo.
- El juego dura 100 turnos, el puntaje del bot es su rango promedio poseído durante ese tiempo.
- La puntuación total se adquiere al ejecutar 1000 juegos y promediar los resultados.
- Cada Bot es una clase de Python 3 que implementa las siguientes cuatro funciones:
ask(self,n,ID)
, que realiza un examen devolviendo unlist
booleano de longitud n. ID es la ID del bot que tiene que adivinar esa lista.ask()
se puede llamar muchas veces durante una sola ronda para cualquier bot, pero tampoco en absoluto.answer(self,n,ID)
, que es un intento de responder a un examen devolviendo unlist
booleano de longitud n. ID es la ID del bot queask()
generó el examen.answer()
se llama exactamente una vez por ronda para cada bot.update(self,rankList,ownExam,otherExams)
se llama una vez que el controlador ha realizado todos los Pro y Demotions. Sus argumentos son: Una lista de enteros, que enumera todos los rangos por ID de todos los bots; una tupla, que consta de dos listas, primero las preguntas del examen, luego las respuestas que dio el bot (en caso de que se haya olvidado); luego una lista de tuplas, que consiste de manera similar en pares examen-respuesta, esta vez para todos los exámenes que el bot entregó.__init__(self, ID, n)
le pasa al bot su propia identificación y el número de bots competidores.
- Las clases pueden implementar otras funciones para uso privado.
- Se permite explícitamente definir más variables y usarlas para almacenar datos sobre exámenes pasados.
- Los metaefectos de programación están prohibidos, lo que significa que cualquier intento de acceder directamente al código de otros bots, el código del controlador, causando excepciones o similares. Este es un concurso de estrategias para los exámenes, no de pirateo de códigos.
- Los bots que intentan ayudarse entre sí están explícitamente permitidos, siempre que no lo hagan a través de metaefectos, sino únicamente por la información transmitida
update()
- Solo se permiten otros idiomas en caso de que se puedan convertir fácilmente a Python 3.
- La biblioteca numpy se importará como
np
. La versión es 1.6.5, lo que significa que usa la antigua biblioteca aleatoria. Si tiene Numpy 1.7, las funciones antiguas están disponiblesnumpy.random.mtrand
para probar. Por favor, recuerde quitar la mtrand para enviarla. - Si un bot causa una excepción durante el tiempo de ejecución, se descalifica. Cualquier robot cuyo código es tan ofuscado que es imposible decir si se genera una lista de longitud n cuando
ask()
oanswer()
se llama también será descalificado de forma preventiva. Un bot que me obliga a copiar en profundidad obtiene -1 en la puntuación. - Los nombres de clase deben ser únicos
- Se permiten varios bots por persona, pero solo se tomará la última versión de los bots actualizados de forma iterativa.
- Dado que parece haber cierta confusión sobre la similitud de bot:
- No está permitido publicar una copia de otro bot. Esta es la única escapatoria estándar que realmente se aplica en este desafío.
- Se le permite compartir código con otros bots, incluidos los bots de otras personas.
- No está permitido enviar un bot que difiera de otro solo por un cambio trivial a la estrategia (como un cambio en la semilla para la generación de preguntas) a menos que pueda probar que el número de tales bots de copia de carbón es el mínimo requerido para tener éxito promulgación de su estrategia (generalmente serán dos bots para una cooperación).
Bots de ejemplo:
El JadeEmperor
siempre es parte del juego, pero no compite; Él sirve como generador para los exámenes de los robots de mayor rango. Sus exámenes son aleatorios, pero no de manera uniforme, para permitir a los robots inteligentes una forma de avanzar.
class JadeEmperor:
def __init__(self):
pass
def ask(self,n,ID):
num=min(np.random.exponential(scale=np.sqrt(np.power(2,n))),np.power(2,n)-1)
bi=list(np.binary_repr(int(num),width=n))
return [x=='0' for x in bi]
El borracho produce exámenes y respuestas completamente al azar. Él será parte del juego.
class Drunkard:
def __init__(self,ID,n):
pass
def ask(self,n,ID):
return list(np.random.choice([True,False],size=n,replace=True))
def answer(self,n,ID):
return list(np.random.choice([True,False],size=n,replace=True))
def update(self,rankList,ownExam,otherExams):
pass #out
El plagio solo copia los exámenes anteriores. Él también será parte del juego.
class Plagiarist:
def __init__(self,ID,n):
self.exam=[True]
def ask(self,n,ID):
return (self.exam*n)[0:n]
def answer(self,n,ID):
return (self.exam*n)[0:n]
def update(self,rankList,ownExam,otherExams):
self.exam=ownExam[0]
Código de controlador disponible aquí . Para las pruebas, puede colocar su propia clase en un archivo Contestants.py en la misma carpeta, y se importarán.
Sala de chat se puede encontrar aquí .
Los exámenes comienzan!
Puntuación actual, en mayor precisión (10000 carreras) para Oct20:
Los concursos se ejecutarán con cada nueva entrada en el futuro previsible.
fuente
ID, n
del otro métodon, ID
?Respuestas:
Santayana
Los que no pueden recordar el pasado están condenados a repetirlo. Por lo tanto, tomamos nuestras decisiones en función de cómo los demás han actuado en el pasado, respondiendo en función de la respuesta que el autor de la pregunta generalmente esperaba de nosotros en un índice dado, y pidiendo la respuesta que nos dieron con menos frecuencia en un índice dado .
fuente
Bot estudioso
¡Este bot estudia para las pruebas! Intenta encontrar patrones en las pruebas realizadas por varios bots y actúa de manera acorde.
Por mi parte, hasta ahora, este robot supera a todos los demás robots que pude trabajar en mi computadora, excepto Alpha, Beta y Gamma (que han sido programados para trabajar juntos). El bot no hace uso del hecho de que el trabajo en equipo está permitido porque sentí que era un poco como hacer trampa y un poco sucio. Sin embargo, al analizarlo, la formación de equipos parece ser bastante efectiva.
El bot intenta reconocer cuándo las respuestas a las pruebas son aleatorias y, en respuesta, coincide con un promedio de 50% en las pruebas.
El bot también intenta reconocer cuándo un bot simplemente ha cambiado sus respuestas para rechazar a otros bots que se esfuerzan por predecir su comportamiento, sin embargo, no lo he programado para que actúe específicamente sobre esto todavía.
He anotado el código con algunos comentarios para que sea más fácil de leer.
fuente
Conde Oracular
Este bot utiliza un algoritmo que promedia los exámenes de todos los demás bots en funcionamiento (dado el número de ronda y algunas heurísticas terribles) para decidir qué establecerá cada otro bot como examen.
El conde pide sus exámenes usando un hash md5. Tanto sus preguntas como sus respuestas son, por lo tanto, deterministas. Ignora la mayoría de las entradas, pregunta y responde exactamente las mismas secuencias de booleanos, lluvia o sol, incluso contra Jade Emporer.
fuente
YinYang
Responde todos
True
o todosFalse
, excepto un índice elegido al azar para ser el opuesto. Pide lo contrario de lo que responde. Cambia al azar para arrojar a los oponentes.Wi Qe Lu (Switcheroo)
Responde y pregunta al azar en la primera ronda. Luego, usa las respuestas del examen anterior y cambia una pregunta si un número de competidores por encima del promedio acertó.
fuente
Un bot propio:
Thomas
Un viajero de una tierra lejana, tiene algunas ideas peligrosas sobre resultados pasados que son indicativos de rendimiento futuro. Los usa para mantener a otros bots abajo, a menos que eso sofoque su propio avance.
fuente
Alfa
Lea el chat antes de votar abajo. Estos bots no violan ninguna regla. El OP incluso está alentando a los bots cooperantes.
Alpha está formando un equipo junto con Beta. Ambos están utilizando un conjunto predefinido de exámenes para ayudarse mutuamente a ascender de rango. Además, ambos aprovechan los bots que utilizan los mismos exámenes una y otra vez.
fuente
Igualada
Todos deberían ser iguales (sin ninguna de estas tonterías de emperador tonto), por lo tanto, proporcione tanta movilidad social como sea posible. Haga las preguntas realmente fáciles (la respuesta siempre es verdadera) para que las personas puedan tener éxito.
fuente
Beta
Lea el chat antes de votar abajo. Estos bots no violan ninguna regla. El OP incluso está alentando a los bots cooperantes.
Beta está formando un equipo junto con Alpha. Ambos están utilizando un conjunto predefinido de exámenes para ayudarse mutuamente a ascender de rango. Además, ambos aprovechan los bots que utilizan los mismos exámenes una y otra vez.
fuente
Gama
Lea el chat antes de votar abajo. Estos bots no violan ninguna regla. El OP incluso está alentando a los bots cooperantes.
Gamma ha descubierto los planes de Alfa y Beta y está tratando de aprovecharse de ambos disfrazándose como uno de ellos.
fuente
TitForTat
Le hace preguntas fáciles si le hizo preguntas fáciles en el pasado. Si nunca le ha hecho un examen, el valor predeterminado es preguntas fáciles.
Además, no confía en nadie que haga preguntas difíciles y les dará respuestas impredecibles.
Este bot funciona bien si otros bots cooperan con él. Actualmente, solo Equalizer coopera, pero es de esperar que esto sea suficiente.
fuente
list
objetos en todo momento. Además, según las reglas antiguas y actualizadas, las copias perfectas de un bot no son envíos válidos, por lo que el número permitido de instancias de este bot en ejecución es 1.Contrario
El Emperador de Jade siempre tiene la razón, por lo que implementa la función de preguntas del Emperador de Jade como su propia función de respuesta cuando necesita más de 2 respuestas. Por solo 1 respuesta responde
true
(probabilidades decentes de ser correctas) y por 2 respondetrue,false
(esta respuesta pasa "al menos la mitad" de las preguntas tres de cuatro posibles cuestionarios, mejor que elegir al azar).Utiliza una lógica similar en su Actualización con respecto a cómo altera su patrón de preguntas, pero su lógica de preguntas es similar a la del Emperador de Jade, pero con un peso diferente. Fluctúa entre valores más altos de
true
con valores más altos defalse
cuando demasiados candidatos obtienen una puntuación lo suficientemente alta como para aprobar.fuente
true, false
falla si el examen esfalse, true
?answer
tienen errores de sintaxis y de nombre,true
yfalse
deberían serTrue
yFalse
, yif
faltan las:
s al finalupdate
.pass
es un comando NOP, puedes eliminarlo. (El comentario detrás es solo un juego de palabras para el borracho que copiaste). Además, estás usando implícitamente módulosmath
yrandom
no declaraste que los importaste. Lo he reescrito en mi archivo de concurso connp.copysign
ynp.random.uniform
eso debería hacer lo mismo.Marx
Este es el bot de Marx. Él cree que, en lugar de una burocracia, deberíamos tener un sistema comunista. Para ayudar a alcanzar este objetivo, ofrece pruebas más difíciles a los bots de mayor rango. También da más respuestas aleatorias a los cuestionarios de bots superiores, porque probablemente sean más inteligentes, porque están más arriba.
fuente