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.

Anylogic: Cómo agregar la elección de ruta (basada en los costos de la ruta)?

En mi modelo de Anylogic agregué una clase Java llamada MyRoute y una función que lee los costos de ruta de una base de datos:

GISRoute route = main.map.getRoute(
(double) selectFrom(odcosts)
    .where(odcosts.origin.eq(order.terminal.name))
    .uniqueResult(odcosts.latitudeorigin),
(double) selectFrom(odcosts)
    .where(odcosts.origin.eq(order.terminal.name))
    .uniqueResult(odcosts.longitudeorigin),
(double) selectFrom(odcosts)
    .where(odcosts.destination.eq(order.customer.name))
    .uniqueResult(odcosts.latitudedestination),
(double) selectFrom(odcosts)
    .where(odcosts.destination.eq(order.customer.name))
    .uniqueResult(odcosts.longitudedestination), true);
MyRoute myRoute = new MyRoute();
myRoute.route = route;
myRoute.cost = (double) selectFrom(odcosts)
    .where(odcosts.origin.eq(order.terminal.name))
    .where(odcosts.destination.eq(order.customer.name))
    .uniqueResult(odcosts.cost);

¿Cómo puedo agregar ahora la opción de camiones (cuando reciben un pedido) para usar:
A) Ruta directa entre el origen y el destino durante el día
B) Ruta a través de una central (origen -> central por la noche y central -> destino durante el día)

¿Cómo indico a la población de agentes de camiones que debe analizar las rutas y los costos y tomar la decisión?

¡Muchas gracias de antemano!

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para agregar la opción de camiones que utilizan rutas diferentes en Anylogic, puedes crear un parámetro en la población de agentes de camiones que determinará qué ruta tomará el camión. Por ejemplo:

    1. Crea un nuevo parámetro en la población de agentes de camiones llamado “routeChoice” con dos posibles valores: “directo” y “viaHub”.
    2. En la acción principal de tu agente de camión, agrega una instrucción condicional if que verifique el valor de “routeChoice” y establezca la ruta correspondiente:

    GISRoute route;
    if (routeChoice.equals("directo")) {
        // calcular ruta directa
        route = main.map.getRoute(...);
    } else {
        // calcular ruta a través del hub
        route = main.map.getRoute(...);
    }
    
    1. Cuando un camión recibe un nuevo pedido, establece el valor de “routeChoice” en función de la ruta preferida:
    if (order.isDayTime() && order.isDirectRoute()) {
        // establecer ruta directa
        truck.routeChoice = "directo";
    } else {
        // establecer ruta a través del hub
        truck.routeChoice = "viaHub";
    }
    
    1. Finalmente, cuando el camión calcula el costo de la ruta, utiliza el valor de “routeChoice” para determinar qué costo utilizar:
    if (routeChoice.equals("directo")) {
        myRoute.costo = (double) selectFrom(odcosts)
            .where(odcosts.origin.eq(order.terminal.nombre))
            .where(odcosts.destination.eq(order.customer.nombre))
            .uniqueResult(odcosts.costo);
    } else {
        myRoute.costo = (double) selectFrom(hubcosts)
            .where(hubcosts.origin.eq(order.terminal.nombre))
            .where(hubcosts.hub.eq(preferredHub.nombre))
            .uniqueResult(hubcosts.costo)
            + (double) selectFrom(hubcosts)
            .where(hubcosts.hub.eq(preferredHub.nombre))
            .where(hubcosts.destination.eq(order.customer.nombre))
            .uniqueResult(hubcosts.costo);
    }
    

    Al agregar estos pasos, le otorgas a tus agentes de camiones la capacidad de elegir entre diferentes rutas basadas en la hora del día y la ruta preferida. También podrán calcular el costo de cada ruta y tomar la mejor decisión para cada pedido.

Comments are closed.