compartments in oil & gas transports

This forum deals with any kind of trip optimization whether it is automatic planning or manual dispatching, refering to transport orders or service planning.
Post Reply
User avatar
Bernd Welter
Site Admin
Posts: 2574
Joined: Mon Apr 14, 2014 10:28 am
Contact:

compartments in oil & gas transports

Post by Bernd Welter »

Hi there,

today I received this requirement from a partner. I'd like to respond to it on a generic level - maybe some of you can benefit from this:
One of our customers has inquired about the possibility of tour optimization with a tanker vehicle problem.
I understand that we can specify a vehicle type to perform routing with restrictions for such a vehicle, but this problem is of a different kind.

Let's say we have a fleet of tanker trucks. Each tanker can have a different capacity; for example, one could be 21 cubic meters and another could be 39 cubic meters.
These tankers have compartments that divide their capacity, so a 39 cubic meter tanker truck has 5 separate chambers.

Our customer would like to optimize in such a way that each of their clients would be assigned a separate chamber for their cargo.
This means that even if the cargo does not fill the chamber completely, the remaining capacity in that chamber would not be available for anything else.

Have you encountered such a problem in the past? If so, do you have any suggestions on how to handle it?
And here's what I discussed with our optimization DEV team lead Frank:

So from my understanding the question refers to
  • Routing: “how to ensure that a truck does not drive on roads which are forbidden for his hazardous goods category” - For the routing we can apply truck attributes and specific settings for tunnel codes  out of the box.
  • Optimal sequence / assignment to truck: “how to handle the set of orders that are on a truck using the model of quantities”
Obviously the second part is more tricky and this article is focused on it.
Let's look very close into the quantities vectors of orders and vehicles and maybe other params such as “equipment”.

Probably your customer would also need to consider “stability” of a vehicle but I guess that’s too much for us.

Here’s what I discussed with my team lead optimization Frank. The approach is based on the assumption that each chamber within a vehicle would have the same quantity as all the other chambers on the same vehicle.
The quantities of a TransportOrder in our model are based on a vector of double values and sometimes the challenge is to find a proper design of these values.

We would have to ensure
  • that a single order is not matched to a single truck with insufficient capa
  • that s set of orders is not matched to a specific truck at the same time if the pattern doesn’t make sense.
We probably have to look into different aspects: Let’s define
  • vehicle.q[0] as “the number of available chambers on a truck”, e.g.
    small truck with 4 compartments smallTruck.q[0] = 4;
    large truck with 5 compartments largeTruck[0] = 5;
    As an order is supposed to occupy an exclusive chamber the order requires q[0] = 1;
    With this approach we ensure to have not more than 4 orders at the same time on a small vehicle, not more than 5 orders at the same time on a large vehicle.
  • Let’s use q[1] as “the maximum amount of fuel in a vehicle”: this is to ensure not to load too much fuel at the same time:
    smallTruck.q[1] = 21; (4 compartments with 5.25 m³?)
    largeTruck.q[1] = 39; (5 compartments with 7.8 m³?)
    Example orders:
    SmallOrder.q[1] = 4.0qm  MediumOrder.q[1] = 6.0 qm  LargeOrder.q[1] = 8.0 qm
  • Though the second criteria would be handy to ensure not to overload a vehicle it does not crosscheck whether the orders volume itself matches a single available chamber. Therefore we could apply some equipment properties (available through the abstract Order base class):
    • SmallOrder.requiredVehicleEquipment :[ "SmallOrder" ];
    • MediumOrder.requiredVehicleEquipment : [ "MediumOrder" ];
    • LargeOrder.requiredVehicleEquipment : [ "LargeOrder" ];
    So for the vehicles we would then have to define the potential orders they'd match:
    • SmallVehicle.equipment : [ "SmallOrder" ];
    • LargeVehicle.equipment : [ "SmallOrder" , "MediumOrder" ];
    As you can see none of the vehicles in this example would be able to deal with "largeOrders" due to a lack of equipment. Therefor the largeOrders would remain unscheduled.
Let me know whether you like this approach or not and what alternative ideas you have in mind to deal with this special requirement,

Bernd
Bernd Welter
Technical Partner Manager Developer Components
PTV Logistics - Germany

Bernd at... The Forum,LinkedIn, Youtube, StackOverflow
I like the smell of PTV Developer in the morning... :twisted:
Post Reply