Table des matières
Attribution de fréquences - Coloration
Dans une ville on place des antennes GSM. Ces antennes sont plus ou moins puissantes et elles sont placées au gré des accords avec les résidents des immeubles où elles sont implantées. Elles ne sont donc pas placées avec la régularité d'un quadrillage. De plus, on peut être amené à placer plus d'antennes dans les zones de forte affluence.
Fichier de données
Nous disposons des données concernant les antennes. En voici un aperçu – 10 premières lignes :
| ID | PORTEE | LAT | LON |
|---|---|---|---|
| ANT7271 | 50 | 48.802757 | 2.372187 |
| ANT1747 | 50 | 48.797364 | 2.360350 |
| ANT9084 | 50 | 48.797359 | 2.372168 |
| ANT6633 | 50 | 48.798027 | 2.372778 |
| ANT1810 | 50 | 48.796001 | 2.363910 |
| ANT1920 | 100 | 48.803417 | 2.353819 |
| ANT9785 | 100 | 48.797364 | 2.355624 |
| ANT2717 | 50 | 48.814234 | 2.353869 |
| ANT5168 | 50 | 48.808151 | 2.367458 |
| ANT6021 | 100 | 48.808162 | 2.360334 |
Téléchargez : antennes.csv
Le fichier indique, pour chaque antenne, sa localisation en latitude et longitude, sa portée et un identifiant.
Calcul de distance
Le calcul de la distance entre deux points, tenant compte des positions en latitude et longitude, relève d'un calcul de trigonométrie. Je vous donne la formule, avec les latitudes et longitudes exprimées en degrés :
$$x = (longitude_1 - longitude_2)\cdot\cos\left(\frac{latitude_1 + latitude_2}{2}\cdot \frac{2\pi}{360}\right) \cdot 111\,120$$ $$y = (latitude_1 - latitude_2) \cdot 111\,120$$ $$distance = \sqrt{x^2 + y^2}$$
$111\,120 = 60 \times 1852$. Le mile nautique, $1852 m$, unité de distance pour les marins, est définie comme la longueur correspondant à 1 minute d'angle au niveau de l'équateur. Il faut 60 minutes pour faire un degré, donc 1 degré à l'équateur correspond à la distance $60 \times 1852 m$.
Choisir les fréquences
Les antennes disposent d'un ensemble de fréquences pour communiquer. Certaines zones sont couvertes par plusieurs antennes en même temps et il faut alors que ces antennes aient une fréquence différente afin d'éviter les interférences.
On aimerait limiter le nombre de fréquences utilisées.
On cherche donc à attribuer une fréquence à chaque antenne, en choisissant une fréquence différente pour deux antennes couvrant une même zone, mais en limitant le nombre de fréquences utilisées.
C'est un problème de coloration de graphe.
À faire
Écrire un programme Python qui :
- ouvre le fichier
antennes.csvet en extrait les données, - produit un graphe dans lequel chaque sommet est une antenne et chaque arête représente une interférence possible entre deux antennes,
- réalise la coloration de graphe afin de déterminer quelles antennes peuvent avoir la même fréquence. On pourra attribuer un numéro pour identifier chaque fréquence / couleur
- écrit un fichier
antennes.out.csvdans lequel on aura une colonneFREQsupplémentaire, indiquant une fréquence pour chaque antenne.
Représentation graphique
Vous pouvez ajouter – en guise de divertissement – une représentation graphique montrant les différentes antennes avec leur couleurs. Pour cela,
- calculer pour chaque antennes la position $(x;y)$ avec les formules :
$$x = longitude \cdot\cos\left(latitude\cdot \frac{2\pi}{360}\right) \cdot 111\,120$$ $$y = latitude \cdot 111\,120$$
- On obtient donc une liste de
x, une liste dey, on a déjà une liste de fréquencesfet une liste de portéesp.
Le code est alors :
import matplotlib.pyplot as plt plt.scatter(x,y, c=f, s=p) # supposant les list x, y, f, p définies préalablement plt.show()
