public static List <Trajet> GenererListeTrajet(int nombreDeTrajetAGenerer)
        {
            listeTrajet = new List <Trajet>();
            for (int i = 0; i < nombreDeTrajetAGenerer; i++)
            {
                Random rand   = new Random((int)DateTime.Now.Ticks);
                Trajet trajet = GenererUnTrajet(rand);

                bool isNotInList = true;
                foreach (var x in listeTrajet)
                {
                    if (trajet.ToString() == x.ToString())
                    {
                        isNotInList = false;
                    }
                }
                if (isNotInList)
                {
                    listeTrajet.Add(trajet);
                }
                else
                {
                    i--;
                }
            }
            return(listeTrajet);
        }
        static Trajet CalculDUnTrajet(Trajet trajet, List <Ville> listeVille)
        {
            for (int i = 1; i < 15; i++)
            {
                var ville1 = listeVille[trajet.listeDesVilles[i] - 1];
                var ville2 = listeVille[trajet.listeDesVilles[i - 1] - 1];

                trajet.distance += GetDistance(ville1.lng, ville1.lan, ville2.lng, ville2.lan);
            }
            return(trajet);
        }
Пример #3
0
        static void Main(string[] args)
        {
            listeDesVilles = JsonReader.GetVilles();                                      //Lire le Json et récupérer les données dans "listeDesVilles"

            listeTrajet = GenererTrajets.GenererListeTrajet(nombreDeGenerationAleatoire); //Génère la liste des trajets aléatoirement

            listeTrajet = CalculateurDeDistance.Calcul(listeTrajet, listeDesVilles);      //Calcule la distance de chaque trajet

            for (int i = 0; i < nombreBoucle; i++)
            {
                listeTrajet = listeTrajet.OrderBy(o => o.distance).ToList(); //Trie les trajets en fonction de leur distance

                trajetGagnant = listeTrajet[0];

                if (trajetGagnant.listeDesVilles.Count != 15)
                {
                    Console.WriteLine("baise");
                }

                Console.WriteLine(listeTrajet[0].distance); // Ecrit dans la console le trajet trouvé le plus court trouvé

                //listeTrajet.RemoveRange(nombreDeGenerationAleatoire-1, listeTrajet.Count - nombreDeGenerationAleatoire);

                nouvelleListeTrajet = MelangeurDeDonnee.Decouper(listeTrajet);

                nouvelleListeTrajet = MelangeurDeDonnee.Melanger(nouvelleListeTrajet);                                //Mélange les données entre elles pour en avoir de nouvelles

                nouvelleListeTrajet = MelangeurDeDonnee.Muter(nouvelleListeTrajet);                                   //Fait muter les données

                nouvelleListeTrajet.AddRange(GenererTrajets.GenererListeTrajet(nombreDeGenerationAleatoire * 3 / 4)); //Génère la liste des trajets aléatoirement et l'ajoute à la liste mélangée

                nouvelleListeTrajet = CalculateurDeDistance.Calcul(nouvelleListeTrajet, listeDesVilles);

                listeTrajet.AddRange(nouvelleListeTrajet);
            }
            listeTrajet = listeTrajet.OrderBy(o => o.distance).ToList();

            trajetGagnant.AfficherUnTrajetComplet();
            Console.ReadKey();
        }
        }                                                                                                              // A ameliorer : Ne pas le générer a la main mais avec la liste des villes.

        private static Trajet GenererUnTrajet(Random rand)
        {
            Trajet trajet = new Trajet();

            List <int> randList = ListeDe1a15();

            while (trajet.listeDesVilles.Count < 15)
            {
                if (randList.Count != 1)
                {
                    int idVille = randList[rand.Next(randList.Count)];

                    randList.Remove(idVille);
                    trajet.listeDesVilles.Add(idVille);
                }
                else
                {
                    trajet.listeDesVilles.Add(randList[0]);
                }
            }
            return(trajet);
        }
        static public List <Trajet> Melanger(List <Trajet> listeTrajets)
        {
            List <Trajet> anciensTrajets = new List <Trajet>();

            anciensTrajets = listeTrajets;
            List <Trajet> nouvelleListe = new List <Trajet>();
            int           i             = 0;
            int           y             = Program.nombreDeGenerationAleatoire / 4 - 1;
            List <int>    nouveauTrajet = new List <int>();

            while (i < Program.nombreDeGenerationAleatoire / 8)
            {
                Trajet trajet1 = anciensTrajets[i++];
                Trajet trajet2 = anciensTrajets[y--];


                for (int x = 0; x < 8; x++) // Récupère les 8 premieres villes du premier trajet
                {
                    nouveauTrajet.Add(trajet1.listeDesVilles[x]);
                }
                foreach (int x in trajet2.listeDesVilles) // Recupère les villes qu'il manque dans le premier trajet dans l'ordre de leur apparition dans le 2ème
                {
                    if (!nouveauTrajet.Contains(x))
                    {
                        nouveauTrajet.Add(x);
                    }
                }
                Trajet trajet = new Trajet {
                    listeDesVilles = nouveauTrajet
                };
                if (trajet.listeDesVilles.Count != 15)
                {
                    Console.WriteLine("bz");
                }
                nouvelleListe.Add(trajet);
            }
            return(nouvelleListe);
        }