private int calculateTripAmount(List<TaxiDemandPerLor> demandPerLor) { int amount = 0; for (TaxiDemandPerLor tdpl : demandPerLor) { amount += tdpl.getFromLor(); } return amount; }
private void addStartVehicles(int currentVeh, List<TaxiDemandPerLor> demandPerLor, int hr) { int amountOfTrips = this.calculateTripAmount(demandPerLor); int count = 0; for (TaxiDemandPerLor dpl : demandPerLor) { if (dpl.getFromLor() == 0) continue; double shareOfTripsFromHere = (double) dpl.getFromLor() / (double) amountOfTrips; long taxiAmountFromHere = Math.round(currentVeh * shareOfTripsFromHere); for (int i = 0; i < taxiAmountFromHere; i++) { Id<Vehicle> vid = Id.create("t_" + dpl.getFromId() + "_" + hr + "_" + i, Vehicle.class); VData v = new VData(vid, dpl.getFromId()); int start = (hr % 24) * 3600 - 1800; int end = start + 7200 + rnd.nextInt(16 * 3600); v.t0 = start; v.t1 = end; vdata.add(v); count++; } } Collections.sort(demandPerLor); TaxiDemandPerLor dpl[] = {Collections.max(demandPerLor), demandPerLor.get(1)}; int i = 0; int rest = currentVeh - count; while (rest > 0) { Id<Vehicle> vid = Id.create("t_" + dpl[i % 2].getFromId() + "_" + (hr % 24) + "_x" + i, Vehicle.class); VData v = new VData(); i++; v.lor = dpl[i % 2].getFromId(); v.vid = vid; int start = (hr % 24) * 3600 + rnd.nextInt(3600); int end = start + rnd.nextInt(8 * 3600); v.t0 = start; v.t1 = end; rest--; vdata.add(v); } System.out.println((hr % 24) + ": " + i); }