Example #1
0
        public void ReadHardcoded()
        {
            double[][]   Xs;
            double[][]   Ys;
            double[][]   Xd;
            double[][]   Yd;
            double[][][] Xt;
            double[][][] Yt;
            double[][][] Xtl;
            double[][][] Ytl;

            // marginal supply curves
            Xs          = new double[2][];
            Ys          = new double[2][];
            Xs[0]       = new double[] { 0.0, 2000.0, 4000.0, 5000.0, 7500.0, 10000.0, 20000.0, 30000.0, 50000.0, 65000.0 };
            Xs[1]       = new double[] { 0.0, 1000.0, 2500.0, 5000.0, 8000.0, 10000.0, 15000.0, 25000.0 };
            Ys[0]       = new double[] { 3.0, 3.061, 3.122, 3.154, 3.234, 3.316, 3.664, 4.050, 4.946, 5.747 };
            Ys[1]       = new double[] { 1.50, 1.546, 1.617, 1.743, 1.907, 2.025, 2.352, 3.176 };
            supplyNodes = new Nodes(Xs, Ys);

            // marginal demand curves
            Xd          = new double[3][];
            Yd          = new double[3][];
            Xd[0]       = new double[] { 0.0, 2000.0, 4000.0, 7500.0, 10000.0, 15000.0, 20000.0, 30000.0, 40000.0 };
            Xd[1]       = new double[] { 0.0, 3000.0, 7500.0, 12500.0, 20000.0, 30000.0 };
            Xd[2]       = new double[] { 0.0, 2500.0, 5000.0, 10000.0, 15000.0, 25000.0, 35000.0 };
            Yd[0]       = new double[] { 15.0, 12.782, 10.892, 8.232, 6.740, 4.518, 3.028, 1.361, 0.611 };
            Yd[1]       = new double[] { 10.0, 8.607, 6.873, 5.353, 3.679, 2.231 };
            Yd[2]       = new double[] { 25.0, 19.470, 15.163, 9.197, 5.578, 2.052, 0.755 };
            demandNodes = new Nodes(Xd, Yd);

            // transportation costs
            Xt        = new double[3][][];
            Xt[0]     = new double[2][];
            Xt[1]     = new double[2][];
            Xt[2]     = new double[2][];
            Xt[0][0]  = new double[] { 0.0, 40000.0 };
            Xt[0][1]  = new double[] { 0.0, 20000.0 };
            Xt[1][0]  = new double[] { 0.0, 43000.0 };
            Xt[1][1]  = new double[] { 0.0, 50000.0 };
            Xt[2][0]  = new double[] { 0.0, 50000.0 };
            Xt[2][1]  = new double[] { 0.0, 17500.0 };
            Yt        = new double[3][][];
            Yt[0]     = new double[2][];
            Yt[1]     = new double[2][];
            Yt[2]     = new double[2][];
            Yt[0][0]  = new double[] { 1.5, 1.5 };
            Yt[0][1]  = new double[] { 0.75, 0.75 };
            Yt[1][0]  = new double[] { 1.25, 1.25 };
            Yt[1][1]  = new double[] { 100.0, 100.0 };
            Yt[2][0]  = new double[] { 100.0, 100.0 };
            Yt[2][1]  = new double[] { 1.3, 1.3 };
            linkCosts = new LinkCosts(Xt, Yt);

            // transportation losses
            Xtl        = new double[3][][];
            Xtl[0]     = new double[2][];
            Xtl[1]     = new double[2][];
            Xtl[2]     = new double[2][];
            Xtl[0][0]  = new double[] { 0.0, 5000.0, 10000.0, 15000.0, 20000.0, 30000.0, 40000.0 };
            Xtl[0][1]  = new double[] { 0.0, 2500.0, 5000.0, 10000.0, 15000.0, 20000.0 };
            Xtl[1][0]  = new double[] { 0.0, 5000.0, 10000.0, 17500.0, 25000.0, 35000.0, 43000.0 };
            Xtl[1][1]  = new double[] { 0.0, 50000.0 };
            Xtl[2][0]  = new double[] { 0.0, 50000.0 };
            Xtl[2][1]  = new double[] { 0.0, 2500.0, 5000.0, 7500.0, 10000.0, 15000.0, 17500.0 };
            Ytl        = new double[3][][];
            Ytl[0]     = new double[2][];
            Ytl[1]     = new double[2][];
            Ytl[2]     = new double[2][];
            Ytl[0][0]  = new double[] { 0.0, 2661.0, 8147.0, 13753.0, 19134.0, 29426.0, 39487.0 };
            Ytl[0][1]  = new double[] { 0.0, 0.0, 1390.0, 6275.0, 11866.0, 17515.0 };
            Ytl[1][0]  = new double[] { 0.0, 1467.0, 5821.0, 13959.0, 22448.0, 33443.0, 41917.0 };
            Ytl[1][1]  = new double[] { 0.0, 0.0 };
            Ytl[2][0]  = new double[] { 0.0, 0.0 };
            Ytl[2][1]  = new double[] { 0.0, 303.0, 1717.0, 3707.0, 6071.0, 11403.0, 14209.0 };
            linkLosses = new LinkLosses(Xtl, Ytl);

            // initial guess
            Q    = new double[3][];
            Q[0] = new double[] { 10000, 10000 };
            Q[1] = new double[] { 10000, 0 };
            Q[2] = new double[] { 0, 10000 };
        }
Example #2
0
        public string ReadFromExcel(string fileName)
        {
            if (!File.Exists(fileName))
            {
                return("Cannot find file: " + fileName);
            }

            IWorkbook wkbk;

            try
            {
                FileStream fs = new FileStream(fileName, FileMode.Open, FileAccess.Read);
                wkbk = WorkbookFactory.Create(fs);
                fs.Close();
            }
            catch (Exception)
            {
                return("Unable to open input spreadsheet. Is file open?");
            }

            List <string> sheets = new List <string> {
                "Supply Curves", "Demand Curves", "Transportation Costs", "Transportation Losses", "Initial Guess"
            };

            string sheetsExist = CheckSheetsExist(wkbk, sheets);

            if (sheetsExist != string.Empty)
            {
                return(sheetsExist);
            }

            string error = string.Empty;

            Nodes sNodes = ReadNodesDataFromSheet(wkbk, "Supply Curves");

            error = CheckEqualNumberPoints(sNodes.x, sNodes.y);
            if (error != string.Empty)
            {
                return(error);
            }
            supplyNodes = new Nodes(sNodes.x, sNodes.y);

            Nodes dNodes = ReadNodesDataFromSheet(wkbk, "Demand Curves");

            error = CheckEqualNumberPoints(dNodes.x, dNodes.y);
            if (error != string.Empty)
            {
                return(error);
            }
            demandNodes = new Nodes(dNodes.x, dNodes.y);

            Links costs = ReadLinksDataFromSheet(wkbk, "Transportation Costs");

            error = CheckEqualNumberPoints(costs.x, costs.y);
            if (error != string.Empty)
            {
                return(error);
            }
            linkCosts = new LinkCosts(costs.x, costs.y);

            Links losses = ReadLinksDataFromSheet(wkbk, "Transportation Losses");

            error = CheckEqualNumberPoints(losses.x, losses.y);
            if (error != string.Empty)
            {
                return(error);
            }
            linkLosses = new LinkLosses(losses.x, losses.y);

            Q     = ReadQuantityDataFromSheet(wkbk, "Initial Guess");
            error = CheckEqualNumberPoints(Q);
            if (error != string.Empty)
            {
                return(error);
            }

            return(string.Empty);
        }