/// <summary> /// Generate graphs with count of vertices greater than or equal to minCount and less than or equal to maxCount /// For invalid minCount and maxCount returns GenerateGraphsInvalidArgumentsMinCountMaxCountException /// </summary> /// <param name="minCount">the lowest count of vertices</param> /// <param name="maxCount">the highest count of vertices</param> public override void Generate(int minCount, int maxCount) { if (minCount > maxCount) { throw new MyException.GenerateGraphsException.GenerateGraphsInvalidArgumentsMinCountMaxCountException("MinCount: " + minCount + ", maxCount: " + maxCount); } if (minCount < 1) { throw new MyException.GenerateGraphsException.GenerateGraphsInvalidArgumentsMinCountMaxCountException("MinCount: " + minCount); } // Variable bool graphExists; int countIterations; Tuple <int, int> result; for (int countVertices = minCount; countVertices <= maxCount; countVertices++) { countIterations = GetCountIterations(countVertices); if (writer) { Console.WriteLine("-------------------------"); } for (int iteration = 0; iteration < countIterations; iteration++) { // Generate graph do { erdosRenyiModel = new GraphColoring.GenerateGraph.ErdosRenyiModel.ErdosRenyiModel(countVertices, GraphColoring.GenerateGraph.ErdosRenyiModel.ErdosRenyiModel.ErdosRenyiModelProbabilityEnum.cLogNDividedByN); graph = erdosRenyiModel.GenerateGraph(); }while (!graph.GetGraphProperty().GetIsConnected()); // || database.ExistsGraph(graph)); graphExists = database.ExistsGraph(graph); if (!graphExists) { database.InsertGraph(graph); } int ID_Graph = database.GetGraph(graph); // Algorithm // Random try { result = colorGraphs.ColorGraph(new GraphColoring.GraphColoringAlgorithm.SequenceAlgorithm.RandomSequence.RandomSequence(graph), true); database.AddGraphColoring(ID_Graph, GraphColoring.GraphColoringAlgorithm.GraphColoringAlgorithm.GraphColoringAlgorithmEnum.randomSequence, colorGraphs.GetCountIterationsProbability(), result.Item1, result.Item2); } catch (MyException.DatabaseException.DatabaseAlgorithmDoesNotExistException) { Console.WriteLine("Algorithm does not exist in DB: {0}", GraphColoring.GraphColoringAlgorithm.GraphColoringAlgorithm.GraphColoringAlgorithmEnum.randomSequence); } // Random interchange try { result = colorGraphs.ColorGraph(new GraphColoring.GraphColoringAlgorithm.SequenceAlgorithm.RandomSequence.RandomSequence(graph, GraphColoring.GraphColoringAlgorithm.GraphColoringAlgorithm.GraphColoringAlgorithInterchangeEnum.interchange), true); database.AddGraphColoring(ID_Graph, GraphColoring.GraphColoringAlgorithm.GraphColoringAlgorithm.GraphColoringAlgorithmEnum.randomSequenceInterchange, colorGraphs.GetCountIterationsProbability(), result.Item1, result.Item2); } catch (MyException.DatabaseException.DatabaseAlgorithmDoesNotExistException) { Console.WriteLine("Algorithm does not exist in DB: {0}", GraphColoring.GraphColoringAlgorithm.GraphColoringAlgorithm.GraphColoringAlgorithmEnum.randomSequenceInterchange); } // Random interchangeExtended try { result = colorGraphs.ColorGraph(new GraphColoring.GraphColoringAlgorithm.SequenceAlgorithm.RandomSequence.RandomSequence(graph, GraphColoring.GraphColoringAlgorithm.GraphColoringAlgorithm.GraphColoringAlgorithInterchangeEnum.interchangeExtended), true); database.AddGraphColoring(ID_Graph, GraphColoring.GraphColoringAlgorithm.GraphColoringAlgorithm.GraphColoringAlgorithmEnum.randomSequenceInterchangeExtended, colorGraphs.GetCountIterationsProbability(), result.Item1, result.Item2); } catch (MyException.DatabaseException.DatabaseAlgorithmDoesNotExistException) { Console.WriteLine("Algorithm does not exist in DB: {0}", GraphColoring.GraphColoringAlgorithm.GraphColoringAlgorithm.GraphColoringAlgorithmEnum.randomSequenceInterchangeExtended); } // Random interchangeExtended with K3 try { if (useInterchangeExtendedK3) { result = colorGraphs.ColorGraph(new GraphColoring.GraphColoringAlgorithm.SequenceAlgorithm.RandomSequence.RandomSequence(graph, GraphColoring.GraphColoringAlgorithm.GraphColoringAlgorithm.GraphColoringAlgorithInterchangeEnum.interchangeExtendedK3), true); database.AddGraphColoring(ID_Graph, GraphColoring.GraphColoringAlgorithm.GraphColoringAlgorithm.GraphColoringAlgorithmEnum.randomSequenceInterchangeExtendedK3, colorGraphs.GetCountIterationsProbability(), result.Item1, result.Item2); } } catch (MyException.DatabaseException.DatabaseAlgorithmDoesNotExistException) { Console.WriteLine("Algorithm does not exist in DB: {0}", GraphColoring.GraphColoringAlgorithm.GraphColoringAlgorithm.GraphColoringAlgorithmEnum.randomSequenceInterchangeExtendedK3); } // Largest first sequence try { result = colorGraphs.ColorGraph(new GraphColoring.GraphColoringAlgorithm.SequenceAlgorithm.LargestFirstSequence.LargestFirstSequence(graph)); database.AddGraphColoring(ID_Graph, GraphColoring.GraphColoringAlgorithm.GraphColoringAlgorithm.GraphColoringAlgorithmEnum.largestFirstSequence, result.Item1); } catch (MyException.DatabaseException.DatabaseAlgorithmDoesNotExistException) { Console.WriteLine("Algorithm does not exist in DB: {0}", GraphColoring.GraphColoringAlgorithm.GraphColoringAlgorithm.GraphColoringAlgorithmEnum.largestFirstSequence); } // Largest first sequence interchange try { result = colorGraphs.ColorGraph(new GraphColoring.GraphColoringAlgorithm.SequenceAlgorithm.LargestFirstSequence.LargestFirstSequence(graph, GraphColoring.GraphColoringAlgorithm.GraphColoringAlgorithm.GraphColoringAlgorithInterchangeEnum.interchange)); database.AddGraphColoring(ID_Graph, GraphColoring.GraphColoringAlgorithm.GraphColoringAlgorithm.GraphColoringAlgorithmEnum.largestFirstSequenceInterchange, result.Item1); } catch (MyException.DatabaseException.DatabaseAlgorithmDoesNotExistException) { Console.WriteLine("Algorithm does not exist in DB: {0}", GraphColoring.GraphColoringAlgorithm.GraphColoringAlgorithm.GraphColoringAlgorithmEnum.largestFirstSequenceInterchange); } // Largest first sequence interchangeExtended try { result = colorGraphs.ColorGraph(new GraphColoring.GraphColoringAlgorithm.SequenceAlgorithm.LargestFirstSequence.LargestFirstSequence(graph, GraphColoring.GraphColoringAlgorithm.GraphColoringAlgorithm.GraphColoringAlgorithInterchangeEnum.interchangeExtended)); database.AddGraphColoring(ID_Graph, GraphColoring.GraphColoringAlgorithm.GraphColoringAlgorithm.GraphColoringAlgorithmEnum.largestFirstSequenceInterchangeExtended, result.Item1); } catch (MyException.DatabaseException.DatabaseAlgorithmDoesNotExistException) { Console.WriteLine("Algorithm does not exist in DB: {0}", GraphColoring.GraphColoringAlgorithm.GraphColoringAlgorithm.GraphColoringAlgorithmEnum.largestFirstSequenceInterchangeExtended); } // Largest first sequence interchangeExtended with K3 try { if (useInterchangeExtendedK3) { result = colorGraphs.ColorGraph(new GraphColoring.GraphColoringAlgorithm.SequenceAlgorithm.LargestFirstSequence.LargestFirstSequence(graph, GraphColoring.GraphColoringAlgorithm.GraphColoringAlgorithm.GraphColoringAlgorithInterchangeEnum.interchangeExtendedK3)); database.AddGraphColoring(ID_Graph, GraphColoring.GraphColoringAlgorithm.GraphColoringAlgorithm.GraphColoringAlgorithmEnum.largestFirstSequenceInterchangeExtendedK3, result.Item1); } } catch (MyException.DatabaseException.DatabaseAlgorithmDoesNotExistException) { Console.WriteLine("Algorithm does not exist in DB: {0}", GraphColoring.GraphColoringAlgorithm.GraphColoringAlgorithm.GraphColoringAlgorithmEnum.largestFirstSequenceInterchangeExtendedK3); } // Smallest last sequence try { result = colorGraphs.ColorGraph(new GraphColoring.GraphColoringAlgorithm.SequenceAlgorithm.SmallestLastSequence.SmallestLastSequence(graph)); database.AddGraphColoring(ID_Graph, GraphColoring.GraphColoringAlgorithm.GraphColoringAlgorithm.GraphColoringAlgorithmEnum.smallestLastSequence, result.Item1); } catch (MyException.DatabaseException.DatabaseAlgorithmDoesNotExistException) { Console.WriteLine("Algorithm does not exist in DB: {0}", GraphColoring.GraphColoringAlgorithm.GraphColoringAlgorithm.GraphColoringAlgorithmEnum.smallestLastSequence); } // Smallest last sequence interchange try { result = colorGraphs.ColorGraph(new GraphColoring.GraphColoringAlgorithm.SequenceAlgorithm.SmallestLastSequence.SmallestLastSequence(graph, GraphColoring.GraphColoringAlgorithm.GraphColoringAlgorithm.GraphColoringAlgorithInterchangeEnum.interchange)); database.AddGraphColoring(ID_Graph, GraphColoring.GraphColoringAlgorithm.GraphColoringAlgorithm.GraphColoringAlgorithmEnum.smallestLastSequenceInterchange, result.Item1); } catch (MyException.DatabaseException.DatabaseAlgorithmDoesNotExistException) { Console.WriteLine("Algorithm does not exist in DB: {0}", GraphColoring.GraphColoringAlgorithm.GraphColoringAlgorithm.GraphColoringAlgorithmEnum.smallestLastSequenceInterchange); } // Smallest last sequence interchangeExtended try { result = colorGraphs.ColorGraph(new GraphColoring.GraphColoringAlgorithm.SequenceAlgorithm.SmallestLastSequence.SmallestLastSequence(graph, GraphColoring.GraphColoringAlgorithm.GraphColoringAlgorithm.GraphColoringAlgorithInterchangeEnum.interchangeExtended)); database.AddGraphColoring(ID_Graph, GraphColoring.GraphColoringAlgorithm.GraphColoringAlgorithm.GraphColoringAlgorithmEnum.smallestLastSequenceInterchangeExtended, result.Item1); } catch (MyException.DatabaseException.DatabaseAlgorithmDoesNotExistException) { Console.WriteLine("Algorithm does not exist in DB: {0}", GraphColoring.GraphColoringAlgorithm.GraphColoringAlgorithm.GraphColoringAlgorithmEnum.smallestLastSequenceInterchangeExtended); } // Smallest last sequence interchangeExtended with K3 try { if (useInterchangeExtendedK3) { result = colorGraphs.ColorGraph(new GraphColoring.GraphColoringAlgorithm.SequenceAlgorithm.SmallestLastSequence.SmallestLastSequence(graph, GraphColoring.GraphColoringAlgorithm.GraphColoringAlgorithm.GraphColoringAlgorithInterchangeEnum.interchangeExtendedK3)); database.AddGraphColoring(ID_Graph, GraphColoring.GraphColoringAlgorithm.GraphColoringAlgorithm.GraphColoringAlgorithmEnum.smallestLastSequenceInterchangeExtendedK3, result.Item1); } } catch (MyException.DatabaseException.DatabaseAlgorithmDoesNotExistException) { Console.WriteLine("Algorithm does not exist in DB: {0}", GraphColoring.GraphColoringAlgorithm.GraphColoringAlgorithm.GraphColoringAlgorithmEnum.smallestLastSequenceInterchangeExtendedK3); } // Connected sequential try { result = colorGraphs.ColorGraph(new GraphColoring.GraphColoringAlgorithm.SequenceAlgorithm.ConnectedSequential.ConnectedSequential(graph)); database.AddGraphColoring(ID_Graph, GraphColoring.GraphColoringAlgorithm.GraphColoringAlgorithm.GraphColoringAlgorithmEnum.connectedSequential, result.Item1); } catch (MyException.DatabaseException.DatabaseAlgorithmDoesNotExistException) { Console.WriteLine("Algorithm does not exist in DB: {0}", GraphColoring.GraphColoringAlgorithm.GraphColoringAlgorithm.GraphColoringAlgorithmEnum.connectedSequential); } // Saturation largest first sequence try { result = colorGraphs.ColorGraph(new GraphColoring.GraphColoringAlgorithm.SaturationLargestFirstSequence.SaturationLargestFirstSequence(graph)); database.AddGraphColoring(ID_Graph, GraphColoring.GraphColoringAlgorithm.GraphColoringAlgorithm.GraphColoringAlgorithmEnum.saturationLargestFirstSequence, result.Item1); } catch (MyException.DatabaseException.DatabaseAlgorithmDoesNotExistException) { Console.WriteLine("Algorithm does not exist in DB: {0}", GraphColoring.GraphColoringAlgorithm.GraphColoringAlgorithm.GraphColoringAlgorithmEnum.saturationLargestFirstSequence); } // Greedy independent set try { result = colorGraphs.ColorGraph(new GraphColoring.GraphColoringAlgorithm.GreedyIndependentSet.GreedyIndependentSet(graph)); database.AddGraphColoring(ID_Graph, GraphColoring.GraphColoringAlgorithm.GraphColoringAlgorithm.GraphColoringAlgorithmEnum.greedyIndependentSet, result.Item1); } catch (MyException.DatabaseException.DatabaseAlgorithmDoesNotExistException) { Console.WriteLine("Algorithm does not exist in DB: {0}", GraphColoring.GraphColoringAlgorithm.GraphColoringAlgorithm.GraphColoringAlgorithmEnum.greedyIndependentSet); } // Combination try { result = colorGraphs.ColorGraph(new GraphColoring.GraphColoringAlgorithm.CombinationAlgorithm.CombinationAlgorithm(graph)); database.AddGraphColoring(ID_Graph, GraphColoring.GraphColoringAlgorithm.GraphColoringAlgorithm.GraphColoringAlgorithmEnum.combinationAlgorithm, result.Item1); } catch (MyException.DatabaseException.DatabaseAlgorithmDoesNotExistException) { Console.WriteLine("Algorithm does not exist in DB: {0}", GraphColoring.GraphColoringAlgorithm.GraphColoringAlgorithm.GraphColoringAlgorithmEnum.combinationAlgorithm); } // Genetic try { result = colorGraphs.ColorGraph(new GraphColoring.GraphColoringAlgorithm.GeneticAlgorithm.GeneticAlgorithm(graph, 1), true); database.AddGraphColoring(ID_Graph, GraphColoring.GraphColoringAlgorithm.GraphColoringAlgorithm.GraphColoringAlgorithmEnum.geneticAlgorithm, colorGraphs.GetCountIterationsProbability(), result.Item1, result.Item2); } catch (MyException.DatabaseException.DatabaseAlgorithmDoesNotExistException) { Console.WriteLine("Algorithm does not exist in DB: {0}", GraphColoring.GraphColoringAlgorithm.GraphColoringAlgorithm.GraphColoringAlgorithmEnum.geneticAlgorithm); } // Genetic2 try { if (useGeneticAlgorithm2) { result = colorGraphs.ColorGraph(new GraphColoring.GraphColoringAlgorithm.GeneticAlgorithm.GeneticAlgorithm(graph, 2), true); database.AddGraphColoring(ID_Graph, GraphColoring.GraphColoringAlgorithm.GraphColoringAlgorithm.GraphColoringAlgorithmEnum.geneticAlgorithm2, colorGraphs.GetCountIterationsProbability(), result.Item1, result.Item2); } } catch (MyException.DatabaseException.DatabaseAlgorithmDoesNotExistException) { Console.WriteLine("Algorithm does not exist in DB: {0}", GraphColoring.GraphColoringAlgorithm.GraphColoringAlgorithm.GraphColoringAlgorithmEnum.geneticAlgorithm2); } // Connected largest first try { result = colorGraphs.ColorGraph(new GraphColoring.GraphColoringAlgorithm.ConnectedLargestFirst.ConnectedLargestFirst(graph)); database.AddGraphColoring(ID_Graph, GraphColoring.GraphColoringAlgorithm.GraphColoringAlgorithm.GraphColoringAlgorithmEnum.connectedLargestFirst, result.Item1); } catch (MyException.DatabaseException.DatabaseAlgorithmDoesNotExistException) { Console.WriteLine("Algorithm does not exist in DB: {0}", GraphColoring.GraphColoringAlgorithm.GraphColoringAlgorithm.GraphColoringAlgorithmEnum.connectedLargestFirst); } // Connected largest first interchange try { result = colorGraphs.ColorGraph(new GraphColoring.GraphColoringAlgorithm.ConnectedLargestFirst.ConnectedLargestFirst(graph, GraphColoring.GraphColoringAlgorithm.GraphColoringAlgorithm.GraphColoringAlgorithInterchangeEnum.interchange)); database.AddGraphColoring(ID_Graph, GraphColoring.GraphColoringAlgorithm.GraphColoringAlgorithm.GraphColoringAlgorithmEnum.connectedLargestFirstInterchange, result.Item1); } catch (MyException.DatabaseException.DatabaseAlgorithmDoesNotExistException) { Console.WriteLine("Algorithm does not exist in DB: {0}", GraphColoring.GraphColoringAlgorithm.GraphColoringAlgorithm.GraphColoringAlgorithmEnum.connectedLargestFirstInterchange); } // Connected largest first interchangeExtended try { result = colorGraphs.ColorGraph(new GraphColoring.GraphColoringAlgorithm.ConnectedLargestFirst.ConnectedLargestFirst(graph, GraphColoring.GraphColoringAlgorithm.GraphColoringAlgorithm.GraphColoringAlgorithInterchangeEnum.interchangeExtended)); database.AddGraphColoring(ID_Graph, GraphColoring.GraphColoringAlgorithm.GraphColoringAlgorithm.GraphColoringAlgorithmEnum.connectedLargestFirstInterchangeExtended, result.Item1); } catch (MyException.DatabaseException.DatabaseAlgorithmDoesNotExistException) { Console.WriteLine("Algorithm does not exist in DB: {0}", GraphColoring.GraphColoringAlgorithm.GraphColoringAlgorithm.GraphColoringAlgorithmEnum.connectedLargestFirstInterchangeExtended); } // Connected largest first interchangeExtended with K3 try { if (useInterchangeExtendedK3) { result = colorGraphs.ColorGraph(new GraphColoring.GraphColoringAlgorithm.ConnectedLargestFirst.ConnectedLargestFirst(graph, GraphColoring.GraphColoringAlgorithm.GraphColoringAlgorithm.GraphColoringAlgorithInterchangeEnum.interchangeExtendedK3)); database.AddGraphColoring(ID_Graph, GraphColoring.GraphColoringAlgorithm.GraphColoringAlgorithm.GraphColoringAlgorithmEnum.connectedLargestFirstInterchangeExtendedK3, result.Item1); } } catch (MyException.DatabaseException.DatabaseAlgorithmDoesNotExistException) { Console.WriteLine("Algorithm does not exist in DB: {0}", GraphColoring.GraphColoringAlgorithm.GraphColoringAlgorithm.GraphColoringAlgorithmEnum.connectedLargestFirstInterchangeExtendedK3); } /* * // AI * try * { * result = colorGraphs.ColorGraph(new GraphColoring.GraphColoringAlgorithm.AI.AI(graph)); * database.AddGraphColoring(ID_Graph, GraphColoring.GraphColoringAlgorithm.GraphColoringAlgorithm.GraphColoringAlgorithmEnum.AI, result.Item1); * } * catch (MyException.DatabaseException.DatabaseAlgorithmDoesNotExistException) * { * Console.WriteLine("Algorithm does not exist in DB: {0}", GraphColoring.GraphColoringAlgorithm.GraphColoringAlgorithm.GraphColoringAlgorithmEnum.connectedLargestFirst); * } */ if (writer) { if (!graphExists) { Console.WriteLine("Added graph with ID {0} - countVertices: {1}, iteration: {2}/{3}", ID_Graph, countVertices, (iteration + 1), countIterations); } else { Console.WriteLine("Updated graph with ID {0} - countVertices: {1}, iteration: {2}/{3}", ID_Graph, countVertices, (iteration + 1), countIterations); } } } } }