What's new in anylogistix 2.12!

Vehicles:

  • It is obligatory now to specify a Vehicle type in the Paths table.
  • The default vehicle type with unlimited capacity is now created for every scenario except GFA

The Path Selection Mode table:

  • Is removed from the NO scenario
  • Is replaced by the Vehicle Selection Mode table
  • Acquired new selection types

Simulation scenario:

  • Acquired the new Shipping table that took part of the functionality from the Paths table, such as:
    • Transportation Policy (FTL/ LTL)
    • Min load ratio (for FTL)
    • etc.
  • The Shipping table is now required to define shipping behavior between any pair of Source / Destination objects.
  • You can create several shipping polices for the same combination of Source / Destination / Vehicle Type to achieve the desired behavior (e.g. FTL + LTL with periodic check at the end of the week).
  • The behavior of the Periodic FTL policy changed (it replaced FTL with aggregate orders from the Paths table). The FTL check is performed after each period, but vehicles are not shipped unless min load ratio is reached. Consider using standard FTL with periodic LTL or pending orders policies.
  • FTL now ships only full vehicles, while in the previous version it was shipping all products if there was enough to fill at least one. New FTL also incorporates partial delivery by default.

Updating Project and importing old scenarios:

  • Data for the Shipping table is generated automatically based on the existing paths.
  • If a vehicle is not set for a path, then the default vehicle type with unlimited capacity will be created and used in paths and shipping policies.

    If you use multiple measurement units, make sure that conversion rules are defined for every product (from the product unit to the vehicle’s capacity unit).

Extensions update

The following actions should be performed for any DC or supplier extension to maintain compatibility with the new version:

For DC:

  • In the shipmentReturned function replace shipmentGenerator.checkShipments() with shipmentGenerator.vehicleReturned(shipment.getVehicleType())
  • In the On at exit action of the processIncomingOrder block add checkWaitingOrders(agent.getProduct());
  • Update parameters of the shipmentGenerator block:
    • In the On order created parameter add inventory.reserve(order.getProduct(), order.getQuantity());
    • In the On order dropped parameter add:
      inventory.reserve(order.getProduct(), -order.getQuantity());
      ALX.statistics().orderStatusUpdate(order, OrderStatus.Dropped);
      order.getDestination().onOrderDropped(order);
    • In the Available inventory parameter add inventory.getAvailableInventory(product)
    • In the Fleet parameter add vehicles.getFleet(vehicleType)
  • In the checkAvailability function (3rd condition, line 8) replace
    if (ALX.getPath(this,destination, product) == null) with
    if (!ALX.canDeliver(this,destination, product))
  • In the On load parameter of the inventory element add shipmentGenerator.inventoryChanged(product);
  • Also, the name of the shipmentGenerator on exit changed to On shipment exit, so the old value could be lost. Make sure to add any custom code you have there.

For supplier:

  • In the shipmentReturned function replace
    shipmentGenerator.checkShipments() with
    shipmentGenerator.vehicleReturned(shipment.getVehicleType())
  • Update parameters of the shipmentGenerator block:
    • In the On order dropped parameter add:
      ALX.statistics().orderStatusUpdate(order,
      OrderStatus.Dropped);
      order.getDestination().onOrderDropped(order);
    • In the Available inventory parameter add Double.POSITIVE_INFINITY
    • In the Fleet parameter add vehicles.getFleet(vehicleType)
  • In the checkAvailability function (2nd condition, line 5) replace
    if (ALX.getPath(this,destination, product) == null) with
    if (!ALX.canDeliver(this,destination, product))