es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Herramientas OR: Minimización de la suma de diferencias absolutas entre pares – Problema de asignación/programación.

Este es un intento de resolver un problema de programación de horarios. El objetivo sería ejecutarlo varias veces en secuencia para obtener un horario semanal para una liga deportiva definida de la siguiente manera:

  1. Hay 48 individuos, cada uno clasificado por habilidad de forma secuencial.
  2. Cada individuo se asigna a un equipo. Los equipos están compuestos por 3 individuos.
  3. Los 12 primeros individuos no pueden jugar contra los últimos 12, por rango.
  4. Los individuos solo pueden jugar entre sí una vez.
  5. Los individuos no pueden jugar entre sí más de dos veces (cuanto menos, mejor).

*Los individuos están etiquetados como “Pods” en el código, pero son equivalentes a un individuo descrito anteriormente.

A continuación se muestra el código ortools que intento usar para resolver esto. Creo que la parte más difícil es asegurarse de que la función objetivo sea correcta y de que haya construido las restricciones de manera apropiada.

Al final, tengo una matriz de columnas (individuos) y filas (equipos). Hay 16 equipos y he construido la función objetivo de tal manera que las filas impares juegan contra la siguiente fila par. El objetivo es minimizar el valor absoluto de la diferencia en la suma de las clasificaciones de los individuos en cada equipo: minimizar(sumOf(abs(home_i - away_i) for home/away in teams)). No estoy seguro de haber traducido correctamente esta suma de diferencias absolutas por pares en restricciones lineales.

Tengo un par de preguntas principales:
1. Parece que el costo siempre es 1176. ¿Por qué está sucediendo esto? Para mí, la solución óptima sería: SUM(ABS(team1 - team2)) para todos los equipos, y como los equipos tienen valores mín./máx. relativamente similares, esperaría que el costo sea mucho más bajo, especialmente considerando que obtuve muchos deltas de abs(team1 - team2) == 0 de la solución de fuerza bruta para la ejecución inicial donde ningún individuo ha jugado con/contra nadie más. (Se muestra a continuación mi solución para la primera ejecución.)
2. Si intento ejecutar esto en secuencia (para aprovechar las restricciones de “jugado con/contra”), llego a una sol

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Basándonos en el código proporcionado y la descripción del problema, parece haber algunos problemas que podrían estar causando los errores observados:

    1. Función objetivo: La función objetivo proporcionada parece calcular la suma de las diferencias absolutas por parejas entre las sumas de las clasificaciones de los equipos, pero no está claro si esta es la función objetivo correcta para el problema. Sería conveniente comprobar si existe otra función objetivo a optimizar.
    2. Restricciones: Algunas de las restricciones proporcionadas en el código (por ejemplo, evitar que los jugadores jueguen entre sí más de dos veces) parecen estar ausentes o no estar claras, lo que podría generar soluciones infactibles.
    3. Tiempo de ejecución: El problema parece ser bastante grande (48 jugadores y 16 equipos), lo que podría explicar por qué el código tarda mucho tiempo en ejecutarse. Sería conveniente intentar simplificar el problema u optimizar el código para mejorar el tiempo de ejecución.

    Para abordar estos problemas, podría ser útil trabajar paso a paso y asegurarse de que las restricciones y la función objetivo estén especificadas e implementadas correctamente. Además, puede ser útil simplificar el problema (por ejemplo, reduciendo el número de jugadores, equipos o restricciones) para ver si esto ayuda a identificar la fuente de los errores. Finalmente, sería conveniente optimizar el código para mejorar el tiempo de ejecución (por ejemplo, mediante la paralelización del código o el uso de algoritmos más eficientes).

Comments are closed.