Distribute the Buses

This commit is contained in:
EngOsamah 2020-12-07 02:05:51 +03:00
parent ee1cb4852c
commit b88a33a749
2 changed files with 65 additions and 9 deletions

View File

@ -25,6 +25,7 @@ public class MakkahCity {
private static final InputListener inputListener = new InputListener(); private static final InputListener inputListener = new InputListener();
private static final Thread t = new Thread(inputListener,"InputThread-Makkah"); private static final Thread t = new Thread(inputListener,"InputThread-Makkah");
private static boolean isAllRoutSet;
public static void main(String[] args) { public static void main(String[] args) {
@ -48,7 +49,6 @@ public class MakkahCity {
makeRoutes(); makeRoutes();
//Set Routes for Campaigns //Set Routes for Campaigns
setRoutesForCampaigns(Mashier.ARAFAT);
while(!firstDayTimeMan.isEnded()) { while(!firstDayTimeMan.isEnded()) {
checkInput(); checkInput();
//Start of Every hour //Start of Every hour
@ -57,15 +57,19 @@ public class MakkahCity {
} }
else System.out.print("."); else System.out.print(".");
//TODO: setRout rework if (!isAllRoutSet) {
//TODO: find Best Rout method isAllRoutSet = true;
setRoutesForCampaigns(Mashier.ARAFAT);
}
clearDoneCivilVehicles(); clearDoneCivilVehicles();
addCivilVehicleNoise(); addCivilVehicleNoise();
for (Vehicle vehicle : listOfVehicles) { for (Vehicle vehicle : listOfVehicles) {
if (vehicle.getRoute() == null)
continue;
Route route = vehicle.getRoute(); Route route = vehicle.getRoute();
double currentLocation = vehicle.getCurrentLocation(); double currentLocation = vehicle.getCurrentLocation();
if (vehicle.getCurrentStreet() == null && if (vehicle.getCurrentStreet() == null &&
firstDayTimeMan.getCurrentCalendar().get(Calendar.MINUTE) % 3 == 0 &&
route.getStreets()[0].capcityPoint(0,1000) < 1) { route.getStreets()[0].capcityPoint(0,1000) < 1) {
vehicle.setCurrentStreet(route.getStreets()[0]); vehicle.setCurrentStreet(route.getStreets()[0]);
} }
@ -92,8 +96,8 @@ public class MakkahCity {
currenttimeManager = lastDayTimeMan; currenttimeManager = lastDayTimeMan;
System.out.println("\n***************FINSHIED ARAFAT DAY***************"); System.out.println("\n***************FINSHIED ARAFAT DAY***************");
setRoutesForCampaigns(Mashier.MINA);
//Collections.shuffle(listOfVehicles); //Collections.shuffle(listOfVehicles);
isAllRoutSet = false;
for (Vehicle vehicle : listOfVehicles) { for (Vehicle vehicle : listOfVehicles) {
vehicle.setCurrentStreet(null); vehicle.setCurrentStreet(null);
} }
@ -110,12 +114,18 @@ public class MakkahCity {
} }
else System.out.print("."); else System.out.print(".");
if (!isAllRoutSet) {
isAllRoutSet = true;
setRoutesForCampaigns(Mashier.MINA);
}
clearDoneCivilVehicles(); clearDoneCivilVehicles();
addCivilVehicleNoise(); addCivilVehicleNoise();
for (Vehicle vehicle : listOfVehicles) { for (Vehicle vehicle : listOfVehicles) {
Route route = vehicle.getRoute(); Route route = vehicle.getRoute();
double currentLocation = vehicle.getCurrentLocation(); double currentLocation = vehicle.getCurrentLocation();
if (vehicle.getCurrentStreet() == null && if (vehicle.getCurrentStreet() == null &&
lastDayTimeMan.getCurrentCalendar().get(Calendar.MINUTE) % 3 == 0 &&
route.getStreets()[0].capcityPoint(0,1000) < 1) { route.getStreets()[0].capcityPoint(0,1000) < 1) {
vehicle.setCurrentStreet(route.getStreets()[0]); vehicle.setCurrentStreet(route.getStreets()[0]);
} }
@ -293,7 +303,10 @@ public class MakkahCity {
private static void setRoutesForCampaigns(Mashier mashier) { private static void setRoutesForCampaigns(Mashier mashier) {
for (Campaign camp : listOfCampaigns){ for (Campaign camp : listOfCampaigns){
camp.setRoute(getShortestRoute(camp, mashier)); if (camp.getVehicles().get(0).getCurrentStreet() == null) {
isAllRoutSet = false;
camp.setRoute(getBestRoute(camp, mashier));
}
} }
} }
@ -446,7 +459,7 @@ public class MakkahCity {
private static void addCivilVehicleNoise() { private static void addCivilVehicleNoise() {
for (Street street: stdStreet) { for (Street street: stdStreet) {
if (street.getPercentRemainingCapacity() >= 100) if (street.getPercentRemainingCapacity() >= 80)
continue; continue;
int numOfSedan = (int)getRandom(10,15); int numOfSedan = (int)getRandom(10,15);
@ -515,6 +528,38 @@ public class MakkahCity {
* @param campaign * @param campaign
* @return * @return
*/ */
private static Route getBestRoute(Campaign campaign , Mashier mashier) {
//ArrayList<Route> routes = (ArrayList<Route>) Arrays.asList(getRoutesToDistrict(campaign.getHotelDistrict()));
Route[] routes = getRoutesToDistrict(campaign.getHotelDistrict());
routes = sortRoutes(routes);
for (Route r : routes) {
if (r.getMashier() == mashier){
if (r.capcity() < 70)
return r;
else if (r.getHotelArea() == District.ALAZIZIYA)
return r;
}
}
return null;
}
private static Route[] sortRoutes(Route[] routes) {
Route[] sortingRoute = new Route[routes.length];
double[] lengthes = new double[routes.length];
for (int i = 0; i < lengthes.length ; i++)
lengthes[i] = routes[i].getTotalLength();
Arrays.sort(lengthes);
for (int i = 0; i < lengthes.length ; i++) {
for (Route r : routes)
if (lengthes[i] == r.getTotalLength())
sortingRoute[i] = r;
}
return sortingRoute;
}
private static Route getShortestRoute(Campaign campaign, Mashier mashier) { private static Route getShortestRoute(Campaign campaign, Mashier mashier) {
Route[] routes = getRoutesToDistrict(campaign.getHotelDistrict()); Route[] routes = getRoutesToDistrict(campaign.getHotelDistrict());
Route route = null; Route route = null;
@ -707,7 +752,7 @@ public class MakkahCity {
report.append(String.format(" %-20s|", getShortestRoute(campPerDistrict[i].get(0), Mashier.ARAFAT).getFastestTimeOfTravel(new Bus()))); report.append(String.format(" %-20s|", getShortestRoute(campPerDistrict[i].get(0), Mashier.ARAFAT).getFastestTimeOfTravel(new Bus())));
report.append(String.format(" %-22s|", getShortestRoute(campPerDistrict[i].get(0), Mashier.MINA).getFastestTimeOfTravel(new Bus()))); report.append(String.format(" %-22s|", getShortestRoute(campPerDistrict[i].get(0), Mashier.MINA).getFastestTimeOfTravel(new Bus())));
//Calc values per dist here. //Calc values per dist here.
//TODO: add arrived buses colum //TODO: add arrived buses colum (NO NEED)
report.append("\n"); report.append("\n");
} }
return report.toString(); return report.toString();

View File

@ -50,6 +50,8 @@ public class Route implements Travelable {
.append("\n") .append("\n")
.append("Length: ").append(getTotalLength()) .append("Length: ").append(getTotalLength())
.append("\n") .append("\n")
.append("capcete: ").append(String.format("%.2f", capcity()))
.append("\n")
.append("Streets: "); .append("Streets: ");
for (Street street : this.getStreets()) for (Street street : this.getStreets())
s.append(street.getName().name()).append(" "); s.append(street.getName().name()).append(" ");
@ -65,6 +67,15 @@ public class Route implements Travelable {
return mashier; return mashier;
} }
public double capcity() {
double capcity = 0;
for (Street str : getStreets()) {
capcity += str.getPercentRemainingCapacity();
}
double c = capcity/(getStreets().length);
return c;
}
private void setStreets(Street[] streets) { private void setStreets(Street[] streets) {
if (streets != null) this.streets = streets; if (streets != null) this.streets = streets;
else throwIllegal(); else throwIllegal();