mapbox / mapbox/node-or-tools

Fairness - balance number of locations serviced per vehicle

Ouverte
#1 3 commentaires 0 réactions 0 personnes assignées Voir sur GitHub

Personne n'a encore pris cette issue.

Langage dominant
C++
Étoiles
155
Forks
47
Métriques de merge des PR
Aucune PR mergée en 30 j

Description

We want to be able to balance the number of locations serviced by each vehicle to be as even as possible. The use-case is for example drivers who are getting paid (at least partially) by number of deliveries.

This constraint should be behind a flag and optional.


Implementation: use the underlying solver to

  • Establish a vehicle vars <-> vehicle counts relationship via the Distribute constraint
  • Add a Deviation constraint for vehicle counts targeting the deviation var
  • Minimizing the deviation var

Roughly as follows:

std::vector<IntVar*> vehicleCounts;

for (auto vehicle = 0; vehicle < numVehicles; ++vehicle)
  vehicleCounts.push_back(solver->MakeIntVar(0, numNodes));

solver->AddConstraint(solver->MakeDistribute(vehicleVars, vehicleCounts));

auto* deviationVar = solver->MakeIntVar(0, numNodes * numNodes);

solver->AddConstraint(solver->MakeDeviation(vehicleCounts, deviationVar, numNodes));

model.AddVariableMinimizedByFinalizer(deviationVar);

Guide de contribution

Ouvrir le guide de contribution

Par où commencer

  1. Lisez l'issue en entier, puis le guide de contribution du projet.
  2. Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
  3. Forkez le dépôt et travaillez sur une branche.
  4. Ouvrez une pull request qui référence le numéro de l'issue.

Piste de recherche

Aucun fichier ni test n’est nommé. Commencez par localiser le modèle d’itinéraires de véhicules et sa configuration des contraintes optionnelles, puis examinez comment le solver sous-jacent expose Distribute, Deviation et la minimisation par finalizer. C’est terminé lorsqu’un flag optionnel active un nombre équilibré de lieux par véhicule et que le solver en minimise l’écart.

Rédigé par le modèle d'indexation à partir du texte de l'issue.

Évaluation

Stack technique
cpp
Domaine
backend
Type d'issue
Fonctionnalité
Difficulté
5/5
Temps estimé
Plus d'une semaine
Activité
À l'abandon
Clarté
Plutôt claire
Accessibilité débutants
28/100

Recevez les nouvelles issues par e-mail

Un résumé court des issues GitHub adaptées aux débutants.