Recherche de la meilleure valeur

Réponses à toutes vos questions après le Bac (Fac, Prépa, etc.)
frvillai
Messages: 2
Enregistré le: 05 Fév 2009, 12:21

Recherche de la meilleure valeur

par frvillai » 05 Fév 2009, 12:27

Bonjour,

Voici mon probléme : J'ai 202kg de matière à fabriquer en ayant à ma disposition 2 capacités de batteur. Un premier à 60.76kg et un second à 40.51kg. Comment définir de façon automatique la meilleure association possible en fonction du besoin en kg qui varie chaque jour et pour minimiser les pertes. (les 202kg changent tout le temps, mais pas mes capacités de batteur).
Exemple, plutot faire 2 grand batteurs et 2 petits plutot que 3 grands et 1 petit.

Merci d'avance.



Argentoratum
Membre Relatif
Messages: 231
Enregistré le: 12 Sep 2007, 22:35

par Argentoratum » 05 Fév 2009, 12:55

Dans ton cours, est-ce que tu as vu l'étude des flots ou la recherche opérationnelle ?

Avatar de l’utilisateur
fatal_error
Membre Légendaire
Messages: 6610
Enregistré le: 22 Nov 2007, 12:00

par fatal_error » 05 Fév 2009, 14:07

Salut,

sinon, on peut s'en sortir a l'arrache.
soit x_1 le nombre de batteur type 1
soit x_2 le nombre de batteur type 2
soit w_1 le poids du batteur type 1 (40kg)
soit w_2 le poids du batteur type 2

On part de l'hypothèse que si on a
avec S la somme qu'on cherche, alors

cad si on ajoute des pieces en plus ca donne pas une solution (puisque plus de perte).

On cherche le nombre de pieces x_1 toute seule qui realisent une solution.
Idem pour x_2.
Apres, on regarde ce qu'il se passe si on enleve une piece a x_1, la somme est-elle valide ( supérieure a S?), puis on recommence.

En pseudo code, ca peut donner qqch comme ca :
Code: Tout sélectionner
TrouverSolution(reel w_1,reel w_2,reel Somme) : (entier x_1,entier x_2)
debut
   x_1 := Somme/w_1 + 1 //moyennant le modulo pour faire au plus juste
   x_2 := Somme/w_2 +1
  retourner  (x_1,x_2)
fin


Code: Tout sélectionner
TrouverOptimale(entier x_1, entier x_2, reel w_1,reel w_2,reel SommeCourante,reel SommeTotale)
debut
  n_1: entier//nombre de Bateur 1Courant
  n_2: entier //nombre de Bateur 2Courant
  v_1:=x_1 : entier  //la solution de base
  v_2:=x_2 : entier 
  somme:reel // une variable temporaire
  pour i:=1 a x_1 faire
    n_1:=(x_1-i);
    si (n_1w_1 + x_2w_2 < SommeTotale) //si on est sous la sommeTotale inutile denlever a n_2
        alors Sortir de la boucle
    finsi
   pour j:= 1 a x_2 faire
     n_2:=x_2-j
     somme:=n_1w_1+n_2w_2
     si (somme <SommeTotale) //si on est dessous, inutile denlever a n_2
        alors Sortir de la boucle
     sinon
        si somme<SommeCourante //alors on a une meilleure solution
           sommeCourante:=somme
           v_1:=n_1
           v_2:=n_2
        finsi
     finsi
  Afficher(v_1,v_2)
fin
la vie est une fête :)

frvillai
Messages: 2
Enregistré le: 05 Fév 2009, 12:21

par frvillai » 05 Fév 2009, 14:23

Je n'ai pas abordé quelque cours que ce soit dernièrement car cela fait 16 ans que je travaille et c'est une problématique que j'ai actuellement.
Je dois préciser que je cherche une solution à intégrer dans un tableur Excel, le temps de développer le programme info dans un avenir proche.
Merci encore

Avatar de l’utilisateur
fatal_error
Membre Légendaire
Messages: 6610
Enregistré le: 22 Nov 2007, 12:00

par fatal_error » 05 Fév 2009, 14:52

re,

sur la premiere colonne, tu places tous les couts en x_1w_1 cad :
A2 : 1*w_1
A3:2*w_1
A_{n+1}:n*w_1

Vu que c'est graphique, tu t'arretes quand nw_1 > S
Sur la premiere ligne, les couts en x_2
1_B:1w_2
1_C:2w_2
1_{Z...}:nw_2
Idem pour l'arret

Ca te definit une matrice ou tu va pouvoir tester toutes les possibilités :
Maintenant, il suffit de la remplir :
[x]n est la case dans la colonne [x] et de ligne n :
[B]2=A_2+1_B
[B]3=A_3+ 1_B
...
[B]n=A_n+1_B

Et de maniere generale,
[x]n=A_n+1_[x]

La tu as ta matrice de cout.
Ensuite tu cherches le minimum, tu peux par exemple soustraire le cout initial dans chacune des cases :
[x]n=A_n+1_[x] - $Z98787
ou $Z98787 est une case en dehors de la matrice ou tu peux donner une valeur qui te fais plaisir.

Il reste plus qu'a prendre l'ecart.
par exemple :
pour B_[n] (qqsoit l'indice n, on regarde dans la colonne B)
on peut avoir en B_[n+1]=MIN(B_2:B_n) (a condition que la case soit positive)
la condition se realise avec un SI(), mais j'en connnais pas la syntaxe.
On peut reiterer ca pour toutes les colonnes.

A la fin tu as a la ligne {n+1}_[x] le minimum pour chaque colonne colonne.
Il te reste plus qu'a recupérer le minimum parmi chacune de ses colonnes.
Pis apres tu peux remonter au couple
la vie est une fête :)

 

Retourner vers ✯✎ Supérieur

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 58 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite