Algorithme vorace et minimisation des coûts
Bonjour,
j'ai le problème suivant à résoudre;
Afin de commercialiser ses différents produits, une entreprise a besoin de n permis. A cause de certaines lois, elle ne peut obtenir plus d'un permis par mois. De plus, le coût des permis augmente
chaque mois. En effet, bien que le coût de chacun des permis soit de $100.00 actuellement, le coût du permis j (1 <= j <= n) augmente d'un facteur rj > 1 chaque mois (les rj sont des paramètres).
Autrement dit, acheter le permis 4 durant le premier mois coûte 100r4 alors que son acquisition durant le sixième mois, par exemple, coûterait 100(r4)^6 . Enfin, on suppose que ri ?=(différent) rj pour i ?=(différent) j.
La question est donc de savoir, pour un ensemble de rj donné (1 <= j <= n), dans quel ordre acheter les n permis afin de minimiser le coût total d'acquisition.
1. Elaborez un algorithme polynomial, utilisant l'approche vorace, permettant de résoudre ce problème. Analysez votre algorithme en pire cas.
2. Prouvez que votre algorithme retourne bien la solution optimale.
3. Illustrez votre algorithme sur l'instance suivante : n = 3, r1 = 3, r2 = 4, r3 = 2.
J'ai pu écrire seulement l'algorithme suivant, mais ne sait plus quoi écrire d'autre:
Algorithme minCout()
TantQue j<n (tant que tous les permis ne sont pas achetés)
j=prochain permis acheté
Si le permis du mois courant est disponible alors
acheter
Fsi
FTantQue
Pouvez vous m'aiguiller s'il vous plaît? Merci.
algo vorace,choix min couttotal à etape i
bonjour
L'idee de base est minmiser le cout total en fin de periode.alors une implementation possible est :
variables de travail :
-N permis au total
-permis(J) J à N
-coutInitialPermis(J)
-R(J)*M Loi d'accroissement du cout en fonction du temps ou M est le ieme Mois.
-coutPermisMois(J,M)=coutInitialPermis(J)*R(J)*M, M annee d'acquisition
-dispPermis(J,M)=(0 si indisponible,1 disponible) indiquant à un mois donnee si le permis -J- est disponible au mois -M-
-AcquisPermis(J)=(1 deja acquis,0 non acquis) memorise les permis deja acquis.
Initialisation Algorithme
----------------------
initialise les permis:
BoucleInitPermis
(faire J=1 à N)
AcquisPermis(J)=1
coutInitialPermis(J)
FinBoucleInitPermis
coutTotal=0
demarrrage algo:
----------------
BoucleMois
( faire K=1 à M)
temp=0
traqueChangeTemp=0
BouclePermis
(faire J=1 à N)
SI dispPermis(J,M)=1 ET AcquisPermis(J)=0 Alors
temp=Max[temp,coutPermisMois(J,M)]
FinSi
SI traqueChangeTemp<>temp Alors
AcquisPermis(J)=1
traqueChangeTemp=temp
FinSi
FinbouclePermis
coutTotal= coutTotal+temp
FinBoucleMois
On exemine à chaque -epoque(mois) -tous les permis pour selectionner parmi les Disponibles dans ce mois en ecartant les deja Acquis le -max coutTotal Pondere- en laissant au Plus Tard l'acquisition des permis dont le cout ponderee sera le plus faible(puisque l'on choisit au Plus Tot les permis dont le cout pondere est le plus grand) .
Evidemment ce raisonnment suppose que le cout pondere d'un permis croit avec le temps.
Dans le cas contraire il faut prendre Min .
bon code...
-