예제 #1
0
        }// Methode pour séléection de l'objet dans la listBox

        private void btnAjoutObj_Click(object sender, EventArgs e)
        {
            compteurObjMan++;
            Objet.Orientation orientation;
            if (cbOrientationObj.SelectedItem == "Nord")
            {
                orientation = Objet.Orientation.Nord;
            }
            else
            {
                orientation = Objet.Orientation.Sud;
            }
            Objet o = new Objet(int.Parse(textBoxXObj.Text), int.Parse(textBoxYObj.Text), orientation, int.Parse(tbHauteur.Text));


            listBoxObj.Items.Add(o);
            lbCountObj.Text = (compteurObjMan + 1).ToString();
            textBoxXObj.Clear();
            textBoxYObj.Clear();
            tbHauteur.Clear();
            cbOrientationObj.Items.Clear();
            tabObjet[compteurObjMan - 1] = o;
            if (compteurObjMan == Convert.ToInt32(numericUpDown2.Value))
            {
                btn_calcul_temps.Enabled    = true;
                btn_calcul_distance.Enabled = true;
                btnAjoutObj.Enabled         = false;
                textBoxXObj.Enabled         = false;
                textBoxYObj.Enabled         = false;
                cbOrientationObj.Enabled    = false;
                tbHauteur.Enabled           = false;
                lbCountObj.Text             = (compteurObjMan).ToString();
            }
        } // bouton ajout objet manuel
예제 #2
0
        }// Bouton pour pouvoir faire une nouvelle simulation

        private void listBoxObj_SelectedIndexChanged(object sender, EventArgs e)
        {
            if (listBoxObj.SelectedItem != null)
            {
                tbObjChois.Text     = listBoxObj.SelectedItem.ToString();
                objChoisi           = (Objet)listBoxObj.SelectedItem;
                label_error.Visible = false;
            }
        }// Methode pour séléection de l'objet dans la listBox
예제 #3
0
        public override void CalculeHCost(Objet objet)
        {
            //int distX;
            //int distY;
            //double distF;
            //distX = Math.Abs(this.posX - objet.posX);
            //distY = Math.Abs(this.posY - objet.posY);

            //distF = Math.Sqrt(Math.Pow(distX, 2) + Math.Pow(distY, 2));
            //HCost = distF;
            //SetEstimation(distF);
        }
예제 #4
0
        public override bool EndState(Objet objet)
        {
            int positionFinaleY;

            Objet.Orientation orientation = objet.orientation;
            if (orientation == Objet.Orientation.Nord)
            {
                positionFinaleY = objet.posY - 1;
            }
            else
            {
                positionFinaleY = objet.posY + 1;
            }

            if (this.posX == objet.posX && this.posY == positionFinaleY)
            {
                return(true);
            }
            else
            {
                return(false);
            }
        }
예제 #5
0
        private void button_placement_alea_obj_Click(object sender, EventArgs e) // placement aléatoire des objets
        {
            tbObjChois.Clear();
            listBoxObj.Items.Clear();
            btn_calcul_temps.Enabled    = true;
            btn_calcul_distance.Enabled = true;
            Random rd  = new Random();
            int    NBO = Convert.ToInt32(numericUpDown2.Value);

            tabObjet = new Objet[NBO];

            for (int i = 0; i < tabObjet.Length; i++)
            {
                int posX        = rd.Next(1, 25);
                int posY        = rd.Next(1, 25);
                int orientation = rd.Next(0, 2);
                int hauteur     = rd.Next(1, 6);
                while (GenericNode.tabEntrepot[posX - 1, posY - 1] != -1) //on utilise le tab du Node distance !
                {
                    posX = rd.Next(1, 25);
                    posY = rd.Next(1, 25);
                }
                if (orientation == 0)
                {
                    tabObjet[i] = new Objet(posX, posY, Objet.Orientation.Nord, hauteur);
                }
                else
                {
                    tabObjet[i] = new Objet(posX, posY, Objet.Orientation.Sud, hauteur);
                }
            }

            foreach (Objet o in tabObjet)
            {
                listBoxObj.Items.Add(o);
            }
        }
예제 #6
0
 public Graph(Objet obj)
 {
     objet = obj;
 }
예제 #7
0
 public abstract void CalculeHCost(Objet objet);
예제 #8
0
 public abstract bool EndState(Objet obj);
예제 #9
0
        private void btn_valider_Click(object sender, EventArgs e) // Methode pour bouton Calcul
        {
            if (objChoisi != null & charChoisi != null)
            {
                objet = new Objet(objChoisi.posX - 1, objChoisi.posY - 1, objChoisi.orientation, objChoisi.hauteur);//On définit l'objet avec les valeurs récupérés dans l'éditText (objet choisi)
                g     = new Graph(objet);

                if (sender.Equals(btn_calcul_distance))                                     //Si on clique sur le bouton calcul distance
                {
                    Ninit     = new NodeDistance(charChoisi.posX - 1, charChoisi.posY - 1); // On définit la position du chariot choisi comme la position Initiale d'un Noeud distance
                    nodeTemps = false;
                }
                else if (sender.Equals(btn_calcul_temps))
                {
                    Ninit     = new NodeTemps(charChoisi.posX - 1, charChoisi.posY - 1, new Point(0, 0));
                    nodeTemps = true;
                }

                Lres = g.RechercheSolutionAEtoile(Ninit); //On calcule la liste des noeuds répondant à la distance la plus courte ou au temps le plus court

                if (nodeTemps)                            // Nobj sera un nodeTemps, on va chercher à avoir le cout en temps
                {
                    // Trajet vers la zone finale
                    Nobj = (NodeTemps)Lres[Lres.Count - 1]; //Noeud sur lequel est le chariot lorsqu'il prend l'objet
                }
                else//Nobj sera un nodeDistance, on va chercher à avoir le cout en distance
                {
                    Nobj = (NodeDistance)Lres[Lres.Count - 1]; //Noeud sur lequel est le chariot lorsqu'il prend l'objet
                }

                List <Objet> zoneFinale = new List <Objet>(tabEntrepot.GetLength(0));
                for (int k = 0; k < tabEntrepot.GetLength(0) - 1; k++)
                {
                    Objet o = new Objet(0, k - 1, Objet.Orientation.Sud, 0); //On imagine un objet correspondant à la ligne 1.
                    zoneFinale.Add(o);                                       //On ajoute à la liste des zones finales.
                }

                foreach (Objet o in zoneFinale)
                {
                    Graph g = new Graph(o);
                    TrajectoireF = g.RechercheSolutionAEtoile(Nobj); //On stocke la liste de noeuds correspondant à chaque chemin pour aller vers une des zones finales et on le stocke dans la liste
                    EnsembleTrajectoiresF.Add(TrajectoireF);         //On ajoute cette trajectoire à l'ensemble des trajectoires
                }

                bestTrajectoire = EnsembleTrajectoiresF[0];
                double cout = 1000000;
                foreach (List <GenericNode> l in EnsembleTrajectoiresF)
                {
                    double c = l[l.Count - 1].Cout_Total;// Pour chaque liste de chemins dans l'ensemble des trajectoires, on récupère le cout total.
                    if (c < cout)
                    {
                        cout            = c;
                        bestTrajectoire = l;//On garde la trajectoire où le cout est le plus faible
                    }
                }

                if (nodeTemps)
                {
                    lbTimeTot.Text = CalculTempsTot().ToString() + " secondes";// On appelle la méthode pour calculer le temps et on l'affiche dans un label.
                }


                if (Lres.Count > 1)
                {
                    Lres.RemoveAt(0); //On supprime le premier noeud correspondant à la position du chariot
                }
                reinitialiserView();  // On reinitialise la View
                setViewEntrepot();    // On dessine la grille
            }

            else
            {
                label_error.Visible = true;
            }
        }
예제 #10
0
 public Trajectoire(List <GenericNode> noeuds, Objet objet)
 {
     this.noeuds = noeuds;
     this.objet  = objet;
 }