Foro de elhacker.net

Programación => .NET (C#, VB.NET, ASP) => Mensaje iniciado por: zuekamo en 28 Diciembre 2015, 20:58 pm



Título: busco ayuda y/o documentación de Modelos basados en agentes en c#
Publicado por: zuekamo en 28 Diciembre 2015, 20:58 pm
Saludos.

Estoy intentando hacer un modelo basado en agentes usando c# que es el lenguaje que mejor manejo.

Intenté usar el Netlogo, pero el lenguaje que usa no es optimo para mis escala de modelo (unos 65000 agentes con hasta 60 variables cada uno)

Mi actual problema con el c# es que debo hacer todo desde 0. si quiero hacer un mapa donde están los agentes en cada tick, debo programarlo desde el comienzo. Y si quiero hacerlo en 3d ya me parece algo imposible.

En el Netlogo tenía la ventaja de usar un espacio continuo. con el C# tuve que hacer un espacio discreto, con solo 200 nodos posibles.

Otro problema que he tenido con el c# es el manejo de las variables. Yo quisiera solo tener que editar un hoja de excel para cambiar los factores iniciales del modelo, y luego correr mi hoja de programa en c#, pero mi actual procedimiento, es:

- editar la hoja de excel
- Salvarlo como .csv
- usar otro programa para importar la matriz
- Ahora sí correr el programa en c#

Agradecería cualquier documento y/o programa que me pueda ayudar.



Título: Re: busco ayuda y/o documentación de Modelos basados en agentes en c#
Publicado por: El Benjo en 30 Diciembre 2015, 18:03 pm
Como menconas, si quieres hacer tal cosa en C# tendrás que hacerlo desde 0. Ahora, la ventaja es que no necesitas realizar la aplicación como un editor de modelos basado en agentes, es decir que no tienes por que hacer un nuevo NetLogo sino simplemente realizar una aplicación que simule el modelo actual que no puedes simular en NetLogo, ¿no es así? En tal caso mejor deberías de decirnos cual es el modelo que quieres simular para darte ideas o soluciones en concreto para ese modelo.

Lo que mencionas sobre hacerlo en 3D puedes hacerlo "fácil" con librerías o frameworks para tal fin. Puedes, por ejemplo, usar Unity, XNA o DirectX.


Título: Re: busco ayuda y/o documentación de Modelos basados en agentes en c#
Publicado por: Eleкtro en 30 Diciembre 2015, 18:39 pm
Lo que mencionas sobre hacerlo en 3D puedes hacerlo "fácil" con librerías o frameworks para tal fin. Puedes, por ejemplo, usar Unity, XNA o DirectX.

A lo que has dicho, habría que añadirle 3 pares de comillas más, """"fácil"""" xD.

Solo quiero añadir que...:
XNA está muerto (deprecado, obsoleto, o como prefiera definirlo), no conviene utilizarlo, y antes que usar DirectX (C/C++) mejor sería utilizar algún wrapper como Sharp-DX, así le podrías restar un par de comillas a ese """fácil""" al evitar la complejidad de tener que implementar un wrapper, plus la existencia de documentación en .Net sobre dicha librería con ejemplos de uso.
  • http://sharpdx.org/

En realidad no entendí a lo que te refieres por "agentes", pero por si acaso te comento, que si lo que quieres hacer son gráficos de estadísticas o algo similar en 3D, entonces no necesitas la complejidad adicional de nada de lo anteriormente mencionado, y para modelos/cosas 3D muy sencillitas (como formas triangulares, circulos o etc) siempre puedes hacerlo de forma administrada con los miembros de GDI+ sin invertir demasiado esfuerzo.

Saludos!


Título: Re: busco ayuda y/o documentación de Modelos basados en agentes en c#
Publicado por: zuekamo en 30 Diciembre 2015, 19:57 pm
Para explicar lo de los agentes:

https://www.youtube.com/watch?v=OogeV7q07cM

en el video, hay 2 tipos de agentes, el agente depredador y el agente presa. Es un modelo sencillo, si hay muchas ovejas los lobos la tienen mas fácil por que tienen mas comida, si se acaban las ovejas, entonces los lobos no tienen que comer y se mueren.

El modelo que yo planeo se parece al juego de mesa "asalto"
1 agente sería el agresor (manejado por un humano) que intenta asimilar los miles de agentes.

mi primer problema ha sido el mapa. Puesto que no he solucionado la forma de hacer en c# un mapa como el del video.

Por el momento hice un mapa con lugares discretos:
(http://i.imgur.com/I5KAYX0.png)

los agentes se mueven de forma discreta con rutas predeterminadas (algo que no me gusta) por ejemplo hay algunos agentes que están por 6 ticks en el nodo 79, luego se mueven "libremente" hasta volver al nodo 79 de nuevo para permanecer por el lapso del 6 ticks.

cuando hablo de 3d, es que cada nodo tiene mas de un nivel. Digamos que el nodo 1 es un edificio de 64 pisos, me parece muy difícil visualizar cuantos agentes están en los 5tos pisos de cada nodo.

¿Que es mi mapa en estos momentos?
es un matriz de 117x11
son 117 lugares que tienen coordenada en X,Y tienen un booleano para dejar entrar o no al agente invasor. y 8 posibles movimientos

por ejemplo el nodo 0 contiene está información:

Código:
5 1 7 2 6 3 8 4 0 0 1

al norte se puede mover al nodo 5, al NE al nodo 1 etc. está en la coordenada 0,0 y el ultimo valor 1 indica que el agente agresor puede pasar libremente por dicho nodo.

el nodo 18:
Código:
6 256 14 60 24 61 15 256 0 -64 1

al norte se puede mover al nodo 6,pero al NE y NW no tiene movimiento valido, por eso el 256.

esta es por el momento mi solución al mapa. pero no me parece una solución optima.


Título: Re: busco ayuda y/o documentación de Modelos basados en agentes en c#
Publicado por: El Benjo en 31 Diciembre 2015, 21:38 pm
Lo que te comenta Elektro sobre XNA es cierto, sólo te estaba dando opciones para la visualización en 3D. XD

Lo que puedes hacer en este caso son dos cosas:
 
  • Utilizar un motor para juegos donde tienes la ventaja de que te proporcionan una API con la que puedes no salmente visualizar la posición de los objetos en tres dimensiones sino que además los agentes pueden moverse en un espacio continuo (con las restricciones o "muros" que agregues a tu mapa). La desventaja es que un motor de juegos te consumiría muchos recursos por cada agente que tengas.
  • Hacer tu modelo mediante programación orientada a objetos donde cada agente es una instancia de una clase del tipo de ese agente. Aquí cada agente manejaría una posición X,Y,Z almacenada en un entero, esto te permitíría manejar un espacio continuo en lugar de uno discreto, y la manera de hacer el mapara sería mediante "obstáculos" que impiden el paso de los agentes a través de ellos. Aquí la ventaja es que es mucho más rápido que utilizar el motor de juegos (CREO).

Te recomiendo que intentes hacerlo primero en 2D con el segundo método y las funciones básicas del GDI+, si te funciona y es lo que estás buscando puedes extender la aplicación añadiendo el eje Z.