[Kde-devel-es] problema heurístico

Manuel Pérez López manuel.perez.lopez at hispalinux.es
Thu Apr 8 13:17:30 CEST 2004


Buenas:

Estoy haciendo una aplicación en la que me he 'atrancado'. Así, que si alguien 
me echa una mano, se lo agradecería. 

La cosa es que tengo que repartir unos 25 puntos entre unos 300 posibles 
lugares de una determinada región de un plano. Para que nos 
hagamos una idea, podría ser algo así como un juego en el que el tablero 
tiene 300 escaques y tengo que colocar 25 fichas *diferentes* sobre él. Mi 
problema es que ni siguiera puedo calcular el número de posibles soluciones, 
ya que en el hipotético caso de reducir a 25 escaques, tendría la friolera de 
25!, lo que en otras palabras son 1.551121004 * 10 elevado a 25 
posibilidades.

El problema no termina ahí, porque tengo que valorar cada una de las 
posibilidades resultantes y quedarme con la mejor bajo unos determinados 
criterios de valoración, por lo que el tiempo de ejecución del programa sería 
prácticamente infinito.

Como veo que por ahí no pueden ir los tiros (a no ser que me equivoque, y 
estaría gustoso de que alguien me ayudara), he visto solo una posible 
solución:


Quedarme con sólo, digamos unas 5000 ó 10000 de esas posiciones posibles, 
elegidas al azar, y valorar cual es la mejor. Esto ya lo he implementado, con 
tiempo de respuesta del algoritmo dentro de la normalidad, pero con 
resultados muy pobres :-(


Comento el asunto con más detalles sobre cómo he implementado esta solución 
con resultados no muy aceptables:

- La distribución de los puntos no es totalmente al azar, sino que ya desde el 
principio voy colocando restricciones. Concretamente los puntos representan 
personas de diferente sexo y el área donde van los puntos son tres círculos 
concéntricos. Cada persona tiene asignado a qué círcuclo va. Esto lo llamo 
zona asignada. Además, hago un reparto del circulo total en dos sectores 
circulares, uno para hombres y otro para mujeres. Adicionalmente no permito 
que los puntos se puedan colocar en cualquier lugar, sino que establezco unas 
posibles posiciones discretas, lo que me da la ventaja de antemano de no 
tener puntos demasiado cerca unos de otros.

- A partir de este punto, y bajo estas condiciones, comienzo las interacciones 
para ir colocando los sujetos al azar (teniendo en cuenta la zona, el sector 
circular y las posibles posiciones discretas).

- En cada una de las interacciones hago una valoraciones de la posición 
resultante, dando puntos: los sujetos representados por puntos tienen unas 
relaciones entre sí, que se establecen con flechas. Para poder visualizar 
correctamente el conjunto, valoro más aquellos resultatos en los que los 
puntos relacionados (con flechas) están cercanos (no todos los puntos tienen 
relaciones entre sí), y sobre todo, la fechas no pueden pasar por encima de 
otros puntos (o sus cercanías).


En el proceso de las interacciones voy maximizando el resultado, es decir, voy 
almacenado el resultado con mejor puntuación. En el fondo, lo que pretendo es 
una visión clara de los puntos y las flechas, con los sujetos relacionados 
cercanos entre sí, y con el mínimo de solapamiento de los elementos.


No se si me he explicado bien, porque el asunto es algo complejo para los que 
nunca han visto algo de este tema (concretamente es una representación 
gráfica de sujetos y sus interacciones sociológicas como grupo, que se llama 
sociograma).

Lo dicho, cualquier sugerencias sobre el tema estaría muy agradecido.

Saludos
Manuel Perez


More information about the Kde-devel-es mailing list