1 packagevrp;2
3 importjava.io.BufferedReader;4 importjava.io.File;5 importjava.io.FileNotFoundException;6 importjava.io.FileReader;7 importjava.io.IOException;8 importjava.util.ArrayList;9 importjava.util.Arrays;10 importjava.util.Collections;11 importjava.util.Comparator;12 importjava.util.LinkedList;13 importjava.util.List;14
15 /**
16 *@author陈海越17 *@version1.018 *@since新标准版5.019 *20 *
21 * 历史:22 * 建立: 2019/9/2 陈海越23 *24 */
25 public classVRPTest {26
27 public static final String KONGGE = "\\s+|\r";28 public static final int FACTOR = 1;29 private intvehicleNumber;30 private inttotalPointNumber;31 private LinkedList vehicleCapacityList = new LinkedList<>();32 private LinkedList usedVehicleList = new LinkedList<>();33 private List postOfficeList = new ArrayList<>();34 private List routeList = new ArrayList<>();35 private float[][] distMatrix;36 private List savingList = new ArrayList<>();37
38
39 public static void main(String[] args) throwsException {40 VRPTest vrpTest = newVRPTest();41 vrpTest.readFromFile("C:\\Users\\Administrator\\Documents\\vrp_data\\test3.txt");42 vrpTest.vrp();43 }44
45 /**
46 * 从文件中读取数据47 */
48 public voidreadFromFile(String fileName) {49 File file = newFile(fileName);50 try{51 BufferedReader br = new BufferedReader(newFileReader(52 file));53 constructGeneral(br);54 constructVehicle(br);55 constructNodes(br);56 } catch(FileNotFoundException e) {57 e.printStackTrace();58 } catch(IOException e) {59 e.printStackTrace();60 }61 }62
63 private void constructGeneral(BufferedReader br) throwsIOException {64 String first =br.readLine().trim();65 String[] firstLineArr =first.split(KONGGE);66 vehicleNumber = Integer.parseInt(firstLineArr[0]);67 totalPointNumber = Integer.parseInt(firstLineArr[1]);68 }69
70 private void constructVehicle(BufferedReader br) throwsIOException {71 String vehicleCapacity =br.readLine().trim();72 for(String s : vehicleCapacity.split(KONGGE)) {73 vehicleCapacityList.add(Float.parseFloat(s));74 }75 }76
77 private void constructNodes(BufferedReader br) throwsIOException {78 for (int i = 0; i < totalPointNumber; i++) {79 String postStr =br.readLine().trim();80 String[] postArr =postStr.split(KONGGE);81 PostOffice postOffice =
82 new PostOffice(Integer.parseInt(postArr[0]), postArr[1],83 Float.parseFloat(postArr[2]),84 Float.p