Page 1 of 1

Mi próximo trabajo para Gemix..

Posted: Sat May 18, 2013 6:25 pm
by erkosone
Buenas a todos, quería comentaros que tras la salida de la nueva beta del lenguaje compartiré un motor para comunicación en red que implemente un buen "Cyclic redundancy check", esto es obligatorio usarlo en juegos que hagan uso de funciones en red.. y como me hace falta... pues eso.. que me he puesto a estudiar el oscuro mundo de la estadistica y le he hechado el ojo a un sencillo "pero eficaz" algoritmo llamado: 'Test Q de Dixon' el cual he podido ya implementar en C++ y funciona muy muy bien, he tenido la gran suerte de contar con la ayuda de un compañero de trabajo que estudió metronometría y tiene muy claros los fundamentos sobre como analizar un bucle de datos ciclicos y como se aplican los algoritmos de rechazo de datos denominados como "incertidumbre" o algo así..

Bueno.. pues la cosa es implementar esto y que sea transparente mediante un sencillo sistema de mensajes para la librería de red en Gemix ;)

Si alguien ha estudiado algo similar y desea sugerir algún otro algoritmo "que no sea demasiado pesado" y que sea dinámico como el Test Q de Dixon pues bienvenido sea :)

Re: Mi próximo trabajo para Gemix..

Posted: Sun May 19, 2013 2:21 pm
by Nowy
bueno decir que de 3 palabras no entendia 4 pero que si es algo para red y gemix pues bienvenido :lol:

Re: Mi próximo trabajo para Gemix..

Posted: Sun May 19, 2013 3:02 pm
by SimulatorOne
Nower wrote:bueno decir que de 3 palabras no entendia 4 pero que si es algo para red y gemix pues bienvenido :lol:
digo lo mismo.

nos pondras algun ejemplo, o nos explicaras que mejoras tiene?
para que tipo de juegos/aplicaciones net esta pensado?

Re: Mi próximo trabajo para Gemix..

Posted: Sun May 19, 2013 3:12 pm
by erkosone
Bueno es algo así como un discriminador de información, se trata de algo mas o menos como esto:
A:
1 - Almacenar un número determinado de veces contenido de la información.
2 - Calcular la desviación típica que la información está sufriendo cada determinado número de muestras.

B:
1 - Obtener una nueva muestra.
2 - Calcular la desviación que existe entre la muestra y la referencia obtenida anteriormente.

C: Resolver:
1- Si la desviación sobrepasa el umbral denominado "% de confianza" el dato es fiable :y:
2 - Si la desviación no alcanza el umbral de confianza el dato es literalmente "ignorado" :n:

D: Post Solve:
1 - Si el dato es confiable se añade a la pila de datos, introduciendolo en la lista y por ende eliminando la primera muestra que se obtuvo en el paso A.
2 - Si el dato no es confiable se ignora y se vuelve al punto B.


Todo esto por que?
Simple, en una comunicación en red "especialmente por UDP" no hay ningún control de errores, esto quiere decir que un cliente puede estar enviando un número entero como 1024 y realmente no existe la seguridad de que el dato va a llegar a su destino con "integridad", en el 1% de los casos o mas el dato llegará corrupto o no llegará, si, el dato puede perfectamente llegar con un valor como 389 por ejemplo.. y claramente se ve que nada tiene que ver con el contenido original, esto es un serio problema para una aplicación donde por ejemplo se está enviando la posición de un objeto.. ya que el usuario verá el objeto "flasheando" de vez en cuando.

Existen técnicas de predicción para evitar este efecto tan molesto, una es la que voy a implementar yo, un analizador de información dinámico por estadística que es capaz de deducir si un dato es fiable o no, claro.. esto hay que saber usarlo.. no sirve para cualquier cosa, y por supuesto el test Q de Dixon es solo la punta de un izeberg muy grande donde existen complicados mecanismos para obtener predicciónes mucho mejores.