14 votos

¿Vendedor ambulante con múltiples vendedores?

Tengo un problema que se ha reducido efectivamente a un Problema del Vendedor Viajero con múltiples vendedores. Tengo una lista de ciudades para visitar desde una ubicación inicial, y tengo que visitar todas las ciudades con un número limitado de vendedores.

Estoy tratando de idear una heurística y me preguntaba si alguien podría echar una mano. Por ejemplo, si tengo 20 ciudades con 2 vendedores, el enfoque que he pensado adoptar es de dos pasos. Primero, dividiría las 20 ciudades al azar en 10 ciudades para 2 vendedores cada una, y encontraría el recorrido de cada una como si fuera independiente durante unas cuantas iteraciones. Después, me gustaría intercambiar o asignar una ciudad a otro vendedor y encontrar el recorrido. Efectivamente, sería un problema de TSP y luego de mínimo makespan. El problema con esto es que sería demasiado lento y la generación de un buen vecindario para intercambiar o asignar una ciudad es difícil.

¿Puede alguien aconsejarme cómo podría mejorar lo anterior?

EDITAR:

Se conoce la geolocalización de cada ciudad y los vendedores empiezan y terminan en los mismos lugares. El objetivo es minimizar el tiempo máximo de viaje, lo que lo convierte en una especie de problema de duración mínima. Así, por ejemplo, si el vendedor 1 tarda 10 horas y el vendedor 2 tarda 20 horas, el tiempo máximo de viaje sería de 20 horas.

6voto

ysdx Puntos 2444

El TSP es un problema difícil. El Multi-TSP es probablemente mucho peor. No estoy seguro de que se puedan encontrar buenas soluciones con métodos ad-hoc como éste. ¿Has probado los métodos meta-heurísticos? Yo intentaría usar el método de la Entropía Cruzada primero: no debería ser muy difícil usarlo para tu problema. Si no, busca Algoritmos Genéricos, Optimización por Colonia de Hormigas, Recocido Simulado...

Véase "A Tutorial on the Cross-Entropy Method" de Boer et al. Ellos explican cómo utilizar el método CE en el TSP. Una adaptación sencilla para su problema podría ser definir una matriz diferente para cada vendedor.

Puede suponer que sólo quiere encontrar la partición óptima de las ciudades entre los vendedores (y delegar el recorrido más corto para cada vendedor a una implementación clásica del TSP). En este caso, en el marco de la entropía cruzada, se considera una probabilidad de que cada ciudad Xi esté en el recorrido del vendedor A: P(Xi en A) = pi. Y trabajas, en el espacio de p = (p1, ... pn). (No estoy seguro de que funcione muy bien, porque tendrás que resolver muchos problemas TSP).

1voto

Bork Blatt Puntos 2143

Echa un vistazo a esta pregunta (562904) - aunque no es idéntica a la suya, debería haber algunos buenos elementos de reflexión y referencias para un estudio más profundo.

1voto

Marcelo Campos Puntos 16

Cuando empiezas a hablar de vendedores múltiples empiezo a pensar en la optimización por enjambre de partículas. He encontrado mucho éxito con esto usando un algoritmo de búsqueda gravitacional. Aquí hay un documento (largo) que encontré que cubre el tema. http://eprints.utm.my/11060/1/AmirAtapourAbarghoueiMFSKSM2010.pdf

1voto

Maryam Puntos 11

¿Por qué no convierte su TSP múltiple en el TSP tradicional?
Este es un problema bien conocido (transformar el TSP de múltiples vendedores en TSP) y se pueden encontrar varios artículos al respecto.

Para la mayoría de las transformaciones, básicamente copias tu depósito (donde empiezan y terminan los vendedores) en varios depósitos (en tu caso 2), haces los pesos de los bordes de forma que obligues a un TSP a volver al depósito dos veces, y luego eliminas los dos depósitos y los conviertes en uno.

Voilà! se obtienen dos recorridos de coste mínimo que cubren los vértices exactamente una vez.

0voto

Chris Shaffer Puntos 18066

Mi primer pensamiento al leer la descripción del problema sería utilizar un enfoque estándar para el problema del vendedor (buscando en Google uno apropiado, ya que nunca he tenido que escribir código para ello); luego tomar el resultado y dividirlo por la mitad. Tu algoritmo podría decidir dónde está la "mitad", quizás sea la mitad de las ciudades, o quizás se base en la distancia, o quizás alguna combinación. O buscar en el resultado la mayor distancia entre dos ciudades y elegir eso como la separación entre la última ciudad del vendedor #1 y la primera ciudad del vendedor #2. Por supuesto, esto no se limita a dos vendedores, se dividiría en x partes; pero en general la idea es que su solución TSP estándar de 1 vendedor ya debería haber obtenido las ciudades "cercanas" una al lado de la otra en el gráfico de viaje, por lo que no tiene que venir con un algoritmo de agrupación por separado ...

En fin, seguro que hay soluciones mejores, pero esta me parece una buena primera aproximación.

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X