vidalt / HGS-CVRP

Modern implementation of the hybrid genetic search (HGS) algorithm specialized to the capacitated vehicle routing problem (CVRP). This code also includes an additional neighborhood called SWAP*.

Home Page:https://arxiv.org/abs/2012.10384

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

package naming

chkwon opened this issue · comments

This is to brainstorm wrapper package names of Julia and Python.

Python

There are three names required, which can be the same, or different.

  • Project Name (say, the GitHub repository name)
  • pip package name (to be used when we install the package: pip install packagename)
  • module name (to be used when we import the module: import modulename)

Examples:

  • PyTorch / torch / torch
  • PyConcorde / pyconcorde / concorde
  • elkai / elkai / elkai (a python wrapper for LKH)
  • NumPy / numpy / numpy
  • PyVroom / pyvroom / vroom

Python style guide says:

Modules should have short, all-lowercase names. Underscores can be used in the module name if it improves readability. Python packages should also have short, all-lowercase names, although the use of underscores is discouraged.

I think the Project Name can be anything, but it will be better to make the package name and the module name the same.

Some ideas for the package/module name:

  1. hgscvrp
  2. hygese
  3. hygesecvrp
  4. hgs_cvrp (the use of underscores is discouraged)
    ...

Julia

There is only one name to determine: PackageName.jl.

The GitHub repo will be called PackageName.jl.
When we install, we will type add PackageName.
When we use it in the code, we will type using PackageName.

The package naming guidelines are given here. It needs to be CamelCase without hyphen or underscore.

Some examples:

  • DifferentialEquations.jl
  • Pluto.jl
  • DiffEqFlux.jl
  • NeuralPDE.jl
  • Convex.jl
  • PATHSolver.jl

Julia generally doesn't like all capital letters, but we could probably make a case, since the original C++ code is called HGS-CVRP. In that case, it will be called HGSCVRP.jl, which could a little difficult to read and type.

Some ideas:

  1. HGSCVRP.jl
  2. Hygese.jl
  3. HygeseCVRP.jl
  4. HgsCvrp.jl
  5. HybridGeneticSearchCVRP.jl
    ...

In general, I think the benefit of having both HGS and CVRP in the name is clear. On the other hand, using only HGS or its variant can leave the door open to the possibility that the package extends to HGS like algorithms applied in other types of routing/transportation problems. But this may not be important at this moment.

Please let me know if you have any suggestions. To satisfy the two different style guidelines with a single name for both Python and Julia, I ended up with hygese or Hygese.jl, while keeping usability, readability, and consistency, but sacrificing some clarity. But maybe we don't need to use the same name for Python and Julia. Let me know what you think.

Thank you so much for taking the time for making this breakdown of the different naming requirements!
Considering all the elements that you have listed, I think we can either go as:

  • Python hygese / hygese / hygese and Julia Hygese.jl or
  • Python HGS-CVRP / hgscvrp / hgscvrp and Julia HGSCVRP.jl

I like the name that you made up, Hygese, as it's straightforward to pronounce and to remember.
Ultimately, I let you choose your favorite one. Given that the first one (current name of your repositories) leads to the smallest of changes I think it's a good option.
--Thibaut

@vidalt Thanks for your input. While we work on the C/C++ part, we can keep the current names for now. Whenever we come up with a better idea, we can move forward with that name. We can change the name anytime until we register the packages.

With the release of v2.0.0, this is closed.