Пример #1
0
        private int selectedAmountOfCycles; // Zyklen

        //Konstruktor
        public Parameter()
        {
        isSelectedExample = false;
        selectedAlgorithm = typeOfAlgorithm.Density;
        selectedAmountOfTowns = 0;
        selectedSpreadTowns = typeOfSpreadTowns.Random;
        selectedAmountOfAnts = 0;
        selectedSpreadAnts = typeOfSpreadAnts.Random;
        selectedStrength = 0;
        selectedStartPheromone = 0;
        selectedEvaporation = 0;
        selectedWeightPheromone = 0;
        selectedWeightDistance = 0;
        selectedAmountOfCycles = 0;
    }
Пример #2
0
 public void setSelectedSpreadAnts(typeOfSpreadAnts type)
 {
     this.selectedSpreadAnts = type;
 }
Пример #3
0
        public void syncWithNewP()
        {
            /////////////////////////////////////////////////////////////////////////////////////////////////////////////
            //Grundlegendes Beispiel
            isExample = gui.getParameter().getIsSelectedExample();
            /////////////////////////////////////////////////////////////////////////////////////////////////////////////
            //Art des Algorithmus
            if (gui.getParameter().getSelectedAlgorithm() == Parameter.typeOfAlgorithm.Density)
            {
                typeOfAlgorithm = 0;
            }
            else if (gui.getParameter().getSelectedAlgorithm() == Parameter.typeOfAlgorithm.Quantity)
            {
                typeOfAlgorithm = 1;
            }
            else if (gui.getParameter().getSelectedAlgorithm() == Parameter.typeOfAlgorithm.Cycle)
            {
                typeOfAlgorithm = 2;
            }
            /////////////////////////////////////////////////////////////////////////////////////////////////////////////
            //Städte
            bool theSameTowns = false;

            if (n == gui.getParameter().getSelectedAmountOfTowns() && gui.getParameter().getSelectedSpreadTowns() == typeOfSpreadTowns.Custom)
            {
                theSameTowns = true;
            }
            n           = gui.getParameter().getSelectedAmountOfTowns();
            spreadTowns = gui.getParameter().getSelectedSpreadTowns();
            //gui.getComboBoxSpreadTowns().SelectedItem = GUI.SPREADTOWNSCUSTOM;
            if (isExample)
            {
                //Initialisierung der Städte und Ameisen des Beispiels
                towns             = new LinkedList <Town>();
                matrix            = new LinkedList <LinkedList <double[]> >();
                indexTownsCreated = 0;
                this.townCoords   = new double[n][];

                //Verteilung der 5 Städte
                addTown(20, 60, 1);
                towns.ElementAt(0).setName("A (S1)");
                this.townCoords[0] = new double[] { 20, 60 };
                addTown(20, 20, 2);
                towns.ElementAt(1).setName("B (S2)");
                this.townCoords[1] = new double[] { 20, 20 };
                addTown(80, 20, 3);
                towns.ElementAt(2).setName("C (S3)");
                this.townCoords[2] = new double[] { 80, 20 };
                addTown(80, 60, 4);
                towns.ElementAt(3).setName("D (S4)");
                this.townCoords[3] = new double[] { 80, 60 };
                addTown(50, 90, 5);
                towns.ElementAt(4).setName("E (S5)");
                this.townCoords[4] = new double[] { 50, 90 };
            }
            else
            {
                //Städte aktualisieren
                if (!theSameTowns || spreadTowns == typeOfSpreadTowns.Random)
                {
                    bool deadend = true;
                    while (deadend)
                    {
                        //Initialisierung der Städte und Ameisen der frei gewählten Parameter
                        towns             = new LinkedList <Town>();
                        matrix            = new LinkedList <LinkedList <double[]> >();
                        indexTownsCreated = 0;
                        this.townCoords   = new double[n][];
                        int count0 = 0;
                        //Verteilung von n Städten

                        for (int i = 0; i < n; i++)
                        {
                            bool placeFound = false;
                            //prüfen bis Erzeugung neuer Stadt möglich
                            while (!placeFound)
                            {
                                int x = r.Next(0, 100);
                                int y = r.Next(0, 100);
                                if (gui.isInBorder(x, y))
                                {
                                    if (!gui.townSpaceDetection(x, y, null))
                                    {
                                        addTown(x, y, 0);
                                        this.townCoords[i] = new double[] { x, y };
                                        placeFound         = true;
                                    }
                                }
                                count0++;
                                if (count0 > 25000)
                                {
                                    placeFound = true;
                                    i          = n;
                                }
                            }
                        }
                        if (indexTownsCreated == n)
                        {
                            deadend = false;
                        }
                    }
                }
            }
            /////////////////////////////////////////////////////////////////////////////////////////////////////////////
            //Ameisen
            bool theSameAnts = false;

            if (m == gui.getParameter().getSelectedAmountOfAnts() && gui.getParameter().getSelectedSpreadAnts() == typeOfSpreadAnts.Custom)
            {
                theSameAnts = true;
            }
            m = gui.getParameter().getSelectedAmountOfAnts();
            //MessageBox.Show("m: " + m);
            spreadAnts = gui.getParameter().getSelectedSpreadAnts();
            //gui.getComboBoxSpreadAnts().SelectedItem = GUI.SPREADANTSCUSTOM;
            if (isExample)
            {
                //Initialisierung der Ameisen des Beispiels
                indexAntsCreated = 0;
                this.antHomes    = new byte[m];

                //Verteilung der 3 Ameisen
                gui.getListBoxAnts().Items.Clear();
                gui.getListBoxAnts().Items.Add("Informationen deaktivieren");
                gui.getListBoxAnts().Items.Add("Kürzesten Pfad zeigen");
                gui.getListBoxAnts().SelectedIndex = 0;
                Town tempTown = towns.ElementAt(2);
                indexAntsCreated++;
                tempTown.getAntList().AddLast(new Ant(tempTown.getX(), tempTown.getY(), tempTown, gui.getListBoxAnts(), indexAntsCreated));
                this.antHomes[0] = 3;
                tempTown         = towns.ElementAt(0);
                indexAntsCreated++;
                tempTown.getAntList().AddLast(new Ant(tempTown.getX(), tempTown.getY(), tempTown, gui.getListBoxAnts(), indexAntsCreated));
                this.antHomes[1] = 1;
                tempTown         = towns.ElementAt(4);
                indexAntsCreated++;
                tempTown.getAntList().AddLast(new Ant(tempTown.getX(), tempTown.getY(), tempTown, gui.getListBoxAnts(), indexAntsCreated));
                this.antHomes[2] = 5;
            }
            else
            {
                //Ameisen aktualisieren
                if (!theSameTowns || (theSameTowns && !theSameAnts))
                {
                    this.antHomes = new byte[m];
                    for (int i = 0; i < towns.Count; i++)
                    {
                        towns.ElementAt(i).setAntList(new LinkedList <Ant>());
                    }
                    indexAntsCreated = 0;
                    //Verteilung von m Ameisen
                    gui.getListBoxAnts().Items.Clear();
                    gui.getListBoxAnts().Items.Add("Informationen deaktivieren");
                    gui.getListBoxAnts().Items.Add("Kürzesten Pfad zeigen");
                    gui.getListBoxAnts().SelectedIndex = 0;
                    if (towns.Count > 0)
                    {
                        byte countTowns = 1;
                        if (spreadAnts == typeOfSpreadAnts.Even)
                        {
                            for (int i = 0; i < m; i++)
                            {
                                indexAntsCreated++;
                                Town tempTown = towns.ElementAt(countTowns - 1);
                                tempTown.getAntList().AddLast(new Ant(tempTown.getX(), tempTown.getY(), tempTown, gui.getListBoxAnts(), indexAntsCreated));
                                this.antHomes[i] = countTowns;
                                countTowns++;
                                if (countTowns > n)
                                {
                                    countTowns = 1;
                                }
                            }
                        }
                        else if (spreadAnts == typeOfSpreadAnts.Random)
                        {
                            for (int i = 0; i < m; i++)
                            {
                                indexAntsCreated++;
                                int  nextRandomInt = r.Next(0, n);
                                Town tempTown      = towns.ElementAt(r.Next(nextRandomInt));
                                tempTown.getAntList().AddLast(new Ant(tempTown.getX(), tempTown.getY(), tempTown, gui.getListBoxAnts(), indexAntsCreated));
                                this.antHomes[i] = (byte)(nextRandomInt + 1);
                            }
                        }
                    }
                }
            }
            /////////////////////////////////////////////////////////////////////////////////////////////////////////////
            //Pheromone
            q      = gui.getParameter().getSelectedStrength();
            qStart = gui.getParameter().getSelectedStartPheromone();
            rho    = gui.getParameter().getSelectedEvaporation();
            /////////////////////////////////////////////////////////////////////////////////////////////////////////////
            //Gewichtung
            alpha = gui.getParameter().getSelectedWeightPheromone();
            beta  = gui.getParameter().getSelectedWeightDistance();
            /////////////////////////////////////////////////////////////////////////////////////////////////////////////
            //Zyklen
            nc = gui.getParameter().getSelectedAmountOfCycles();
            string test = "";

            for (int i = 0; i < m; i++)
            {
                test += this.antHomes[i] + " , ";
            }
            gui.setBtnPlay(false);
            gui.setBtnPause(false);
            gui.setBtnNextIt(false);
            gui.setBtnNextRound(false);
            gui.setBtnToTheEnd(false);
            gui.setBtnPrevRound(false);
            gui.setBtnPrevIt(false);
            gui.stopAnimation();
            this.results.Add(antAlgorithms.algorithmieren(this.townCoords, this.antHomes, q, qStart, rho, alpha, beta, nc, typeOfAlgorithm));
            if (results.Count > 5)
            {
                this.results.RemoveAt(0);
            }
        }