• 公交调度-车次链编制贪心算法


      1 package cn.edu.karel.work.public_transit_problem;
      2 
      3 import java.io.File;
      4 import java.io.FileNotFoundException;
      5 import java.io.FileReader;
      6 import java.io.IOException;
      7 import java.util.ArrayList;
      8 import java.util.List;
      9 
    
     18 public class GreedSolute {
     19     /** 发车时刻表数据 */
     20     static File forward = new File("D:/mycode/Eclipse/Bus Scheduel Problem/scheduel1/ForwardScheduel/start time.txt");
     21     static File backward = new File("D:/mycode/Eclipse/Bus Scheduel Problem/scheduel1/BackScheduel/start time.txt");
     22     static int sum = 0;
     23     
     24     public static void main(String[] args) throws IOException{
     25         /** 创建时刻表 */
     26         Scheduel scheduel = new Scheduel();
     27         inputForward(scheduel);
     28         inputBackward(scheduel);
     29         
     30         /** 固定行车计划 */
     31         ArrayList chain = creatFixedPlan(scheduel);
     32         
     33         /** 可变行车计划 */
     34         //chain = creatVariablePlan(scheduel,chain);
     35     }
     36     
     37     /**
     38      * 将发车时刻表中的所有车次按照 FIFO规则排序
     39      * 
     40      * @param scheduel 发车时刻表
     41      * @return list 排序后的车次序号列表
     42      */
     43     public static ArrayList sortScheduel(Scheduel scheduel){
     44         /** 排序后的车次序号列表 */
     45         ArrayList list = new ArrayList();
     46         
     47         int i = 0;
     48         int j = 0;
     49         int k = 0;
     50         while(i list,Scheduel scheduel){
     83         TrainsitChain chain = new TrainsitChain();
     84         
     85         /** 以当前剩余车次中的第一个车次为该车次链的首个车次*/
     86         int index = list.get(0);
     87         int len = scheduel.tranListForward.size();
     88         if(index >= len ){
     89             index -= len;
     90             chain.addTransit(scheduel.tranListBack.get(index));
     91         }else{
     92             chain.addTransit(scheduel.tranListForward.get(index));
     93         }
     94         list.remove(0);
     95         
     96         /**遍历当前剩余车次搜索到最长车次链 */
     97         int i=0;
     98         while(i= len)
    104             {
    105                 next -= len;
    106                 if(scheduel.tranListBack.get(next).getStartTime() >= chain.end){
    107                     /** 车次链上前后辆车次行驶方向不同 */
    108                     if(chain.theChain.get(l-1).isForward){
    109                         chain.addTransit(scheduel.tranListBack.get(next));
    110                         list.remove(i);
    111                     }
    112                     else
    113                         i++;
    114                 }
    115                 else
    116                     i++;
    117             }
    118             else{
    119                 if(scheduel.tranListForward.get(next).getStartTime() >= chain.end)
    120                 {
    121                     if(!chain.theChain.get(l-1).isForward){
    122                         chain.addTransit(scheduel.tranListForward.get(next));
    123                         list.remove(i);
    124                     }
    125                     else
    126                         i++;
    127                 }
    128                 else
    129                     i++;
    130             }
    131         }    
    132         return chain;
    133     }
    134     
    135     /**
    136      * 读取上行数据
    137      * @throws IOException 
    138      */
    139     public static void inputForward(Scheduel scheduel) throws IOException{
    140         try{
    141             int i = 0;
    142             FileInputStream fis = new FileInputStream(forward);
    143             InputStreamReader isr = new InputStreamReader(fis);
    144             @SuppressWarnings("resource")
    145             LineNumberReader lnr = new LineNumberReader(isr);
    146             String s = null;
    147             while ((s = lnr.readLine()) != null) {
    148                 int data = Integer.parseInt(s.trim());
    149                 Transit t = new Transit();
    150                 t.setID(i);
    151                 t.setStartTime(data);
    152                 t.setArriveTime(data+Transit.RUN_FOWARD_TIME);
    153                 t.setForward(true);
    154   
  • 相关阅读:
    23、Mybatis查询功能4(查询结果为一个map集合(多条数据))
    【关于检查请求参数的基本有效性】
    Arm Cache学习资料大汇总
    【kubernetes篇】如何精确控制滚动更新
    [附源码]计算机毕业设计JAVA校园淘宝节系统
    Hantek6022BE 虚拟示波器
    详解Nacos和Eureka的区别
    【ccc3.8】虚拟列表
    万应低代码CTO胡艳平:浅谈低代码在中大型企业数字化转型中的应用
    vue3检测是手机还是pc端,监测视图窗口变化
  • 原文地址:https://blog.csdn.net/weixin_67271870/article/details/128165608