logo

Etiquetas:

Autor Tema:  (Leído 3177 veces)

Gand-Alf

  • Baronet
  • Veterano
  • *
  • Mensajes: 9383
  • Ubicación: Barcelona
  • Palantir como los de Alicantir.
  • Distinciones Colaborador habitual y creador de topics Napoleón de fin de semana Eurogamer Ameritrasher Antigüedad (más de 8 años en el foro) Entre los 10 con mayor tiempo conectado Entre los 10 más publicadores Encargado del juego del mes Baronet (besequero de la semana)
    • Ver Perfil
    • Distinciones
Algoritmo de Reparto
« en: 22 de Agosto de 2011, 12:02:46 »
Imaginemos un juego en que hay distintos bandos, por ejemplo el Here I Stand y no los queremos repartir de forma aleatoria, sino que cada jugador pueda escoger.

¿Cual sería el mejor método para que a cada jugador le tocara una facción entre sus preferencias?

Por ejemplo cada jugador podría hacer una lista en que pone en primer lugar la facción que más le interesa y en último la que menos:

Habsburgo
Francia
Inglaterra
Papado
Otomano
Reformista

Bien, un sistema podría ser que primero se intenta dar a cada jugador la primera opción que ha escogido y si no hay nadie más que haya escogido lo mismo, ya se le asigna. En caso de que dos jugadores empataran en primera opción, podría sortearse y luego intentar dar la segunda opción a los demás. Eso tiene un problema:

Imaginad que un solo jugador ha escogido Habsburgo como primera opción y nadie más la ha cogido pero ha puesto Francia como segunda opción y el resto de jugadores han puesto Francia como última. ¿No debería recibir ese jugador Francia? Y darle Habsburgo a alguien que lo haya cogido como segunda opción. Ya que en otro caso, Francia debería llevarla un jugador que la puso como última opción.

Supongo que es un tema de mucha complejidad pero me gustaría oir la voz de los expertos en estadística, combinatoria y programación.

¿Cual es la forma en que hay que repartir unos bandos para que todos queden bastante contentos con lo que les ha tocado?
Juegos en venta

(\     /)
 \\ _ //
 (='.'=)
 (")_(") Baronet #122 - 24/09/2012 - Gand-Alf

Wkr

  • Administrador
  • Veterano
  • *
  • Mensajes: 32674
  • Ubicación: Zaragoza
  • La vida es muy corta para lidiar con gente idiota
  • Distinciones Líder de una secta decimonónica Disfruto creando mis juegos de mesa Reseñas (oro) Entre los 10 más publicadores Entre los 10 con mayor tiempo conectado Colaborador habitual y creador de topics Antigüedad (más de 8 años en el foro) Fan de las pirámides de icehouse Encargado de las Convivencias Lúdicas de labsk Encargado del juego del mes
    • Ver Perfil
    • Diario de WKR
    • Distinciones
Re: Algoritmo de Reparto
« Respuesta #1 en: 22 de Agosto de 2011, 12:29:40 »
Programación lineal.

Este es un caso típico de Investigación Operativa (o de Operaciones)
http://es.wikipedia.org/wiki/Investigaci%C3%B3n_de_operaciones

Hay varios métodos para ello, posiblemente con aplicar un Simplex te valdría.
http://es.wikipedia.org/wiki/Algoritmo_s%C3%ADmplex

Solver:
http://www.simplexme.com/es/
« Última modificación: 22 de Agosto de 2011, 12:34:40 por Wkr »

Gand-Alf

  • Baronet
  • Veterano
  • *
  • Mensajes: 9383
  • Ubicación: Barcelona
  • Palantir como los de Alicantir.
  • Distinciones Colaborador habitual y creador de topics Napoleón de fin de semana Eurogamer Ameritrasher Antigüedad (más de 8 años en el foro) Entre los 10 con mayor tiempo conectado Entre los 10 más publicadores Encargado del juego del mes Baronet (besequero de la semana)
    • Ver Perfil
    • Distinciones
Re: Algoritmo de Reparto
« Respuesta #2 en: 22 de Agosto de 2011, 20:52:32 »
¿Alguien me lo explica con marionetas? :D

A ver... creo que sería capaz de hacerlo. Supongo que todo se basa en dar unos valores, decidir en cuanto valoras tu que un jugador quede en cada posición y luego el algoritmo se encargará de encontrar la combinación en que salga un valor total más alto. ¿Lo he entendido bien?
Juegos en venta

(\     /)
 \\ _ //
 (='.'=)
 (")_(") Baronet #122 - 24/09/2012 - Gand-Alf

Maeglor

  • Moderador
  • Veterano
  • *
  • Mensajes: 10015
  • Ubicación: Madrid
  • Deja de pensar el Caos ya tiene Teoría.
  • Distinciones Conocí a iNTRuDeR Fan del Señor de los Anillos Colaborador habitual y creador de topics Entre los 10 con mayor tiempo conectado Entre los 10 más publicadores Juego online (vassal, cyberboard, bga, etc) Juego a todo, incluso al monopoly Antigüedad (más de 8 años en el foro) Baronet (besequero de la semana) Encargado del juego del mes
    • Ver Perfil
    • Distinciones
Re: Algoritmo de Reparto
« Respuesta #3 en: 22 de Agosto de 2011, 21:25:49 »
¿Cual es la forma en que hay que repartir unos bandos para que todos queden bastante contentos con lo que les ha tocado?

El planteamiento no es del todo correcto, porque se puede dar el caso de que siempre tenga que quedar algún descontento del todo (con su última elección) si todos ponen por ejemplo el Papado en ultima opción. Sería más correcto decir 'maximizar el contento general'.


Y para maximizar hay que cuantificar. Un método simple sería asignar un valor numérico de modo inverso a la opción elegida (o sea si pones el Protestante como el que más quieres le asignas un 6, y si es el Habsburgo el que menos un 1) y tratar de maximizar ese número. Y a mí se me ocurre por la fuerza bruta, haciendo todas las combinaciones (que para eso están los ordenadores) y sumando el valor que salga y eligiendo al azar entre los empates. En el HIS estaríamos hablando de 6! = 720 combinaciones.

Si quieres afinar puedes decir que una última opción es todavía peor que un 1, por ejemplo un -1, y una primera todavía mejor que un 6, por ejemplo un 7. La solución puede variar pero el método es el mismo.

Supongo que lo que ha dicho Wkr de la programación lineal es eso: llevar un problema de la vida real a números y hallar la mejor solución, pero reconozco que me he perdido antes de entenderlo en condiciones. :P
666

Ferris

  • Baronet
  • Veterano
  • *
  • Mensajes: 1574
  • Ubicación: Getafe (Madriz)
  • Distinciones Antigüedad (más de 8 años en el foro) Baronet (besequero de la semana)
    • Ver Perfil
    • Distinciones
Re: Algoritmo de Reparto
« Respuesta #4 en: 23 de Agosto de 2011, 03:10:35 »
El HiS, ¿no os parece ya suficientemente largo?  ;D
¿Que tal una partidita de carcassonne, profesor Falken?  Mi coleccion en BGG.  http://www.boardgamegeek.com/viewcollection.php3?username=Yellow+bastard&own=1&startletter=ALL&galleryview=1

Zorro

Re: Algoritmo de Reparto
« Respuesta #5 en: 23 de Agosto de 2011, 09:01:48 »
Como ya señala Wkr, esos temas estan bastante estudiados, pero claro, para escoger bandos en un juego, igual no necesitas tanta potencia. Si es solo para eso, me da a mi que el metodo mas sencillo es decir las preferencias de cada uno :D

Siempre puedes buscar "metodos" chorrillas para sistematizarlo... rollo minijuegos, por ejemplo, que cada jugador, en ronda, diga una potencia que NO quiere llevar... cuando todos menos uno hayan dicho, por ejemplo, que no quieren llevar al papado, pues el que falta se lo queda, y se siguen diciendo.

Tambien puedes dar "puntos" de puja... cada jugador tiene X puntos, y se subastan los bandos. Si juegas varias partidas, pues puedes incluso despues de cada partyida dar X/5 puntos a cada jugador, que se suman a los que ya tuviera.

Y bueno, si dais mucha importancia a la elección de bandos, lo mejor sería un duelo a garrotazos.



Si alguien no quiere participar, pues seguro que no le importa demasiado el bando :D

Pero vamos, que si realmente es solo para elegir bando... un metodo tradicional, como "dejamos que el mas novato elija primero", "dejamos que el que perdio elija primero" o similar, debería ser mas que suficiente, no? :D
Mi club de juegos en Madrid - Da2

Gand-Alf

  • Baronet
  • Veterano
  • *
  • Mensajes: 9383
  • Ubicación: Barcelona
  • Palantir como los de Alicantir.
  • Distinciones Colaborador habitual y creador de topics Napoleón de fin de semana Eurogamer Ameritrasher Antigüedad (más de 8 años en el foro) Entre los 10 con mayor tiempo conectado Entre los 10 más publicadores Encargado del juego del mes Baronet (besequero de la semana)
    • Ver Perfil
    • Distinciones
Re: Algoritmo de Reparto
« Respuesta #6 en: 23 de Agosto de 2011, 09:40:38 »
No si por métodos de repartir a mi se me ocurren cientos:

- Una competición por ver quien come más flanes.

- Jugar una partida de Here I Stand, en la que se determinará quien será el primero en escoger bando en una partida de Here I Stand.

- Meter a un pulpo en una pecera, poner 6 mejillones en distintas cajas con los dibujos de las facciones y que escoja en orden.

- Montar un debate teológico televisado acerca de las tesis de Ulrico Zwinglio. Los espectadores pueden mandar sms para votar quien creen que ha ganado el debate. El ganador escogerá facción.

- Jugar una partida de Here I Stand, en la que se determinará quien será el primero en escoger bando en una partida de Here I Stand, en la que se determinará quien será el primero en escoger bando en una partida de Here I Stand, en la que se determinará quien será el primero en escoger bando en una partida de Here I Stand... (riesgo de entrar en un bucle infinito).


Ahora bien, la gracia es dar con el sistema en que se obtiene una satisfacción óptima como matiza Maeglor (a eso me refería yo, logicamente si todos cogieran como última opción la misma facción, alguien debería jugar con la última opción que puso). En este caso sí es cierto que podría hacerse "a fuerza bruta". Se valoran las distintas posiciones y se intenta buscar cual es la posición o posiciones en que el valor global es más alto. Pero hay algoritmos para llegar a eso sin tener que desglosar todas las combinaciones. Lo que falta es entenderlos bien :P
Juegos en venta

(\     /)
 \\ _ //
 (='.'=)
 (")_(") Baronet #122 - 24/09/2012 - Gand-Alf

Maeglor

  • Moderador
  • Veterano
  • *
  • Mensajes: 10015
  • Ubicación: Madrid
  • Deja de pensar el Caos ya tiene Teoría.
  • Distinciones Conocí a iNTRuDeR Fan del Señor de los Anillos Colaborador habitual y creador de topics Entre los 10 con mayor tiempo conectado Entre los 10 más publicadores Juego online (vassal, cyberboard, bga, etc) Juego a todo, incluso al monopoly Antigüedad (más de 8 años en el foro) Baronet (besequero de la semana) Encargado del juego del mes
    • Ver Perfil
    • Distinciones
Re: Algoritmo de Reparto
« Respuesta #7 en: 23 de Agosto de 2011, 10:37:11 »
Ahora bien, la gracia es dar con el sistema en que se obtiene una satisfacción óptima como matiza Maeglor (a eso me refería yo, logicamente si todos cogieran como última opción la misma facción, alguien debería jugar con la última opción que puso). En este caso sí es cierto que podría hacerse "a fuerza bruta". Se valoran las distintas posiciones y se intenta buscar cual es la posición o posiciones en que el valor global es más alto. Pero hay algoritmos para llegar a eso sin tener que desglosar todas las combinaciones. Lo que falta es entenderlos bien :P

Yo ayer me puse a jugar con esto y me hice una matriz de 6x6 con el número de eleccción a boleo como dije ayer, un 6 a la potencia más deseada, un 1 a la menos. Y lo que hacía era ir tachando los números bajos (primero el 1, luego el 2...) y viendo si eso dejaba primero elecciones posibles y si no volvía para atrás (que se pudieran elegir todos los paises por algún jugador) y después si dejaba alguna elección obligada, es decir que una potencia estuviera sólo con un jugador. Entonces asignaba esa o esas potencias y reducía el rango de la matriz y seguía tachando.

Salir salía y en poco tiempo porque con esas dimensiones se ve de un vistazo, y aunque no sería el 'mejor' método sí era uno muy aproximado que primaba eliminar las opciones menos deseadas.
666

Bru

  • Visitante
Re: Algoritmo de Reparto
« Respuesta #8 en: 23 de Agosto de 2011, 11:57:09 »
Nada...ya se la manera de romper el bucle infinito ese

Se juegan 720 partidas de Here I Stand que son (creo) las combinaciones posibles que puede haber de elección de países.  Se hace la media de puntos de victoria y el que haya sacado más elige.

Lo bueno es que ya no se necesitará jugar la partida porque sea cual sea la elección se habrá jugado así que... con esa nos vale.

Por supuesto habrá que elegir un criterio para decidir el orden de esas 720 partidas... propongo una tirada de dados.

Je.

winston smith

  • Veterano
  • *****
  • Mensajes: 2540
  • Ubicación: Madrid Sur
  • today's empires, tomorrow's ashes
  • Distinciones Antigüedad (más de 8 años en el foro) Sigo subterfugiamente el camino del Ninja Mecenas (bronce)
    • Ver Perfil
    • Distinciones
Re: Algoritmo de Reparto
« Respuesta #9 en: 23 de Agosto de 2011, 13:42:23 »
Igual meto la pata, pero tendría ésto algo que ver con el algoritmo que se aplica en las mathtrades?? Quicir, si son 6 facciones ofrezco la/s q menos me interesen y hago una wishlist con la/s q deseo liderar?? O nada más lejos de la realidad?? De letras q es uno.


negroscuro

  • Baronet
  • Veterano
  • *
  • Mensajes: 7373
  • Ubicación: Madrid - Ventas
  • Distinciones Siente una perturbación en la fuerza Crecí en los años 80 Antigüedad (más de 8 años en el foro) Baronet (besequero de la semana)
    • Ver Perfil
    • Distinciones
Re: Algoritmo de Reparto
« Respuesta #10 en: 23 de Agosto de 2011, 14:05:25 »
vosotros... teneis pesadillas por las noches?  :P :P :P
 ;D

JavideNuln-Beren

  • Baronet
  • Veterano
  • *
  • Mensajes: 2819
  • Ubicación: Buscarme por Fuengirola, Mijas, Torremolinos o Málaga.
  • Distinciones Antigüedad (más de 8 años en el foro) Voluntario en Ayudar Jugando Fan del Señor de los Anillos Baronet (besequero de la semana)
    • Ver Perfil
    • Mis Juegos
    • Distinciones
Re: Algoritmo de Reparto
« Respuesta #11 en: 23 de Agosto de 2011, 15:56:45 »
Hola a Tod@s:

Yo he tenido esos problemas....

Pero lo he solucionado porque al final hay uno o dos jugadores que están dispuesto a jugar con cualquiera de las 6 potencias (frase típica: "la que nadie quiera"). Por contra también hay un par de jugadores que quiere una única potencia.

Al final me pueden quedar un par de tiradas con dados de 5 o 9 caras (que los hay).

Una recomendación: Reparte las potencias poco a poco; si dos jugadores quiere el Protestante, lanzas un dado y el que gana se convierte en Lutero, ahora solo te quedan 5 potencias para repartir entre 5 jugadores, 5! = 120 combinaciones.