Il faut gérer les bords comme des particules fixes chargées => les particules sont repoussées par les bords.
Version imprimable
J'ai codé le truc, mais bon j'ai du faire une erreur dans la force qu'exerce le bord, puisque la répartition des villes n'est pas symétriques...
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 if(nouvelX>1/2) //nouvelX : nouvelle position de selon l'axe des x, x est l'ancienne position { if(x==1) { nouvelX = nouvelX-r.nextDouble()*100000*pasTemporel*pasTemporel; //Force exercée si l'on était déja sur le bord } else { nouvelX = nouvelX - pasTemporel*pasTemporel*forceBord/Math.pow((1-x),2); } } else if (nouvelX<1/2) { if(x==0) { nouvelX = nouvelX+r.nextDouble()*100000*pasTemporel*pasTemporel; } else { nouvelX =nouvelX+pasTemporel*pasTemporel*forceBord/Math.pow(x,2); } } if(nouvelY>1/2) { if(y==1) { nouvelY = nouvelY-r.nextDouble()*100000*pasTemporel*pasTemporel; } else { nouvelY = nouvelY-pasTemporel*pasTemporel*forceBord/Math.pow((1-y),2); } } else if (nouvelY<1/2) { if(y==0) { nouvelY = nouvelY+r.nextDouble()*100000*pasTemporel*pasTemporel; } else { nouvelY = nouvelY+ pasTemporel*pasTemporel*forceBord/Math.pow(y,2); } }
Le problème à été résolut grâce à l'aide d'un bienfaiteur anonyme! Il faut en fait remplacer les tests comme
par :Code:
1
2 if(x==1)
où tol est un paramètre choisit de façon adaptée au problème.Code:
1
2 if(1-x<tol)
Cette boucle est pourtant capitale ! Elle permet de faire une moyenne statistique sur la distance entre les villes. Donc elle bien utilisée !Citation:
Je ne vois pas trop l'intérêt de faire la boucle MC : pour qu'elle soit utile, il faudrait l'utiliser quelque part, par exemple en faisant la moyenne des distances moyennes observées...
Pour le reste des commentaires, j'ai l'impression que tu n'as pas très bien compris l'algorithme (?). Le but est bien de calculer la distance moyenne entre villes d'un voyageur qui les visites. Son choix est donc important et il a intérêt à choisir la ville la plus proche à chaque fois.
Pour le modèle physique, c'est intéressant mais cela ne permet "que" de distribuer uniformément les villes dans le pays ( au prix d'une résolution CPU-consuming j'ai l'impression).
Effectivement, j'avais lu trop vite... J'étais un peu trop dans mon truc :aie:
Mon algo est en O(n²) , même si à mon avis le facteur devant le n² est beaucoup plus grand pour le mien :mrgreen:
Sinon, comme pour le modèle on a besoin des distances entre villes, les fournir ne demande pas trop d'effort...