Пример #1
0
        public static void Go()
        {
            using (var graphEnumerator = new GraphEnumerator(WinnersFile, 2, MaxVertices))
            {
                if (TreesOnly)
                {
                    graphEnumerator.FileRoot = @"C:\Users\landon\Google Drive\research\Graph6\trees\trees";
                }
                else
                {
                    graphEnumerator.FileRoot = @"C:\Users\landon\Google Drive\research\Graph6\graph";
                }

                graphEnumerator.DoNotUsePreviousWinners = true;
                foreach (var gg in graphEnumerator.EnumerateGraph6File(Filter, null))
                {
                    System.Console.Write("checking " + gg.ToGraph6() + "... ");

                    var weightings = EnumerateWeightings(gg).ToList();
                    var winners    = new List <Choosability.Graph>();
                    foreach (var g in weightings)
                    {
                        var mind = new Choosability.FixerBreaker.KnowledgeEngine.Slim.Super.SuperSlimMind(g, false, FixerBreakerSwapMode.SingleSwap);
                        mind.MaxPot = int.MaxValue;
                        mind.OnlySuperabundantBoards = true;
                        mind.ExtraPsi = ExtraPsi;
                        mind.OnlyConsiderNearlyColorableBoards = NearColorings;

                        var template = new Template(g.VertexWeight);
                        var win      = mind.Analyze(template, null);

                        if (win)
                        {
                            winners.Add(g);
                        }
                    }

                    var globalWinners = winners.Where(w => SubsetEqualSpecial(weightings.Where(aa => w.VertexWeight.Zip(aa.VertexWeight, (x, y) => x <= y).All(b => b)).ToList(), winners)).ToList();
                    globalWinners = globalWinners.Where(w => IntersectionCountSpecial(weightings.Where(aa => w.VertexWeight.Zip(aa.VertexWeight, (x, y) => x >= y).All(b => b)).ToList(), globalWinners) == 1).ToList();

                    if (globalWinners.Count > 0)
                    {
                        System.Console.ForegroundColor = ConsoleColor.Green;
                        System.Console.WriteLine(" fixer wins");
                        System.Console.ForegroundColor = ConsoleColor.White;

                        foreach (var ww in globalWinners)
                        {
                            graphEnumerator.AddWinner(ww);
                        }
                    }
                    else
                    {
                        System.Console.ForegroundColor = ConsoleColor.Red;
                        System.Console.WriteLine(" breaker wins");
                        System.Console.ForegroundColor = ConsoleColor.White;
                    }
                }
            }
        }
Пример #2
0
        public static void Go()
        {
            using (var graphEnumerator = new GraphEnumerator(WinnersFile, 2, MaxVertices))
            {
                if (TreesOnly)
                {
                    graphEnumerator.FileRoot = @"C:\Users\landon\Google Drive\research\Graph6\trees\trees";
                }
                else if (TreesOrTreesPlusEdgeOnly)
                {
                    graphEnumerator.FileRoot = @"C:\Users\landon\Google Drive\research\Graph6\degree5treesplusedge\geng";
                }
                else if (Planar)
                {
                    graphEnumerator.FileRoot = @"C:\Users\landon\Google Drive\research\Graph6\planar\planar_conn.";
                }
                else
                {
                    graphEnumerator.FileRoot = @"C:\Users\landon\Google Drive\research\Graph6\graph";
                }

                foreach (var g in graphEnumerator.EnumerateGraph6File(Filter, EnumerateWeightings))
                {
                    System.Console.Write("checking " + g.ToGraph6() + " with degrees [" + string.Join(",", g.VertexWeight) + "] ...");

                    var mind = new Choosability.FixerBreaker.KnowledgeEngine.Slim.Super.SuperSlimMind(g, false, SwapMode);
                    mind.MaxPot = Delta;
                    mind.OnlyConsiderNearlyColorableBoards = NearColorings;

                    var template = new Template(g.VertexWeight.Select((ambientDegree, v) => Delta - (ambientDegree - g.Degree(v))).ToList());
                    var win      = mind.Analyze(template, null);

                    if (win)
                    {
                        System.Console.ForegroundColor = ConsoleColor.Blue;
                        System.Console.WriteLine(" fixer wins");
                        System.Console.ForegroundColor = ConsoleColor.White;
                        graphEnumerator.AddWinner(g);
                        _wonWeightings.Add(g.VertexWeight);

                        if (MakeWebPage)
                        {
                            MakePictures.MakeWebpage(WinnersFile, Path.Combine(WebpageRoot, Path.GetFileNameWithoutExtension(WinnersFile)));
                        }
                    }
                    else
                    {
                        System.Console.ForegroundColor = ConsoleColor.Red;
                        System.Console.WriteLine(" breaker wins");
                        System.Console.ForegroundColor = ConsoleColor.White;
                    }
                }
            }
        }
Пример #3
0
        public static void Go()
        {
            var gn = new GraphEnumerator(OutputFile, MinN, MaxN, false);

            gn.FileRoot = GraphFileRoot;
            foreach (var g in gn.EnumerateGraph6File())
            {
                if (IsUnitDistance(g))
                {
                    gn.AddWinner(g);
                }
            }
        }
Пример #4
0
        public static void Go()
        {
            using (var graphEnumerator = new GraphEnumerator("superabundant near coloring original fixable test.txt", 2, 20))
            {
                graphEnumerator.FileRoot = @"C:\Users\landon\Google Drive\research\Graph6\graph";

                foreach (var g in graphEnumerator.EnumerateGraph6File(g => true, EnumerateWeightings))
                {
                    System.Console.Write("checking " + g.ToGraph6() + " with degrees [" + string.Join(",", g.VertexWeight) + "] ...");

                    var mind = new Choosability.FixerBreaker.KnowledgeEngine.Slim.Super.SuperSlimMind(g, false, FixerBreakerSwapMode.SingleSwap);
                    mind.MaxPot = Delta;
                    mind.OnlySuperabundantBoards           = true;
                    mind.OnlyConsiderNearlyColorableBoards = true;

                    var weakMind = new Choosability.FixerBreaker.KnowledgeEngine.Slim.Super.SuperSlimMind(g, false, FixerBreakerSwapMode.Original);
                    weakMind.MaxPot = Delta;
                    weakMind.OnlySuperabundantBoards           = true;
                    weakMind.OnlyConsiderNearlyColorableBoards = true;

                    var template = new Template(g.VertexWeight);

                    var win     = mind.Analyze(template, null);
                    var winWeak = weakMind.Analyze(template, null);

                    if (win != winWeak)
                    {
                        System.Console.ForegroundColor = ConsoleColor.Red;
                        System.Console.WriteLine(" weakly is weaker");
                        System.Console.ForegroundColor = ConsoleColor.White;
                        graphEnumerator.AddWinner(g);
                    }
                    else
                    {
                        if (win)
                        {
                            System.Console.ForegroundColor = ConsoleColor.Blue;
                        }
                        else
                        {
                            System.Console.ForegroundColor = ConsoleColor.Green;
                        }
                        System.Console.ForegroundColor = ConsoleColor.White;
                    }
                }
            }
        }
Пример #5
0
        static void DoIt(string name, int bound)
        {
            var file = name + ".txt";

            Clear(file);

            using (var graphEnumerator = new GraphEnumerator(file, Min, Max, true))
            {
                graphEnumerator.FileRoot        = @"C:\Users\landon\Google Drive\research\Graph6\graph";
                graphEnumerator.WeightCondition = (_, __, ___, ____) => true;
                graphEnumerator.OnlyExcludeBySpanningSubgraphs = false;

                foreach (var g in graphEnumerator.EnumerateGraph6File(null, Secondary, false))
                {
                    if (PotentialAtMost(g, bound))
                    {
                        graphEnumerator.AddWinner(g);
                        System.Console.WriteLine(bound + " winner : " + g.ToGraph6());
                    }
                }
            }
        }
Пример #6
0
        public static void Go()
        {
            int k = 5;

            using (var graphEnumerator = new GraphEnumerator(string.Format("mic{0}b.txt", k), k, k, false))
            {
                graphEnumerator.FileRoot = @"C:\Users\landon\Google Drive\research\Graph6\VertexCritical\chi";

                foreach (var g in graphEnumerator.EnumerateGraph6File())
                {
                    var micG = g.Mic();
                    var diff = micG - (g.N + k - 4);

                    //System.Console.WriteLine(g.ToGraph6() + " :: " + diff);

                    if (diff < 0)
                    {
                        graphEnumerator.AddWinner(g);
                        System.Console.WriteLine(diff);
                    }
                }
            }
        }
        public static void Go()
        {
            int total   = 0;
            int skipped = 0;

            var forbidden = GraphEnumerator.EnumerateGraphFile(ForbiddenPath).ToList();

            var gn = new GraphEnumerator(OutputFile, MinN, MaxN, false);

            gn.FileRoot = GraphFileRoot;
            foreach (var g in gn.EnumerateGraph6File())
            {
                total++;
                if (forbidden.Any(h => g.Contains(h, Induced)))
                {
                    skipped++;
                    continue;
                }

                gn.AddWinner(g);
            }

            System.Console.WriteLine(100 * skipped / total + "% skipped");
        }
Пример #8
0
        public static void Go()
        {
            using (var graphIO = new GraphEnumerator(WinnersFile, MinVertices, MaxVertices))
            {
                graphIO.FileRoot = @"C:\Users\landon\Google Drive\research\Graph6\graph";
                foreach (var g in graphIO.EnumerateGraph6File())
                {
                    if (MaxIndependenceNumber < int.MaxValue)
                    {
                        if (g.EnumerateMaximalIndependentSets().Any(mis => mis.Count > MaxIndependenceNumber))
                        {
                            continue;
                        }
                    }

                    if (MaxDegree < int.MaxValue && g.MaxDegree > MaxDegree)
                    {
                        continue;
                    }

                    if (AT)
                    {
                        System.Console.Write("checking " + g.ToGraph6() + "...");
                        if (!g.IsOnlineFGChoosable(v => g.Degree(v) - 1, v => 1))
                        {
                            System.Console.WriteLine(" not paintable");
                        }
                        else
                        {
                            var result = HasFOrientation(g, v => g.Degree(v) - 1, true);
                            if (result != null)
                            {
                                graphIO.AddWinner(g, result.Graph);
                                System.Console.WriteLine(string.Format(" is d_1-AT"));
                            }
                            else
                            {
                                System.Console.WriteLine(" not AT");
                            }
                        }
                    }
                    else if (Offline)
                    {
                        if (g.EnumerateMaximalIndependentSets().Any(I => I.Count > 2))
                        {
                            continue;
                        }
                        System.Console.Write("checking " + g.ToGraph6() + "...");

                        List <List <int> > badAssignment;
                        var bg = new BitGraph_long(g.GetEdgeWeights());

                        System.Console.Write("checking " + g.ToGraph6() + "...");
                        if (bg.IsFChoosable(v => bg.Degree(v) - 1, out badAssignment))
                        {
                            graphIO.AddWinner(g);
                            System.Console.WriteLine(string.Format(" is {0}-fold d_1-choosable", Fold));
                        }
                        else
                        {
                            System.Console.WriteLine(" not choosable");
                        }
                    }
                    else
                    {
                        if (!DiamondFreeOnly || !g.ContainsInduced(Choosability.Graphs.Diamond))
                        {
                            System.Console.Write("checking " + g.ToGraph6() + "...");
                            if (g.IsOnlineFGChoosable(v => Fold * g.Degree(v) - 1, v => Fold))
                            {
                                graphIO.AddWinner(g);
                                System.Console.WriteLine(string.Format(" is {0}-fold d_1-paintable", Fold));
                            }
                            else
                            {
                                System.Console.WriteLine(" not paintable");
                            }
                        }
                        else
                        {
                            System.Console.WriteLine("skipping due to diamond " + g.ToGraph6());
                        }
                    }
                }
            }
        }
Пример #9
0
        public static void Go()
        {
            using (var graphEnumerator = new GraphEnumerator(WinnersFile, MinVertices, MaxVertices, false))
            {
                graphEnumerator.FileRoot        = @"C:\Users\landon\Google Drive\research\Graph6\graph";
                graphEnumerator.WeightCondition = WeightCondition;
                graphEnumerator.OnlyExcludeBySpanningSubgraphs = false;
                foreach (var g in graphEnumerator.EnumerateGraph6File(Filter, EnumerateWeightings, induced: true))
                {
                    if (MaxIndependenceNumber < int.MaxValue)
                    {
                        if (g.EnumerateMaximalIndependentSets().Any(mis => mis.Count > MaxIndependenceNumber))
                        {
                            continue;
                        }
                    }

                    if (g.MaxDegree > MaxDegree)
                    {
                        continue;
                    }

                    if (g.MinDegree < MinDegree)
                    {
                        continue;
                    }

                    if (Mic)
                    {
                        System.Console.Write("checking " + g.ToGraph6() + " with weights [" + string.Join(",", g.VertexWeight) + "] ...");

                        var micScore = g.Vertices.Sum(v => g.VertexWeight[v] + 1);

                        if (g.Mic() >= micScore)
                        {
                            graphEnumerator.AddWinner(g);
                            System.Console.WriteLine(string.Format(" is f-KP"));
                        }
                        else
                        {
                            System.Console.WriteLine(" not f-mic'able");
                        }
                    }
                    else if (AT)
                    {
                        System.Console.Write("checking " + g.ToGraph6() + " with weights [" + string.Join(",", g.VertexWeight) + "] ...");
                        if (!Not)
                        {
                            if (!g.IsOnlineFGChoosable(v => g.Degree(v) - g.VertexWeight[v], v => 1))
                            {
                                System.Console.WriteLine(" not paintable");
                            }
                            else
                            {
                                var result = HasFOrientation(g, v => g.Degree(v) - g.VertexWeight[v], true);

                                if (result != null)
                                {
                                    if (OddAT)
                                    {
                                        if (Math.Abs(result.Even - result.Odd) % 2 == 1)
                                        {
                                            graphEnumerator.AddWinner(g, result.Graph);
                                            System.Console.WriteLine(string.Format(" is odd f-AT"));
                                        }
                                        else
                                        {
                                            System.Console.WriteLine(string.Format(" not odd f-AT"));
                                        }
                                    }
                                    else
                                    {
                                        graphEnumerator.AddWinner(g, result.Graph);
                                        System.Console.WriteLine(string.Format(" is f-AT"));
                                    }
                                }
                                else
                                {
                                    System.Console.WriteLine(" not AT");
                                }
                            }
                        }
                        else
                        {
                            var good   = !g.IsOnlineFGChoosable(v => g.Degree(v) - g.VertexWeight[v], v => 1);
                            var result = HasFOrientation(g, v => g.Degree(v) - g.VertexWeight[v], true);
                            good |= result == null || OddAT && Math.Abs(result.Even - result.Odd) % 2 == 0;
                            if (good)
                            {
                                graphEnumerator.AddWinner(g);
                                System.Console.WriteLine(string.Format(" not f-AT"));
                            }
                            else
                            {
                                System.Console.WriteLine(" is AT");
                            }
                        }
                    }
                    else if (Offline)
                    {
                        List <List <int> > badAssignment;
                        var bg = new BitGraph_long(g.GetEdgeWeights());

                        System.Console.Write("checking " + " with weights [" + string.Join(",", g.VertexWeight) + "] ...");
                        if (bg.IsFChoosable(v => bg.Degree(v) - g.VertexWeight[v], out badAssignment))
                        {
                            graphEnumerator.AddWinner(g);
                            System.Console.WriteLine(string.Format(" is {0}-fold f-choosable", Fold));
                        }
                        else
                        {
                            System.Console.WriteLine(" not choosable");
                        }
                    }
                    else
                    {
                        System.Console.Write("checking " + " with weights [" + string.Join(",", g.VertexWeight) + "] ...");
                        if (!Not)
                        {
                            if (g.IsOnlineFGChoosable(v => Fold * g.Degree(v) - g.VertexWeight[v], v => Fold))
                            {
                                graphEnumerator.AddWinner(g);
                                System.Console.WriteLine(string.Format(" is {0}-fold f-paintable", Fold));
                            }
                            else
                            {
                                System.Console.WriteLine(" not paintable");
                            }
                        }
                        else
                        {
                            if (!g.IsOnlineFGChoosable(v => Fold * g.Degree(v) - g.VertexWeight[v], v => Fold))
                            {
                                graphEnumerator.AddWinner(g);
                                System.Console.WriteLine(string.Format(" is not {0}-fold f-paintable", Fold));
                            }
                            else
                            {
                                System.Console.WriteLine(" paintable");
                            }
                        }
                    }
                }
            }

            if (Not)
            {
                EliminateDoubleEdgeNotSubdivisions.Go(WinnersFile, AT);
            }
            else
            {
                EliminiteDoubleEdgeSubdivisions.Go(WinnersFile);
            }
        }