a3-algorithmique-avancee/.ipynb_checkpoints/Projet_algo-checkpoint.ipynb
2023-06-07 14:38:18 +02:00

190 KiB

Projet algorithme

Contexte du projet:

L'ADEME a lancé un appel à manifestation d'intérêt pour développer des solutions de mobilité adaptées à différents territoires. CesiCDP, en collaboration avec des partenaires, s'est spécialisé dans la Mobilité Multimodale Intelligente. Dans le cadre de cet appel, l'équipe de CesiCDP travaille sur la gestion de tournées de livraison pour minimiser les trajets et optimiser l'efficacité. L'objectif est d'obtenir de nouveaux marchés et des financements pour poursuivre le développement de l'entreprise. Des contraintes supplémentaires seront ajoutées pour rendre le problème plus réaliste et intéressant pour l'ADEME.

Notre but est de réaliser un algorithme permettant de passer par tous les points de livraisons avec un temps optimisé.

Contrainte :

Les contraintes que nous avons choisi sont les suivantes:

  • Avoir plusieurs camions disponible simultanément pour effectuer les livraisons.
  • Fenêtre de temps de livraison pour chaque object

Formulation du problème

Le problème que nous avons avec les contraintes ci-dessus est le problème VRPTW (Vehicule Routing Problem avec la contrainte supplémentaire de Time Window).

  • Tous les clients doivent être déservis
  • Un client ne peut être servi que par un et un seul véhicule.
  • En quittant un client, un véhicule peut aller que vers un seul autre client.
  • Un véhicule ne peut servir un client que s'il a assez de capacité pour servir le client.

On va donc affecter chaque client à une tournée effectué par un seul véhicule.

e.

Objectifs

L'objectif de notre algorithme est de calculer et de fournir les meilleurs itinéraires pour pouvoir livrer tout les clients avec le nombre de camion disponible.

Il est possible de minimiser le nombre de camion nécessaire en optimisant les trajets et leurs temps. Il faut donc pour cela minimiser le temps de chaque parcours.

Modélisation mathématique

Nous allons représenter notre problème par un graphe
$G=(V,E)$

$V$ représente les sommets du graphe qui correspondent aux clients

$E$ représente les arcs entre deux clients $i,j \in V$

On a un ensemble $C=\{1,2,...,n_c\}$ de clients qui doivent obtenir leur livraison qui provient du dépot.

L'ensemble des emplacements des clients est défini comme : $V = C \cup \{0, n_c+1\} $

$0$ et $n_c+1$ représente le dépot, puisqu'on doit revenir au point de départ le dépots est le dernier client plus un.

On a un ensemble $V=\{1,2,...,n_v\}$ de véhicule disponible et chaque véhicule possède une capacité $Q$.

Variables de décisions:

Variables de décision:

  • Un ensemble de k véhicule
In [ ]:
 
In [6]:
import random
import networkx as nx
import matplotlib.pyplot as plt

def generate_graph(num_nodes):
    # Créer un graphe vide
    G = nx.Graph()
    # Ajouter les sommets au graphe
    G.add_nodes_from(range(1, num_nodes + 1))
    # Ajouter au moins deux arêtes par sommet
    for node in G.nodes():
        connected_nodes = sorted(set(G.nodes()) - {node})  # Exclure le sommet lui-même et trier les nœuds
        random_nodes = random.sample(connected_nodes, 2)
        G.add_edges_from([(node, random_nodes[0]), (node, random_nodes[1])])
    # Ajouter des arêtes supplémentaires de manière aléatoire
    while not nx.is_connected(G):
        node1, node2 = random.sample(G.nodes(), 2)
        if not G.has_edge(node1, node2):
            G.add_edge(node1, node2)
    return G

graph = generate_graph(100)
A = nx.adjacency_matrix(graph)

print(A.todense())

# Dessiner le graphe
nx.draw(graph, with_labels=True)
plt.show()
[[0 0 0 ... 0 0 0]
 [0 0 0 ... 0 0 0]
 [0 0 0 ... 0 0 0]
 ...
 [0 0 0 ... 0 0 0]
 [0 0 0 ... 0 0 0]
 [0 0 0 ... 0 0 0]]
No description has been provided for this image
In [ ]:
#k Nombre de camion disponible
k = 4


class Ant: 
    
In [ ]:
 
In [ ]: