Trouver une combinaison

Fermé
parousky Messages postés 325 Date d'inscription mardi 11 septembre 2012 Statut Membre Dernière intervention 20 février 2022 - 10 juil. 2014 à 20:29
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 - 15 juil. 2014 à 07:37
Bonjour, dans un problème de mécanique automobile, je dois équilibrer des pièces métalliques en ajoutant quatre poids. La position de ces quatre poids est imposée par la géométrie de la pièce. Pour que le centre de gravité soit proche du centre de la pièce, il existe plusieurs combinaisons de poids possibles. J'aimerais créer un programme java qui permette d'obtenir une combinaison parmi tant d'autres, mais je ne sais pas du tout comment faire ...
Si je n'ai pas été trop vague, est-ce que quelqu'un peut m'aider ?

3 réponses

ProvencaleLeGaulois Messages postés 48 Date d'inscription lundi 2 juin 2014 Statut Membre Dernière intervention 18 septembre 2014 6
11 juil. 2014 à 11:41
Bonjour parousky,

Je pense que le plus gros travail qui est à faire sur ce sujet se situe au niveau mathématique.
D'après ce que tu dis j'ai l'impression qu'il te faudrait avoir un équation paramétrée qui te permette de modifier les 4 valeurs et de voir le résultat en temps réel.

Est-ce que tu peux modéliser ça sur un fichier Excel ?
Si oui, penses-tu que le programme en java apportera une valeur ajoutée ?

A+
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
11 juil. 2014 à 18:48
Bonjour,

Il y a pas mal de données utiles qui nous manquent pour comprendre le problème.

Déjà je ne vois pas le lien avec la mécanique automobile, est-ce important ici ?

Ensuite quelles sont tes contraintes physiques ? Est-ce que tu es en 2D (toutes les pièces sont posées au sol) ou en 3D (les pièces peuvent être les unes sur les autres) ? Tu as un espace discret ou continu (un nombre fini ou infini de position) ?

Après on s'oriente soit vers de la recherche opérationnelle (mathématiques) soit vers de l'intelligence artificielle (combinatoire), sauf si vraiment le problème se simplifie bien et dans ce cas on boucle en force brute...
0
parousky Messages postés 325 Date d'inscription mardi 11 septembre 2012 Statut Membre Dernière intervention 20 février 2022 6
14 juil. 2014 à 22:43
Bonjour, c'est vrai que cela manque pas mal de précision ! Alors en étudiant un peu plus mon problème, je sais que chaque poids doit être supérieur à 0.25. Ensuite, c'est à moi de préciser la limite supérieure. Etant donné que je peux contrôler la précision de la masse de chaque pièce au centième près, je voudrais tester toutes les combinaisons de quatre double compris entre 0.25 et ma limite/4. Alors j'ai écris ce code là :


for(int i=0;i<Max+1;i++)
{
S4 = 0.25 + 0.01*i;

for(int j=0;j<Max+1;j++)
{
S3 = 0.25+0.01*j;

for(int k=0;k<Max+1;k++)
{
S2 = 0.25 + 0.01*k;

for(int l=0; l<Max+1;l++)
{
S1 = 0.25 + 0.01*l;

//Ensuite je teste si le centre de gravité est bien dans la pièce, ce qui se traduit par :
if(G[0]>=0 && G[1]>=0 && G[2]>=0 && G[3]>=0)
{

System.out.println(""+S1+" sur 1, "+S2+" sur 2, "+S3+" sur 3, "+S4+" sur 4");

}

}
}
}
}

Seulement ça ne teste pas toutes mes combinaisons... Ais-je mal codé une partie ?
Merci d'avance pour vos réponses !
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
14 juil. 2014 à 22:54
Bonsoir,

Si les 4 poids sont dans la pièce le centre de gravité le sera forcément aussi, c'est mathématiques. De toute façon G ne dépends pas de S1, S2, S3, S4...
0
parousky Messages postés 325 Date d'inscription mardi 11 septembre 2012 Statut Membre Dernière intervention 20 février 2022 6 > KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024
14 juil. 2014 à 23:44
Soit, pour ce cas là il n'y a pas de problème, mais je serai amené plus tard à effectuer ces mêmes combinaisons... En gros, ma seule question est : comment calculer toutes les combinaisons possibles au centième près comme précédemment ?
0
KX Messages postés 16753 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 25 novembre 2024 3 019
15 juil. 2014 à 07:37
Tu peux regarder ce code Énumérer un ensemble comme si on avait des boucles imbriquées
Cela reviendra finalement au même que tes 4 boucles mais en un peu plus simple.

Je compte en centièmes pour ne manipuler que des entiers :

for (long[] s : new Enumeration(4, 25, MAX, 1, false))
    System.out.printf("%d sur 1, %d sur 2, %d sur 3, %d sur 4\n", s[0], s[1], s[2], s[3]);
0