예제 #1
0
        /// <summary>
        /// Generate a random graph and then use it to color it.
        ///
        /// This method investigate: How much color is needed on average for a graph with 1000
        /// vertex, where p varies from 0.002 to 0.02
        /// </summary>
        public static string RandomGraphColoringReport(
            int n          = 1000,
            double p_start = 0.002,
            double p_end   = 0.02,
            int N          = 10, // Increment for edge density
            int samples    = 100
            )
        {
            StringBuilder sb = new StringBuilder();

            sb.AppendLine("[");
            for (double p = p_start, delta = (p_end - p_start) / N; p <= p_end; p += delta)
            {
                sb.AppendLine("{");
                sb.AppendLine($"\"n\":{n},");
                sb.AppendLine($"\"p\":{p},");
                double avgColorUsed = Double.NaN;
                for (int I = 0; I < samples; I++)
                {
                    var aRandomGraph = new ColoringGraph(KissMe.RandGraph(n, p));
                    avgColorUsed  = Double.IsNaN(avgColorUsed) ? 0 : avgColorUsed;
                    avgColorUsed += aRandomGraph.ColorUsed();
                }
                avgColorUsed /= samples;
                sb.AppendLine($"\"AvgColor\": {avgColorUsed}");
                sb.AppendLine($"}} {(p == p_end ? ' ' : ',')}");
            }
            sb.AppendLine("]");

            return(sb.ToString());
        }
예제 #2
0
        /// <summary>
        /// The result will get printed out to the console and you should copy then and get the
        /// image elsewhere.
        ///
        /// The printed result will be formatted as json file for convenience.
        /// </summary>
        public static void HW4P4PrintVertexDegreeDistribution(
            int n          = 1000,
            double p_start = 0.002,
            double p_end   = 0.02,
            int N          = 10)
        {
            double[]      EdgeDensity = new double[N];
            StringBuilder sb          = new StringBuilder();

            sb.AppendLine("[");

            for (double P = p_start, delta = (p_end - p_start) / N;
                 P <= p_end;
                 P += delta)
            {
                var G = new ColoringGraph(KissMe.RandGraph(n, P));
                //output.WriteLine($"Ded Distribution with p = {P}; n = {n};");
                sb.AppendLine("{");
                sb.AppendLine($"\t\"p\":{P},");
                sb.AppendLine($"\t\"n\":{n},");
                foreach (KeyValuePair <int, int> kvp in G.GetDegStats())
                {
                    sb.AppendLine($"\t\"{kvp.Key}\": {kvp.Value},");
                }
                sb.Remove(sb.Length - 3, 2);
                sb.AppendLine("},");
            }
            sb.Remove(sb.Length - 3, 2);
            sb.AppendLine("]");
            WriteLine(sb.ToString());
        }