}// 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
}// 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
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); }
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); } }
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); } }
public Graph(Objet obj) { objet = obj; }
public abstract void CalculeHCost(Objet objet);
public abstract bool EndState(Objet obj);
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; } }
public Trajectoire(List <GenericNode> noeuds, Objet objet) { this.noeuds = noeuds; this.objet = objet; }