Bonjour,
Actuellement, je fais les cours du soir au cnam. J’ai un projet à réaliser sur le recuit simulé avant vendredi 29 Juin. Je sais que cela est très juste.
Ce projet devait être réalisé à deux mais je n’ai plus aucune nouvelle du collègue.
J’ai potassé tous les sites sur le recuit simulé. Je comprends le fonctionnement mais je ne vois pas comment l’adapter à un codage.
Pourriez-vous m’aider s’il vous plaît à faire le codage en JAVA ou C++ ?
Voici l’ennoncé :
N-Télécom, une entreprise nationale de télécommunications, envisage de distribuer l’exploitation de sites (par exemple des villes ou des communes) à des opérateurs privés de téléphonie mobile. Les différents sites sont regroupés en zones géographiques. N-télécom, dans un soucis de répartition, impose des règles d’affectation comme le fait qu’un même opérateur ne puisse pas être présent dans deux zones voisines ou que le nombre d’opérateurs présents dans une même zone géographique soit compris dans une certaine fourchette.
Données :
- le nombre total de sites : NbSites, indexés par i allant de 1 à NbSites
- le nombre d’opérateurs potentiels : NbOp, indexés par j allant de 1 à NbOp
- Cij : prix de l’offre d’exploitation du site i par l’opérateur j
- le nombre de zones géographiques : NbZones, indexées par k allant de 1 à NbZones
- Aik indique si le site i est dans la zone k (Aik=1) ou non (Aik=0)
- Vkk’ indique si les zones k et k’ sont voisines (vkk’=1) ou non (vkk’=0)
- Mink (resp. Maxk) indique le nombre minimal (resp. maximal) d’opérateurs devant être présents dans la zone k
Objectif : Attribuer les sites aux opérateurs en respectant toutes les règles et à moindre coût
1/ Programmer une méthode heuristique basée sur le recuit simulé
2/ En utilisant le langage de modélisation MOSEL et le solveur de programme mathématiques XPRESS-MP, programmer une méthode de résolution exacte.
Ma tâche était de réaliser la deuxième question et mon collègue la première car je ne suis pas programmeur à la base.
Voici le modèle mathématique :
Variables : Xij = 1 si le site i est desservi par l’opérateur j
= 0 sinon
Yjk = 1 si la région k est desservie par l’opérateur j
= 0 sinon
Fonction économique :
Minimiser somme(i=1 à Nbsites) somme(j=1 à Nbop) Cij*Xij
Contraintes :
somme(j=1 à Nbop) Xij=1 avec i= 1,…,Nbsites
MINk <= somme(j=1 à Nbop) <= MAXk avec k= 1,…, Nbzones
Yik+Yik’ <= 1 avec j=1,…,Nbop
avec k et k’=1,…,Nbzones tel que Vkk’=1
somme(i=1 à Nbsites tel que Aik=1) Xij => Yjk avec j=1,…,Nbop
avec k=1,…,Nbzones
Xij <= Yjk avec j=1,…,Nbop
avec k=1,…,Nbzones
avec i= 1,…,Nbsites tel que Aik=1
Je vous remercie beaucoup.
# Découper les difficultés
Posté par mac_is_mac (site web personnel) . Évalué à 2.
- trouver une configuration initiale convenable
- trouver des modifications simples qui permettent de passer d'une configuration admissible à une autre proche de telle manière que le calcul de la différence d'énergie soit simple.
Ici, ce qui rend les choses difficiles, c'est qu'il y a beaucoup de contraintes, à telle point que de manière générale, il n'est pas possible d'affirmer qu'une solution existe toujours.
Du coup, même la première étape n'est pas évidente.
Dans ces cas là, ce qu'on peut faire, c'est, dans une première phase, libérer une contrainte dure (ici par exemple la fourchette) en fabriquant un hamiltonien qui pénalise très fortement les sorties de la fourchette.
Dans cette première phase, le coût total on s'en fout.
Puis, une fois qu'une solution admissible a été trouvée, on peut passer au point deux, cette fois avec le vrai hamiltonien.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.