[programmation en C]

Fermé
qosmio Messages postés 13 Date d'inscription vendredi 27 avril 2007 Statut Membre Dernière intervention 10 janvier 2011 - 27 avril 2007 à 17:52
qosmio Messages postés 13 Date d'inscription vendredi 27 avril 2007 Statut Membre Dernière intervention 10 janvier 2011 - 5 juin 2007 à 23:12
Bonjour,
Windows XP

Je débute en programmation en C. Voilà l'énoncé:

J'ai une image satellite de dimension quelconque. Cette image est une carte des altitudes du terrain surlequel une société de Télécoms souhaite placer N antennes de relais. Sachant que ces antennes ne couvrent qu'un rayon de largeur R et qu'elles n'émettent pas vers le haut (une demi-sphère), écrire le programme qui calcule le meilleur emplacement pour ces n antennes de façon à obtenir la meilleure couverture possible.

Je vous demande de bien vouloir m'aider, par un code qui ressemble à la question, ou des propositions. SVP. et merci

3 réponses

ekra Messages postés 1870 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 24 juillet 2014 342
27 avril 2007 à 18:29
Bonjour,

qu'elles n'émettent pas vers le haut (une demi-sphère)
Il n'y a pas comme un problème ? Elles emmettent vers le bas alors ?

Commence par nous exposer tes réflexions mathématiques qui est le premier problème.

Je débute en programmation en C. Voilà l'énoncé:
Sauf erreur de ma part ce n'est pas un problème de débutant pour apprendre le C...

J'ai une image satellite de dimension quelconque. Cette image est une carte des altitudes du terrain [...] Je vous demande de bien vouloir m'aider, par un code qui ressemble à la question
Il manque un peu des informations.

En tout cas ne t'attends pas à ce que d'autres personnes fassent le travail à ta place. Tu nous as rien montré de ce que tu avais fait ou entrepris de faire.
0
qosmio Messages postés 13 Date d'inscription vendredi 27 avril 2007 Statut Membre Dernière intervention 10 janvier 2011
4 juin 2007 à 14:26
j'ai effectué cet algorithme, mais comment le transformer en C, soutout cette partie:

p = pourcentage de couverture
choisir une antenne au hasard
sauvegarder sa position
modifier sa position au hasard
pour tous les points de la map regarder si il est assez pres d'une antenne
(distance euclidienne entre le point et une antenne < R)
p2 = nouveau pourcentage de couverture
si (p2 <= p) annuler le changement
}
}


int main() {
creer_map();
optimiser_positions_antennes();
afficher_position_antennes();
}


Le début de mon algorithme

#define X 100 /* longueur de la carte satellite */
#define Y 100 /* largeur de la carte satellite */
#define N 20 /* nombre d'antennes */
#define R 15 /*rayon d'action d'une antenne */
#define H 35 /* hauteur maximale */
#define MAX_ITERATION 10000 /* nombre maximum d'essai */

int map[X][Y];
int antenne[N][2];

void creer_map() {
int i, int j;
for (i = 0, i<X; i++)
for (j = 0, j<Y; j++)
map[X][Y] = rand()%H;
}
void optimiser_antennes() {
pour toutes les N antennes :
antenne[N][0] = rand()%X, antenne[N][1] = rand()%X
int i;
for (i = 0; i < MAX_ITERATION; i++) {
p = pourcentage de couverture
choisir une antenne au hasard
sauvegarder sa position
modifier sa position au hasard
pour tous les points de la map regarder si il est assez pres d'une antenne
(distance euclidienne entre le point et une antenne < R)
p2 = nouveau pourcentage de couverture
si (p2 <= p) annuler le changement
}
}


int main() {
creer_map();
optimiser_positions_antennes();
afficher_position_antennes();
}
0
qosmio Messages postés 13 Date d'inscription vendredi 27 avril 2007 Statut Membre Dernière intervention 10 janvier 2011
4 juin 2007 à 14:27
J'écris cet algorithme, mais comment le transformer en c, surtout cette p = pourcentage de couverture
choisir une antenne au hasard
sauvegarder sa position
modifier sa position au hasard
pour tous les points de la map regarder si il est assez pres d'une antenne
(distance euclidienne entre le point et une antenne < R)
p2 = nouveau pourcentage de couverture
si (p2 <= p) annuler le changement.

Pouvez-vous m'aider? car je dois le rendre le 10 juin.


#define X 100 /* longueur de la carte satellite */
#define Y 100 /* largeur de la carte satellite */
#define N 20 /* nombre d'antennes */
#define R 15 /*rayon d'action d'une antenne */
#define H 35 /* hauteur maximale */
#define MAX_ITERATION 10000 /* nombre maximum d'essai */

int map[X][Y];
int antenne[N][2];

void creer_map() {
int i, int j;
for (i = 0, i<X; i++)
for (j = 0, j<Y; j++)
map[X][Y] = rand()%H;
}
void optimiser_antennes() {
pour toutes les N antennes :
antenne[N][0] = rand()%X, antenne[N][1] = rand()%X
int i;
for (i = 0; i < MAX_ITERATION; i++) {
p = pourcentage de couverture
choisir une antenne au hasard
sauvegarder sa position
modifier sa position au hasard
pour tous les points de la map regarder si il est assez pres d'une antenne
(distance euclidienne entre le point et une antenne < R)
p2 = nouveau pourcentage de couverture
si (p2 <= p) annuler le changement
}
}


int main() {
creer_map();
optimiser_positions_antennes();
afficher_position_antennes();
}
0
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 7 812
27 avril 2007 à 18:40
Avant de programmer il faudrait réflechir à comment tu vas modéliser tout ça.
- quelles sont les variables ? position et orientation des antennes ? est-ce tu as une liste de sites candidats ? est-ce que les antennes sont homogène (même rayon) ?
- comment caractérises-tu une zone couverte ?
- est-ce que la notion de 3D est importante (est ce que le relief peut bloquer les ondes ?)
- qu'est-ce que tu optimises ? le nombre d'antenne (ie le cout) à placer ou la zone de couverture ?
- y a t'il des notions de robustesse, par exemple "les bordures de zone sont couvertes par deux antennes" (handover).

Je t'invite à faire des recherches sur google pour voir un peu ce qui se fait dans la littérature...

Quand tu auras réflechi à ton modèle, réflechis à comment tu vas le résoudre
- méthode exacte (avec CPLEX ou COIN par exemple)
- métaheuristiques
Je te préviens tout de suite que c'est loin d'être facile à programmer en C.
0
qosmio Messages postés 13 Date d'inscription vendredi 27 avril 2007 Statut Membre Dernière intervention 10 janvier 2011
5 juin 2007 à 23:12
Bonsoir,
J'ai effectué ce programme mais il m'affiche seulement les altitudes, et non pas la position des antennes sur les altitudes maximales. Comment faire pour afficher les antennes sur les pics?


#include <stdio.h>
#include <stdlib.h>

#define X 513 /* longueur de la carte satellite */
#define Y 513 /* largeur de la carte satellite */
#define N 20 /* nombre d'antennes */
#define R 15 /* rayon d'action d'une antenne */
#define H 40 /* hauteur maximale */
#define MAX_ITERATION 10000 /* nombre maximum d'essai */

int map[X][Y];
int antenne[N][2];

void creer_map() {
int i,j;
for (i = 0; i<X; i++)
for (j = 0; j<Y; j++)
map[i][j] = rand()%H;

}

void optimiser_positions_antennes() {
int a;
int b;
int i;
int p = 60; /* pourcentage de couverture */
int pos_X;
int pos_Y;
int sauv_pos_X;
int DX,DY;
int n;
int m;
int l;
int Nbr_pt_prs_antenne;
int dist_pt_antenne;
int p2 = 90; /* nouveau pourcentage de couverture */

for (a=0; a<=N; a++)
for (b=0; b<=N; b++)
antenne[a][b] = rand()%X;
antenne[a][b] = rand()%Y;


for (i = 0; i < MAX_ITERATION; i++) {

pos_X=rand()%X;
pos_Y=rand()%Y;

sauv_pos_X= pos_X;

DX=(rand()%6)-3;
DY=(rand()%6)-3;

Nbr_pt_prs_antenne= 0;
}

for (n = 0; n<X; n++)
for (m = 0; m<Y; m++)
for (l =0; l<antenne[N][0]; l++){
if (dist_pt_antenne<R){
Nbr_pt_prs_antenne++;

}
}


if (p2 >=p){
p=p2;
}
else pos_X= pos_X=rand()%X;{
pos_Y=rand()%Y;
}

}

void afficher_positions_antennes(){

int i;
int j;



for (i = 0; i<X; i++){
for (j =0; j<X; j++){
printf(" %d", map[i][j]);
}
printf("\n");
}

if (H>=30 && H<=40){
printf("atn %d",antenne[i][j]);
}
else printf("%d", map[i][j]);

}


int main() {
creer_map();
optimiser_positions_antennes();
afficher_positions_antennes();
return 1;
}
0