예제 #1
0
        /// <summary>
        /// Initializes hypermaps of lists
        /// </summary>
        static ListHypManager InitializeHypermaps()
        {
            FileStream ftame = null;

            if (File.Exists("string_archive.txt"))
            {
                ftame = new FileStream("string_archive.txt", FileMode.Open);
            }

            if (!File.Exists("000.txt"))
            {
                throw new Exception("File 000.txt is required for processing Flyspeck linear programs");
            }

            FileStream     fdefs     = new FileStream("000.txt", FileMode.Open);
            ListHypManager hypermaps = null;

            try
            {
                hypermaps = new ListHypManager(ftame != null ? new StreamReader(ftame) : null,
                                               new StreamReader(fdefs));
            }
            finally
            {
                if (ftame != null)
                {
                    ftame.Close();
                }

                fdefs.Close();
            }

            return(hypermaps);
        }
예제 #2
0
        /// <summary>
        /// Creates a list hypermap from its string representation
        /// </summary>
        /// <param name="str"></param>
        public ListHyp(string str, ListHypManager manager)
        {
            this.Manager   = manager;
            this.rawString = str;
            this.list      = new List <List <int> >();

            string[] els = str.Split(' ');
            this.Id = els[0];

            for (int i = 2; i < els.Length;)
            {
                string el = els[i++];
                if (el == null || el == "")
                {
                    continue;
                }

                int        n    = int.Parse(el);
                List <int> face = new List <int>();

                for (int k = 0; k < n; k++)
                {
                    el = els[i++];
                    face.Add(int.Parse(el));
                }

                list.Add(face);
            }
        }
예제 #3
0
        /// <summary>
        /// Processes all Flyspeck linear programs in the current directory
        /// </summary>
        static void ProcessFlyspeckLP()
        {
            ListHypManager hypermaps = InitializeHypermaps();

            // GenerateExamples();
            string[]     files = Directory.GetFiles(".", "*.lp");
            FileStream   fs    = new FileStream("all_tests.hl", FileMode.Create);
            StreamWriter w     = new StreamWriter(fs);


            w.WriteLine("let start = Sys.time();;");

            int i = 1;

            foreach (string file in files)
            {
                string   name     = new FileInfo(file).Name;
                string[] els      = name.Split('.');
                ListHyp  hypermap = hypermaps[els[0]];
                hypermap.ComputeAllSets();

                ProcessLP(els[0], new LpNumber(12), hypermap);

                w.WriteLine("\"Case: {0}/{1}\";;", i++, files.Length);
                w.WriteLine("let _ = needs \"{0}\" in Sys.time() -. start;;", els[0] + "_out.hl");
                // break;
            }

            w.Flush();
            fs.Close();
        }
예제 #4
0
        /// <summary>
        /// Creates a list hypermap from its string representation
        /// </summary>
        /// <param name="str"></param>
        public ListHyp(string str, ListHypManager manager)
        {
            this.Manager = manager;
            this.rawString = str;
            this.list = new List<List<int>>();

            string[] els = str.Split(' ');
            this.Id = els[0];

            for (int i = 2; i < els.Length;)
            {
                string el = els[i++];
                if (el == null || el == "")
                    continue;

                int n = int.Parse(el);
                List<int> face = new List<int>();

                for (int k = 0; k < n; k++)
                {
                    el = els[i++];
                    face.Add(int.Parse(el));
                }

                list.Add(face);
            }
        }
예제 #5
0
 /// <summary>
 /// Creates a list hypermap from the given list of numbers
 /// </summary>
 /// <param name="data"></param>
 /// <param name="manager"></param>
 public ListHyp(List<List<int>> data, ListHypManager manager)
     : this(manager)
 {
     // Make a deep copy
     foreach (var f0 in data)
     {
         List<int> f = new List<int>();
         f.AddRange(f0);
         this.list.Add(f);
     }
 }
예제 #6
0
        // Main
        static int Main(string[] args)
        {
            try
            {
                FileStream flog = new FileStream("log.txt", FileMode.Create);
                log = new StreamWriter(flog);

                using (log)
                {
                    // GenerateArithTest();
                    // return;

                    // Flyspeck
                    if (args.Length == 0 || args.Length == 1)
                    {
                        ListHypManager hypermaps = InitializeHypermaps();
                        Console.WriteLine("Processing Flyspeck linear program(s)");
                        Console.WriteLine();

                        if (args.Length == 1)
                        {
                            ProcessFlyspeckLP(args[0], hypermaps);
                        }
                        else
                        {
                            ProcessFlyspeckLPs(hypermaps);
                        }

                        return(0);
                    }

                    // Incorrect number of arguments
                    if (args.Length != 2)
                    {
                        Console.WriteLine("Usage: LP-HL lp_name upper_bound");
                        Console.WriteLine("Files {lp_name}.lp and {lp_name}.txt must be in the current directory.");
                        Console.WriteLine("{upper_bound} is a decimal number");
                        return(1);
                    }

                    // Specific LP
                    string   name       = args[0];
                    LpNumber upperBound = new LpNumber(decimal.Parse(args[1]));
                    ProcessLP(name, upperBound, null, false, true);
                }
            }
            catch (Exception e)
            {
                Console.Error.WriteLine("ERROR: {0}", e.Message);
                return(2);
            }

            return(0);
        }
예제 #7
0
 /// <summary>
 /// Creates a list hypermap from the given list of numbers
 /// </summary>
 /// <param name="data"></param>
 /// <param name="manager"></param>
 public ListHyp(List <List <int> > data, ListHypManager manager)
     : this(manager)
 {
     // Make a deep copy
     foreach (var f0 in data)
     {
         List <int> f = new List <int>();
         f.AddRange(f0);
         this.list.Add(f);
     }
 }
예제 #8
0
        /// <summary>
        /// Processes one Flyspeck LP
        /// </summary>
        /// <param name="fname"></param>
        static string ProcessFlyspeckLP(string fname, ListHypManager hypermaps)
        {
            FileStream info = new FileStream(fname, FileMode.Open);

            try
            {
                string  name;
                bool    infeasible;
                ListHyp hypermap = hypermaps.ComputeHypermap(new StreamReader(info), out name, out infeasible);

                ProcessLP(name, new LpNumber(12), hypermap, infeasible, false);
                return(name);
            }
            finally
            {
                info.Close();
            }
        }
예제 #9
0
        /// <summary>
        /// Initializes hypermaps of lists
        /// </summary>
        static ListHypManager InitializeHypermaps()
        {
            FileStream     ftame     = new FileStream("tame_archive.txt", FileMode.Open);
            FileStream     fdefs     = new FileStream("000.txt", FileMode.Open);
            ListHypManager hypermaps = null;

            try
            {
                hypermaps = new ListHypManager(new StreamReader(ftame), new StreamReader(fdefs));
            }
            finally
            {
                ftame.Close();
                fdefs.Close();
            }

            return(hypermaps);
        }
예제 #10
0
        /// <summary>
        /// Processes all Flyspeck linear programs in the current directory
        /// </summary>
        static void ProcessFlyspeckLPs(ListHypManager hypermaps)
        {
            // GenerateExamples();
            string[] files = Directory.GetFiles(".", "flyspeck*.txt");
//            FileStream fs = new FileStream("all_tests.hl", FileMode.Create);
//            StreamWriter w = new StreamWriter(fs);


//            w.WriteLine("let start = Sys.time();;");

//            int i = 1;
            foreach (string file in files)
            {
                string name = ProcessFlyspeckLP(file, hypermaps);
//                w.WriteLine("\"Case: {0}/{1}\";;", i++, files.Length);
//                w.WriteLine("let _ = needs \"{0}\" in Sys.time() -. start;;", name + "_out.hl");
                // break;
            }

//            w.Flush();
//            fs.Close();
        }
예제 #11
0
 /// <summary>
 /// Private constructor
 /// </summary>
 /// <param name="manager"></param>
 private ListHyp(ListHypManager manager)
 {
     this.Manager = manager;
     this.list = new List<List<int>>();
 }
예제 #12
0
        /// <summary>
        /// Initializes hypermaps of lists
        /// </summary>
        static ListHypManager InitializeHypermaps()
        {
            FileStream ftame = new FileStream("tame_archive.txt", FileMode.Open);
            FileStream fdefs = new FileStream("000.txt", FileMode.Open);
            ListHypManager hypermaps = null;

            try
            {
                hypermaps = new ListHypManager(new StreamReader(ftame), new StreamReader(fdefs));
            }
            finally
            {
                ftame.Close();
                fdefs.Close();
            }

            return hypermaps;
        }
예제 #13
0
 /// <summary>
 /// Private constructor
 /// </summary>
 /// <param name="manager"></param>
 private ListHyp(ListHypManager manager)
 {
     this.Manager = manager;
     this.list    = new List <List <int> >();
 }