예제 #1
0
        public List<Int32> MultiRePairSwitch(Area area, Int32 changesCount, Int32 limit)
        {
            List<int> changesSet = new List<int>();
            AlgPairSwitch algPairSwitch = new AlgPairSwitch();
            StringBuilder message = new StringBuilder();
            message.AppendFormat("[date: {0}]\n", DateTime.Now);
            message.AppendFormat("file: {0}\n", mainForm.ctlTabControl.SelectedTab.Text);
            message.AppendLine("--- Pair Shifts Algorithm: Recalculate ---");

            Stopwatch stopWatch = Stopwatch.StartNew();
            Random rnd = new Random();
            for (int i = 0; i < changesCount; i++)
            {
                area.Channels[rnd.Next(area.Channels.Count - 2)].Criterion = 1 + rnd.Next(limit);
                while (algPairSwitch.Recalculate(area) == false) { }
                changesSet.Add(algPairSwitch.Set.Count);
                algPairSwitch.Set.Clear();
            }
            stopWatch.Stop();

            foreach (Channel channel in area.Channels)
            {
                channel.ChangeCriterion(mainForm.Criterion);
            }

            mainForm.AddPairOperationResult(changesSet, mainForm.ctlTabControl.SelectedTab.Text, area.Number, "Pair Switch", area.Routers.Count);
            message.AppendFormat("time: {0:00.000} ms\n", (stopWatch.ElapsedTicks * 1000.0) / Stopwatch.Frequency);
            UpdateField();
            message.AppendLine("--- End ---");
            message.AppendLine();
            mainForm.ConsoleWrite(message.ToString());

            return changesSet;
        }
예제 #2
0
        public void RePairSwitch()
        {
            AlgPairSwitch algPairSwitch = new AlgPairSwitch();
            StringBuilder message = new StringBuilder();
            message.AppendFormat("[date: {0}]\n", DateTime.Now);
            message.AppendFormat("file: {0}\n", mainForm.ctlTabControl.SelectedTab.Text);
            message.AppendLine("--- Pair Shifts Algorithm: Recalculate ---");

            Stopwatch stopWatch = Stopwatch.StartNew();
            foreach (Area area in Network.Areas)
            {
                if (area.Routers.Count > 0)
                {
                    while (algPairSwitch.Recalculate(area) == false) { }
                }
            }
            stopWatch.Stop();

            foreach (Area area in Network.Areas)
                if (area.Routers.Count > 0)
                {
                    //algPairSwitch.SortRoutersByDistance(area);
                    Network.UpdateGraphics(area);
                    // ********************* DEL
                    //Router root = area.Routers[0];
                    //message.AppendLine("------------------------");
                    //foreach (Router router in area.Routers)
                    //{
                    //    message.AppendLine("Router " + router.Name);
                    //    foreach (Port port in router.Ports)
                    //    {
                    //        message.AppendFormat("{0}: {1} ", port.ShortName, root.Name);
                    //        foreach (Port p in port.Route)
                    //        {
                    //            message.Append(" " + p.Router.Name);
                    //        }
                    //        message.Append(" = " + port.Distance.ToString());
                    //        message.AppendLine();
                    //        message.Append("");
                    //    }
                    //    message.AppendFormat("{0}: {1} ", router.Name, root.Name);
                    //    foreach (Port p in router.MainRoute)
                    //    {
                    //        message.Append(" " + p.Router.Name);
                    //    }
                    //    message.Append(" = " + router.DistancePointer.ToString());
                    //    message.AppendLine();
                    //    message.AppendLine();
                    //}
                    //message.AppendLine("\n------------------------");
                    // ********************* DEL
                }

            Int32 i = 0;
            foreach (ChannelsPair pc in algPairSwitch.Set)
            {
                message.AppendFormat("N{0}\n", ++i);
                message.AppendFormat("R{0}:R{1} switch R{2}:R{3}", pc.Channel1.StartRouter.Number, pc.Channel1.EndRouter.Number,
                                                                   pc.Channel2.StartRouter.Number, pc.Channel2.EndRouter.Number);
                message.AppendLine();
                message.AppendLine();
            }

            message.AppendFormat("time: {0:00.000} ms\n", (stopWatch.ElapsedTicks * 1000.0) / Stopwatch.Frequency);
            UpdateField();
            message.AppendLine("--- End ---");
            message.AppendLine();
            mainForm.ConsoleWrite(message.ToString());
        }
예제 #3
0
        public void DoAlgPairSwitch()
        {
            StringBuilder message = new StringBuilder();
            message.AppendFormat("[date: {0}]\n", DateTime.Now);
            message.AppendFormat("file: {0}\n", mainForm.ctlTabControl.SelectedTab.Text);
            message.AppendLine("--- Pair Shifts Algorithm ---");
            if (Network.CheckNetwork() == 0)
            {
                message.AppendLine("checking: graph checking ... OK");
                if (Network.Areas.Count > 1)
                {
                    message.AppendLine("checking: network is segmented ... YES");
                }
                else
                {
                    message.AppendLine("checking: network is segmented ... NO");
                }

                AlgDejkstra algDejkstra = new AlgDejkstra();
                AlgPairSwitch algPairSwitch = new AlgPairSwitch();
                foreach (Area area in Network.Areas)
                {
                    if (area.Routers.Count > 0)
                    {
                        Router root = area.Routers[0];
                        foreach (Router router in SelectedElements)
                        {
                            if (area.Routers.Contains(router) == true)
                            {
                                root = router;
                                break;
                            }
                        }
                        Network.ResetEquipment(area);
                        algDejkstra.DoAlg(root);
                        algPairSwitch.DoAlg(area);
                        Network.UpdateGraphics(area);
                        // ********************* DEL
                        //message.AppendLine("------------------------");
                        //foreach (Router router in area.Routers)
                        //{
                        //    message.AppendLine("Router " + router.Name);
                        //    foreach (Port port in router.Ports)
                        //    {
                        //        message.AppendFormat("{0}: {1} ", port.ShortName, root.Name);
                        //        foreach (Port p in port.Route)
                        //        {
                        //            message.Append(" " + p.Router.Name);
                        //        }
                        //        message.Append(" = " + port.Distance.ToString());
                        //        message.AppendLine();
                        //        message.Append("");
                        //    }
                        //    message.AppendFormat("{0}: {1} ", router.Name, root.Name);
                        //    foreach (Port p in router.MainRoute)
                        //    {
                        //        message.Append(" " + p.Router.Name);
                        //    }
                        //    message.Append(" = " + router.DistancePointer.ToString());
                        //    message.AppendLine();
                        //    message.AppendLine();
                        //}
                        //message.AppendLine("\n------------------------");
                        // ********************* DEL
                    }
                }
            }
            else
            {
                message.Append("warning: gaph is not closed!\n" +
                        "execution is stopped.\n");
            }

            UpdateField();
            message.AppendLine("--- End ---");
            message.AppendLine();
            mainForm.ConsoleWrite(message.ToString());
        }