Exemplo n.º 1
0
        private void 打开ToolStripMenuItem_Click(object sender, EventArgs e)
        {
            FolderSelectDialog fd = new FolderSelectDialog();

            fd.Title = "请选择输入文件存放路径";
            bool is_show = fd.ShowDialog();

            while (is_show == false)
            {
                MessageBox.Show("请选择输入文件!!!");
                is_show = fd.ShowDialog();
            }
            string input_file_str = fd.FileName;

            train_path = c.read_file(input_file_str + "\\train_path.csv");
            if (train_path == null)
            {
                MessageBox.Show("文件打开错误!!!");
                return;
            }
            zone = c.read_file(input_file_str + "\\zone.csv");
            dataGridView1.DataSource = train_path;
            flag = 1;
        }
        public void main(DataTable train_path, DataTable zone)
        {
            init(train_path);
            FolderSelectDialog fs = new FolderSelectDialog();

            fs.Title = "请选择输出文件存放路径";
            string strpath   = null;
            bool   is_select = fs.ShowDialog();

            while (is_select == false)
            {
                MessageBox.Show("请选择文件夹!!!");
                is_select = fs.ShowDialog();
            }
            strpath = fs.FileName;
            DataTable node = define_node(), road_link = define_road_link(), agent = define_agent(), agent_type = define_agent_type();
            DataTable bt_node = define_node(), bt_road_link = define_road_link(), bt_agent = define_agent();
            DataTable conf_node = define_node(), conf_road_link = define_road_link(), conf_agent = define_agent();

            for (int station = 1; station <= station_num; station++)
            {
                for (int t = 0; t < time_len; t++)
                {
                    int     now_time     = int2HHMM(t);
                    DataRow now_node     = node.NewRow();
                    int     zone_id      = get_zone_id(zone, station, now_time);
                    int     node_type_id = get_node_type(train_path, station, now_time);
                    g_train_node(now_node, station, now_time, zone_id, node_type_id);
                    node.Rows.Add(now_node);
                }
            }//space time node
            List <conf> all_confs = get_all_conf(train_path);
            int         conf_road_link_id = 1, conf_agent_id = 1;

            for (int i = 0; i < all_confs.Count; i++)
            {
                DataRow conf_node1 = conf_node.NewRow();
                DataRow conf_node2 = conf_node.NewRow();
                g_conf_node(conf_node1, all_confs[i].station, all_confs[i].start_time, all_confs[i].flag);
                conf_node.Rows.Add(conf_node1);
                if (all_confs[i].start_time != all_confs[i].end_time)
                {
                    g_conf_node(conf_node2, all_confs[i].station, all_confs[i].end_time, all_confs[i].flag);
                    conf_node.Rows.Add(conf_node2);
                }
                DataRow conf_link = conf_road_link.NewRow();
                g_conf_road_link(conf_link, all_confs[i].station, all_confs[i].start_time, all_confs[i].end_time, all_confs[i].flag, conf_road_link_id++);
                conf_road_link.Rows.Add(conf_link);
                DataRow conf_agent_ = conf_agent.NewRow();
                g_conf_agent(conf_agent_, all_confs[i].station, all_confs[i].start_time, all_confs[i].end_time, all_confs[i].flag, conf_agent_id++);
                conf_agent.Rows.Add(conf_agent_);
            }//train conf
            int road_link_id = 1, agent_id = 1;

            for (int i = 0; i < train_path.Rows.Count; i++)
            {
                List <int[]> node_seq  = trans_node_seq((string)train_path.Rows[i][1]);
                List <int>   time_seq  = trans_time_seq((string)train_path.Rows[i][2]);
                int          flag      = int.Parse((string)train_path.Rows[i][9]);
                DataRow      agent_row = agent.NewRow();
                agent_row[0] = agent_id++;
                string time_period = null, node_sequence = null, time_sequence = null;
                int    cost = 0;
                for (int ii = 0; ii < node_seq.Count - 1; ii++)
                {
                    DataRow road_link_ = road_link.NewRow();
                    int     f_s        = node_seq[ii][0];
                    int     t_s        = node_seq[ii + 1][0];
                    int     f_t        = time_seq[ii];
                    int     t_t        = time_seq[ii + 1];
                    g_train_link(road_link_, f_s, t_s, f_t, t_t, road_link_id++);
                    road_link.Rows.Add(road_link_);
                    if (ii == 0)
                    {
                        int o_zone_id = get_zone_id(zone, f_s, f_t);
                        agent_row[1]   = o_zone_id;
                        agent_row[3]   = f_s * 100000 + f_t;
                        time_period   += time_int2string(f_t) + "_";
                        node_sequence += (f_s * 100000 + f_t).ToString() + ";" + (t_s * 100000 + t_t).ToString();
                        time_sequence += time_int2string(f_t) + ";" + time_int2string(t_t);
                        cost           = f_t;
                    }
                    else if (ii == node_seq.Count - 2)
                    {
                        int d_zone_id = get_zone_id(zone, t_s, t_t);
                        agent_row[2]   = d_zone_id;
                        agent_row[4]   = t_s * 100000 + t_t;
                        time_period   += time_int2string(t_t);
                        node_sequence += ";" + (t_s * 100000 + t_t).ToString();
                        time_sequence += ";" + time_int2string(t_t);
                        cost           = time_sub(t_t, cost);
                    }
                    else
                    {
                        node_sequence += ";" + (t_s * 100000 + t_t).ToString();
                        time_sequence += ";" + time_int2string(t_t);
                    }
                }
                agent_row[5] = "train_path";
                agent_row[6] = time_period;
                agent_row[7] = 1;
                for (int ii = 8; ii <= 10; ii++)
                {
                    agent_row[ii] = cost;
                }
                agent_row[11] = node_sequence;
                agent_row[12] = time_sequence;
                agent.Rows.Add(agent_row);
            }//train path
            int bt_road_link_id = 1, bt_agent_id = 1;

            for (int i = 0; i < train_path.Rows.Count; i++)
            {
                for (int station = 1; station <= station_num; station++)
                {
                    int[] u_d_t   = get_station_time(train_path.Rows[i], station, out int u_tf, out int u_tp, out int d_tf, out int d_tp);
                    int[] u_range = new int[2] {
                        time_sub(u_d_t[0], u_tf), time_add(u_d_t[0], u_tp)
                    };
                    int[] d_range = new int[2] {
                        time_sub(u_d_t[1], d_tf), time_add(u_d_t[1], d_tp)
                    };
                    if (u_tf != 0)
                    {
                        DataRow bt_node_u1 = bt_node.NewRow();
                        DataRow bt_node_u2 = bt_node.NewRow();
                        g_bt_node(bt_node_u1, station, u_range[0], 1);
                        g_bt_node(bt_node_u2, station, u_range[1], 1);
                        bt_node.Rows.Add(bt_node_u1); bt_node.Rows.Add(bt_node_u2);
                        DataRow bt_link1 = bt_road_link.NewRow();
                        g_bt_road_link(bt_link1, station, u_range[0], u_range[1], 1, bt_road_link_id++);
                        bt_road_link.Rows.Add(bt_link1);
                        DataRow bt_agent1 = bt_agent.NewRow();
                        g_bt_agent(bt_agent1, station, u_range[0], u_range[1], 1, bt_agent_id++);
                        bt_agent.Rows.Add(bt_agent1);
                    }
                    if (d_tf != 0)
                    {
                        DataRow bt_node_d1 = bt_node.NewRow();
                        DataRow bt_node_d2 = bt_node.NewRow();
                        g_bt_node(bt_node_d1, station, d_range[0], 2);
                        g_bt_node(bt_node_d2, station, d_range[1], 2);
                        bt_node.Rows.Add(bt_node_d1); bt_node.Rows.Add(bt_node_d2);
                        DataRow bt_link2 = bt_road_link.NewRow();
                        g_bt_road_link(bt_link2, station, d_range[0], d_range[1], 2, bt_road_link_id++);
                        bt_road_link.Rows.Add(bt_link2);
                        DataRow bt_agent2 = bt_agent.NewRow();
                        g_bt_agent(bt_agent2, station, d_range[0], d_range[1], 2, bt_agent_id++);
                        bt_agent.Rows.Add(bt_agent2);
                    }
                }
            }//blocking time
            if (!Directory.Exists(strpath + "\\train_path"))
            {
                Directory.CreateDirectory(strpath + "\\train_path");
            }
            SaveCsv(node, strpath + "\\train_path\\node");
            SaveCsv(road_link, strpath + "\\train_path\\road_link");
            SaveCsv(agent, strpath + "\\train_path\\agent");
            SaveCsv(agent_type, strpath + "\\train_path\\agent_type");
            if (!Directory.Exists(strpath + "\\train_conflicts"))
            {
                Directory.CreateDirectory(strpath + "\\train_conflicts");
            }
            conf_node = GetDistinctSelf(conf_node, "node_id");
            SaveCsv(conf_node, strpath + "\\train_conflicts\\node");
            SaveCsv(conf_road_link, strpath + "\\train_conflicts\\road_link");
            SaveCsv(conf_agent, strpath + "\\train_conflicts\\agent");
            SaveCsv(agent_type, strpath + "\\train_conflicts\\agent_type");
            if (!Directory.Exists(strpath + "\\blocking_time"))
            {
                Directory.CreateDirectory(strpath + "\\blocking_time");
            }
            bt_node = GetDistinctSelf(bt_node, "node_id");
            SaveCsv(bt_node, strpath + "\\blocking_time\\node");
            SaveCsv(bt_road_link, strpath + "\\blocking_time\\road_link");
            SaveCsv(bt_agent, strpath + "\\blocking_time\\agent");
            SaveCsv(agent_type, strpath + "\\blocking_time\\agent_type");
            node.Merge(bt_node);
            for (int i = 0; i < bt_road_link.Rows.Count; i++)
            {
                bt_road_link.Rows[i][1] = road_link_id++;
            }
            road_link.Merge(bt_road_link);
            for (int i = 0; i < bt_agent.Rows.Count; i++)
            {
                bt_agent.Rows[i][0] = agent_id++;
            }
            agent.Merge(bt_agent);
            if (!Directory.Exists(strpath + "\\train_path and blocking_time"))
            {
                Directory.CreateDirectory(strpath + "\\train_path and blocking_time");
            }
            SaveCsv(node, strpath + "\\train_path and blocking_time\\node");
            SaveCsv(road_link, strpath + "\\train_path and blocking_time\\road_link");
            SaveCsv(agent, strpath + "\\train_path and blocking_time\\agent");
            SaveCsv(agent_type, strpath + "\\train_path and blocking_time\\agent_type");
            node.Merge(conf_node);
            for (int i = 0; i < conf_road_link.Rows.Count; i++)
            {
                conf_road_link.Rows[i][1] = road_link_id++;
            }
            road_link.Merge(conf_road_link);
            for (int i = 0; i < conf_agent.Rows.Count; i++)
            {
                conf_agent.Rows[i][0] = agent_id++;
            }
            agent.Merge(conf_agent);
            if (!Directory.Exists(strpath + "\\train_path and blocking_time and train_conflicts"))
            {
                Directory.CreateDirectory(strpath + "\\train_path and blocking_time and train_conflicts");
            }
            SaveCsv(node, strpath + "\\train_path and blocking_time and train_conflicts\\node");
            SaveCsv(road_link, strpath + "\\train_path and blocking_time and train_conflicts\\road_link");
            SaveCsv(agent, strpath + "\\train_path and blocking_time and train_conflicts\\agent");
            SaveCsv(agent_type, strpath + "\\train_path and blocking_time and train_conflicts\\agent_type");
        }