Beispiel #1
0
        public void GraphQueen5_5_CalculateGlobalCostFunction_Success()
        {
            var loaderMock = new Mock <IDataLoader>();

            loaderMock.Setup(m => m.LoadData()).Returns(_queen55Metis);

            var randomMock = new StubRandom()
            {
                NextInt32Int32 = (a, b) => 1
            };

            var graph = new MetisUnweightedGraph(loaderMock.Object, randomMock);

            graph.InitializeGraph();

            graph.Vertices[0].Color  = 2;
            graph.Vertices[1].Color  = 2;
            graph.Vertices[2].Color  = 1;
            graph.Vertices[3].Color  = 1;
            graph.Vertices[4].Color  = 1;
            graph.Vertices[5].Color  = 2;
            graph.Vertices[6].Color  = 2;
            graph.Vertices[7].Color  = 1;
            graph.Vertices[8].Color  = 2;
            graph.Vertices[9].Color  = 2;
            graph.Vertices[10].Color = 1;
            graph.Vertices[11].Color = 1;
            graph.Vertices[12].Color = 2;
            graph.Vertices[13].Color = 2;
            graph.Vertices[14].Color = 2;
            graph.Vertices[15].Color = 2;
            graph.Vertices[16].Color = 1;
            graph.Vertices[17].Color = 1;
            graph.Vertices[18].Color = 2;
            graph.Vertices[19].Color = 2;
            graph.Vertices[20].Color = 2;
            graph.Vertices[21].Color = 1;
            graph.Vertices[22].Color = 1;
            graph.Vertices[23].Color = 1;
            graph.Vertices[24].Color = 1;

            var globalCost = graph.GetGlobalCostFunction();

            Assert.AreEqual(84, globalCost);
        }
Beispiel #2
0
        // part -t 0 -i "Graphs\DIMACS\myciel3.col" -a 1 -p 2 -c 0.9 -m 0.85 -s 6 -d 100
        // part -t 0 -i "Graphs\DIMACS\le450_15b.col" -a 5 -p 29 -c 0.9 -m 0.85 -s 6 -d 1
        // part -t 1 -i "Graphs\manual.txt" -a 1 -p 2 -c 0.9 -m 0.85 -s 4 -d 100
        static int Main(string[] args)
        {
            XmlConfigurator.Configure();

            Func <PartitionGraphOptions, int> partitionFunc = options =>
            {
                var rnd         = new Random(Environment.TickCount);
                var fileWriter  = new FileWriter("graph.json");
                var exportGraph = new GephiFileExport(fileWriter, Path.GetFileNameWithoutExtension(options.InputGraphFilePath));

                var       fileLoader = new FileLoader(options.InputGraphFilePath);
                BaseGraph graph;
                switch (options.ImportGraphFileType)
                {
                case GraphInputFileType.Dimacs:
                    graph = new DimacsGraph(fileLoader, rnd);
                    break;

                case GraphInputFileType.Metis:
                    graph = new MetisGraph(fileLoader, rnd);
                    break;

                case GraphInputFileType.MetisUnweighted:
                    graph = new MetisUnweightedGraph(fileLoader, rnd);
                    break;

                default:
                    throw new ApplicationException("Graph file format is not suppoted.");
                }

                var graphOptions = new Options(options.NumberOfAnts, options.NumberOfPartitions, options.ColoringProbability,
                                               options.MovingProbability, options.NumberOfVerticesForBalance, options.NumberOfIterations);

                ResultData resultData = Algorithm.Run(graph, graphOptions, rnd, exportGraph);
                return(resultData.BestCost);
            };

            var result = Parser.Default.ParseArguments <PartitionGraphOptions>(args);

            var exitCode = result.MapResult(options =>
            {
                if (options.Verbose)
                {
                    Console.WriteLine("Write additional information.");
                }
                else
                {
                    Console.WriteLine("Processing...");

                    var stopwatch = new Stopwatch();
                    stopwatch.Start();

                    var bestCost = partitionFunc(options);

                    stopwatch.Stop();
                    Log.Warn($"Algoritham run time: {stopwatch.ElapsedMilliseconds}");
                    Log.Warn($"Best cost: {bestCost}");

                    Console.WriteLine($"{args[0]} | {bestCost}");
                }
                return(0);
            }, errors => 1);

            return(exitCode);
        }