A unique Single-vehicle VRPPD Problem

MynachMelyn

New member
Joined
Feb 1, 2022
Messages
1
So I'm writing a tool for plotting deliveries between outposts in space (it's a long story). These outposts are on either planets, moons, or space stations. Currently, I'm only interested in dealing with a single system consisting of a star, some planets around that star, and moons and stations around those planets. Due to the fact that I can't get accurate positions of these bodies, I have generalised the problem to use a hierarchy of nodes, where the distance between any two outposts is instead the hierarchical depth:

Star
----planet A
-------- Moon A1
------------Outpost Alpha
--------Moon A2
------------Outpost Beta
------------Outpost Gamma

Distance from Alpha to Beta = 3 (Alpha -> A1 -> A2 -> Beta)

Deliveries are of non-fungible packages, i.e. they must be picked up from one specific node and dropped off at another specific node - they are not interchangeable, and there is no central depot for collecting packages. In a way this is much closer to a taxicab routing problem, except the taxi has unlimited storage and instead of optimising journey time, we're optimising the *number* of stops and minimising distance/depth; in short, we want the most overlap possible (as many pickups, visits, and dropoffs on the same nodes as possible).

All literature on VRP(PD) that I've found so far treats it as a distance-based node system you would classically see in this sort of problem, or they have a central depot, or multiple vehicles, or a number of other things that can't factor in here.

In my C# implementation, I have structured it thus:
  • Nodes are planets, moons, stations etc. They are named and parented in the hierarchy to the body they orbit/are situated on.
  • Packages are named and contain their pickup and dropoff locations as Node references
  • Steps are visits and/or stops at an node. Each step contains actions.
  • Actions are pickup/dropoff a package or visit (on the way to another node)
  • By default, as a naïve solution, the steps constructed by iterating over the packages, and enqueueing their pickup, direct route, and dropoff. (e.g. +package on outpost Alpha, goto Moon A1, goto Moon A2, -package on Outpost Beta)
I want to optimise for the maximum amount of overlapping steps; since many nodes occur multiple times in the entire set of actions and steps, I want to maximise the number of actions per step, which should reduce the number of stops overall. The difficulty here is that packages must be picked up before they can be dropped off, which means the pickup action must occur before dropoff while also moving steps around and potentially splitting steps (dividing their actions into two new steps, should it become unsolvable)

Could someone advise me as to how I should be looking to solve this problem?
 
Top