a3-algorithmique-avancee/Projet_algo.ipynb
2023-06-07 13:43:29 +00:00

30 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 qui permette de passer par tout les points de livraisons avec un temps optimisé.

Modélisation du problème

L'objectif de notre algorithme est de calculer et de fournir le meilleur itinéraire possible et le plus optimisé en terme de temps.

Notre problème se modélise sous forme d'un graphe, chaque sommet du graphe va représenter une ville. Le but est de passer par chaque ville pour revenir au point de départ en empruntant le chemin le plus rapide. Chaque arête possède un poids qui représente le temps de trajet d'une ville A à une ville B.

Dans notre cas le problème peut s'assimiler à un problème du voyageur de commerce dynamique avec un graphe incomplet. On cherche le chemin le plus court en passant par toute les villes en tenant compte des variations des poids des arêtes au cours du temps. Il est possible de passer plusieurs fois par le même sommet si cela permet d'avoir le chemin qui prends le moins de temps.

Objectifs

Minimiser les temps de trajets, en optimisant les itinéraires.

Contrainte :

Contrainte de temps entre les sommets. Les temps de parcours d'une arête peut varié au cours du temps en fonction de l'heure.

In [33]:
import numpy as np

mat = np.random.random((10, 10))
mat = mat + mat.T
adja = (mat >= 1.4).astype(int)
for i in range(adja.shape[0]):
    adja[i ,i] = 0
adja
Out[33]:
array([[0, 0, 0, 0, 0, 0, 1, 0, 0, 1],
       [0, 0, 0, 0, 1, 0, 0, 0, 0, 1],
       [0, 0, 0, 0, 0, 1, 0, 1, 0, 0],
       [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 1, 0, 0, 0, 0, 0, 0, 1, 0],
       [0, 0, 1, 0, 0, 0, 0, 0, 0, 0],
       [1, 0, 0, 0, 0, 0, 0, 0, 0, 0],
       [0, 0, 1, 0, 0, 0, 0, 0, 0, 1],
       [0, 0, 0, 0, 1, 0, 0, 0, 0, 0],
       [1, 1, 0, 0, 0, 0, 0, 1, 0, 0]])
In [32]:
import networkx as nx
import scipy
import matplotlib.pyplot as plt
fix, ax = plt.subplots(1, 1,figsize=(4,4))
G = nx.DiGraph(np.array(adja))
layout = nx.kamada_kawai_layout(G)
nx.draw(G, with_labels=True, ax=ax, pos=layout)
No description has been provided for this image
In [ ]:
 
In [ ]: