Added new output and fixed street overflow
Signed-off-by: HeshamTB <hishaminv@gmail.com>
This commit is contained in:
parent
4b0e8800be
commit
1efd3e2dec
@ -108,4 +108,8 @@ public class Campaign {
|
|||||||
public String getUID(){
|
public String getUID(){
|
||||||
return this.UID;
|
return this.UID;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public int getPercentArrived() {
|
||||||
|
return ((numberOfAriivedBuses/vehicles.size()) *100);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,7 @@ public class MakkahCity {
|
|||||||
|
|
||||||
private static final ArrayList<Campaign> listOfCampaigns = new ArrayList<>();
|
private static final ArrayList<Campaign> listOfCampaigns = new ArrayList<>();
|
||||||
private static final ArrayList<Vehicle> listOfVehicles = new ArrayList<>();
|
private static final ArrayList<Vehicle> listOfVehicles = new ArrayList<>();
|
||||||
|
private static final ArrayList<Campaign>[] campPerDistrict = new ArrayList[District.values().length];
|
||||||
private static final Route[] stdRoutes = new Route[RouteName.values().length];
|
private static final Route[] stdRoutes = new Route[RouteName.values().length];
|
||||||
private static final Street[] stdStreet = new Street[StreetNames.values().length];
|
private static final Street[] stdStreet = new Street[StreetNames.values().length];
|
||||||
|
|
||||||
@ -14,7 +15,7 @@ public class MakkahCity {
|
|||||||
|
|
||||||
private static final PDate lastDayTimeMan = new PDate(
|
private static final PDate lastDayTimeMan = new PDate(
|
||||||
new GregorianCalendar(2020, Calendar.JANUARY, 4, 12, 0, 0),
|
new GregorianCalendar(2020, Calendar.JANUARY, 4, 12, 0, 0),
|
||||||
new GregorianCalendar(2020, Calendar.JANUARY, 4, 20, 0, 0)
|
new GregorianCalendar(2020, Calendar.JANUARY, 4, 22, 0, 0)
|
||||||
);
|
);
|
||||||
|
|
||||||
private static PDate currenttimeManager = firstDayTimeMan;
|
private static PDate currenttimeManager = firstDayTimeMan;
|
||||||
@ -22,6 +23,9 @@ public class MakkahCity {
|
|||||||
public static void main(String[] args) {
|
public static void main(String[] args) {
|
||||||
|
|
||||||
//Gen Camp
|
//Gen Camp
|
||||||
|
campPerDistrict[District.ALMANSOOR.ordinal()] = new ArrayList<>();
|
||||||
|
campPerDistrict[District.ALAZIZIYA.ordinal()] = new ArrayList<>();
|
||||||
|
campPerDistrict[District.ALHIJRA.ordinal()] = new ArrayList<>();
|
||||||
generateCamps(District.ALAZIZIYA, (int)getRandom(1200, 1400));
|
generateCamps(District.ALAZIZIYA, (int)getRandom(1200, 1400));
|
||||||
generateCamps(District.ALMANSOOR, (int)getRandom(1600, 1800));
|
generateCamps(District.ALMANSOOR, (int)getRandom(1600, 1800));
|
||||||
generateCamps(District.ALHIJRA, (int)getRandom(1400, 1600));
|
generateCamps(District.ALHIJRA, (int)getRandom(1400, 1600));
|
||||||
@ -38,12 +42,14 @@ public class MakkahCity {
|
|||||||
|
|
||||||
//Set Routes for Campaigns
|
//Set Routes for Campaigns
|
||||||
setRoutesForCampaigns(Mashier.ARAFAT);
|
setRoutesForCampaigns(Mashier.ARAFAT);
|
||||||
|
//TODO: print info before simulation. (Camps per District ...)
|
||||||
//TODO: use Queues or Wating area for each street?
|
//TODO: use Queues or Wating area for each street?
|
||||||
while(!firstDayTimeMan.isEnded()) {
|
while(!firstDayTimeMan.isEnded()) {
|
||||||
//Start of Every hour
|
//Start of Every hour
|
||||||
if (firstDayTimeMan.getCurrentCalendar().get(Calendar.MINUTE) == 0){
|
if (firstDayTimeMan.getCurrentCalendar().get(Calendar.MINUTE) == 0){
|
||||||
//TODO: removed break here. now should schedule.
|
System.out.println("\n\n" + getStreetsReport());
|
||||||
}
|
}
|
||||||
|
else System.out.printf("%s\r", currenttimeManager.getCurrentTime());
|
||||||
//Start of Every half-hour
|
//Start of Every half-hour
|
||||||
if (firstDayTimeMan.getCurrentCalendar().get(Calendar.MINUTE) % 30 == 0){
|
if (firstDayTimeMan.getCurrentCalendar().get(Calendar.MINUTE) % 30 == 0){
|
||||||
|
|
||||||
@ -51,14 +57,20 @@ public class MakkahCity {
|
|||||||
//Start of every 10min
|
//Start of every 10min
|
||||||
if (firstDayTimeMan.getCurrentCalendar().get(Calendar.MINUTE) % 10 == 0){
|
if (firstDayTimeMan.getCurrentCalendar().get(Calendar.MINUTE) % 10 == 0){
|
||||||
addCivilVehicleNoise();
|
addCivilVehicleNoise();
|
||||||
System.out.println("\n\n" + getStreetsReport());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (firstDayTimeMan.getCurrentCalendar().get(Calendar.MINUTE) == getRandom(0,59)
|
if (firstDayTimeMan.getCurrentCalendar().get(Calendar.MINUTE) == getRandom(0,59)
|
||||||
&& firstDayTimeMan.getCurrentCalendar().get(Calendar.SECOND) == getRandom(0,59)){
|
&& firstDayTimeMan.getCurrentCalendar().get(Calendar.SECOND) == getRandom(0,59)){
|
||||||
|
|
||||||
}
|
}
|
||||||
|
//Clear civil cars from list
|
||||||
|
for (int i = 0; i < listOfVehicles.size();){
|
||||||
|
Vehicle vehicle = listOfVehicles.get(i);
|
||||||
|
if (!(vehicle instanceof Bus) && vehicle.isArrivedToDest())
|
||||||
|
listOfVehicles.remove(vehicle);
|
||||||
|
else i++;
|
||||||
|
|
||||||
|
}
|
||||||
for (Vehicle vehicle : listOfVehicles) {
|
for (Vehicle vehicle : listOfVehicles) {
|
||||||
Route route = vehicle.getRoute();
|
Route route = vehicle.getRoute();
|
||||||
double currentLocation = vehicle.getCurrentLocation();
|
double currentLocation = vehicle.getCurrentLocation();
|
||||||
@ -85,22 +97,23 @@ public class MakkahCity {
|
|||||||
}
|
}
|
||||||
//noise based on time of day (From PDate)
|
//noise based on time of day (From PDate)
|
||||||
firstDayTimeMan.step(Calendar.MINUTE, 1);
|
firstDayTimeMan.step(Calendar.MINUTE, 1);
|
||||||
|
for (int i = 0; i < 28; i++) System.out.print(" ");
|
||||||
}
|
}
|
||||||
//TODO make report
|
//TODO make report
|
||||||
currenttimeManager = lastDayTimeMan;
|
currenttimeManager = lastDayTimeMan;
|
||||||
System.out.println("*************FINSHIED FIRST DAY*********************");
|
System.out.println("***************FINSHIED ARAFAT DAY***************");
|
||||||
setRoutesForCampaigns(Mashier.MINA);
|
setRoutesForCampaigns(Mashier.MINA);
|
||||||
for (Vehicle vehicle : listOfVehicles) {
|
for (Vehicle vehicle : listOfVehicles) {
|
||||||
vehicle.setCurrentStreet(null);
|
vehicle.setCurrentStreet(null);
|
||||||
}
|
}
|
||||||
//TODO make all camps not arrived
|
System.out.println("***************STARTING LAST DAY***************");
|
||||||
//TODO: check 5000% capacity bug.
|
|
||||||
|
|
||||||
while(!lastDayTimeMan.isEnded()) {
|
while(!lastDayTimeMan.isEnded()) {
|
||||||
//Start of Every hour
|
//Start of Every hour
|
||||||
if (lastDayTimeMan.getCurrentCalendar().get(Calendar.MINUTE) == 0){
|
if (lastDayTimeMan.getCurrentCalendar().get(Calendar.MINUTE) == 0){
|
||||||
//TODO: removed break here. now should schedule.
|
//TODO: removed break here. now should schedule.
|
||||||
|
System.out.println("\n\n" + getStreetsReport());
|
||||||
}
|
}
|
||||||
|
else System.out.printf("%s\r", currenttimeManager.getCurrentTime());
|
||||||
//Start of Every half-hour
|
//Start of Every half-hour
|
||||||
if (lastDayTimeMan.getCurrentCalendar().get(Calendar.MINUTE) % 30 == 0){
|
if (lastDayTimeMan.getCurrentCalendar().get(Calendar.MINUTE) % 30 == 0){
|
||||||
|
|
||||||
@ -108,7 +121,6 @@ public class MakkahCity {
|
|||||||
//Start of every 10min
|
//Start of every 10min
|
||||||
if (lastDayTimeMan.getCurrentCalendar().get(Calendar.MINUTE) % 10 == 0){
|
if (lastDayTimeMan.getCurrentCalendar().get(Calendar.MINUTE) % 10 == 0){
|
||||||
addCivilVehicleNoise();
|
addCivilVehicleNoise();
|
||||||
System.out.println("\n\n" + getStreetsReport());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (lastDayTimeMan.getCurrentCalendar().get(Calendar.MINUTE) == getRandom(0,59)
|
if (lastDayTimeMan.getCurrentCalendar().get(Calendar.MINUTE) == getRandom(0,59)
|
||||||
@ -142,6 +154,7 @@ public class MakkahCity {
|
|||||||
}
|
}
|
||||||
//noise based on time of day (From PDate)
|
//noise based on time of day (From PDate)
|
||||||
lastDayTimeMan.step(Calendar.MINUTE, 1);
|
lastDayTimeMan.step(Calendar.MINUTE, 1);
|
||||||
|
for (int i = 0; i < 28; i++) System.out.print(" ");
|
||||||
}
|
}
|
||||||
//TODO: print final report
|
//TODO: print final report
|
||||||
}
|
}
|
||||||
@ -171,6 +184,7 @@ public class MakkahCity {
|
|||||||
for (int i = 0; i < count; i++){
|
for (int i = 0; i < count; i++){
|
||||||
Campaign camp = new Campaign(area, (int)getRandom(10, 15));
|
Campaign camp = new Campaign(area, (int)getRandom(10, 15));
|
||||||
listOfCampaigns.add(camp);
|
listOfCampaigns.add(camp);
|
||||||
|
campPerDistrict[area.ordinal()].add(camp);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -309,7 +323,7 @@ public class MakkahCity {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private static void addCivilVehicleNoise() {
|
private static void addCivilVehicleNoise() {
|
||||||
|
//TODO: adds to only two streets
|
||||||
for (Street street: stdStreet) {
|
for (Street street: stdStreet) {
|
||||||
int numOfSedan = (int)getRandom(40,50);
|
int numOfSedan = (int)getRandom(40,50);
|
||||||
int numOfSUV = (int)getRandom(20,30);
|
int numOfSUV = (int)getRandom(20,30);
|
||||||
@ -448,23 +462,31 @@ public class MakkahCity {
|
|||||||
|
|
||||||
|
|
||||||
private static String getStreetsReport() {
|
private static String getStreetsReport() {
|
||||||
//TODO fix layout
|
String status = "";
|
||||||
|
if (currenttimeManager == firstDayTimeMan) status = " Status: Heading to Arafat";
|
||||||
|
else status = " Status: Heading to hotels";
|
||||||
String headerFormat = "******Streets report*****\n" +
|
String headerFormat = "******Streets report*****\n" +
|
||||||
"Time: %s\n" +
|
"Time: %s%s\n" +
|
||||||
" Street name |Street Load| Total | Buses | Local Vehicles |\n";
|
" Street name |Street Load| Total | Buses | Local Vehicles |" +
|
||||||
|
"*********| District | Average Arrival\n";
|
||||||
String report = "";
|
String report = "";
|
||||||
report = report + String.format(headerFormat, firstDayTimeMan.getCurrentTime());
|
report = report + String.format(headerFormat, currenttimeManager.getCurrentTime(), status);
|
||||||
String entryFormat = "%-17s | %%%-8s | %5d | %5d | %14d |\n";
|
String streetFormat = "%-18s | %%%-8s | %5d | %5d | %14d |";
|
||||||
for (Street street : stdStreet) {
|
String districtForamt = " | %-9s | %%%2d ";
|
||||||
int cap = street.getPercentRemainingCapacity();
|
for (int i = 0; i < stdStreet.length; i++) {
|
||||||
report = report + String.format(entryFormat,
|
int cap = stdStreet[i].getPercentRemainingCapacity();
|
||||||
street.getName().name(),
|
report = report + String.format(streetFormat,
|
||||||
|
stdStreet[i].getName().name(),
|
||||||
cap,
|
cap,
|
||||||
street.getVehicles().size(),
|
stdStreet[i].getVehicles().size(),
|
||||||
street.getNumberOfBuses(),
|
stdStreet[i].getNumberOfBuses(),
|
||||||
street.getNumberOfLocalCars());
|
stdStreet[i].getNumberOfLocalCars());
|
||||||
|
if (i < 3){
|
||||||
|
report = report + String.format(districtForamt, District.values()[i], getAvgOfDistrict(District.values()[i]));
|
||||||
|
}
|
||||||
|
report += "\n";
|
||||||
}
|
}
|
||||||
report = report + getFinalRep();
|
report = report + "\n"+getFinalRep();
|
||||||
report = report + "*************************";
|
report = report + "*************************";
|
||||||
return report;
|
return report;
|
||||||
}
|
}
|
||||||
@ -476,7 +498,7 @@ public class MakkahCity {
|
|||||||
for (Campaign campaign : listOfCampaigns) {
|
for (Campaign campaign : listOfCampaigns) {
|
||||||
numberOfBusses += campaign.getNumberOfBusses();
|
numberOfBusses += campaign.getNumberOfBusses();
|
||||||
}
|
}
|
||||||
String s = String.format("Buses: %d Buses done: %d Average trip time: %s\n",
|
String s = String.format("Buses: %d Buses done: %d Average trip in last hour time: %s\n",
|
||||||
numberOfBusses, numberOfArrivedBuses, avgTimeOfTrip());
|
numberOfBusses, numberOfArrivedBuses, avgTimeOfTrip());
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
@ -489,7 +511,7 @@ public class MakkahCity {
|
|||||||
//TODO: does output diff value even after all have arrived.
|
//TODO: does output diff value even after all have arrived.
|
||||||
Calendar now = firstDayTimeMan.getCurrentCalendar();
|
Calendar now = firstDayTimeMan.getCurrentCalendar();
|
||||||
Calendar from = (GregorianCalendar)now.clone();
|
Calendar from = (GregorianCalendar)now.clone();
|
||||||
from.roll(Calendar.MINUTE, -10);
|
from.roll(Calendar.HOUR, -1);
|
||||||
int counter = 1;
|
int counter = 1;
|
||||||
int sum = 0;
|
int sum = 0;
|
||||||
for (Campaign campaign : listOfCampaigns){
|
for (Campaign campaign : listOfCampaigns){
|
||||||
@ -508,6 +530,14 @@ public class MakkahCity {
|
|||||||
return String.format("%2d:%02d", hours,minutes);
|
return String.format("%2d:%02d", hours,minutes);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private static int getAvgOfDistrict(District district) {
|
||||||
|
int sum = 0;
|
||||||
|
for (Campaign campaign : campPerDistrict[district.ordinal()]) {
|
||||||
|
sum += campaign.getPercentArrived();
|
||||||
|
}
|
||||||
|
return sum/campPerDistrict[district.ordinal()].size();
|
||||||
|
}
|
||||||
|
|
||||||
private static int getNumberOfArrivedBusses() {
|
private static int getNumberOfArrivedBusses() {
|
||||||
int num = 0;
|
int num = 0;
|
||||||
for (Campaign campaign : listOfCampaigns) {
|
for (Campaign campaign : listOfCampaigns) {
|
||||||
|
@ -7,6 +7,10 @@ import java.util.GregorianCalendar;
|
|||||||
*/
|
*/
|
||||||
public class PDate extends Calendar {
|
public class PDate extends Calendar {
|
||||||
|
|
||||||
|
/*
|
||||||
|
Rewrite this class to use it's own members. Extending calendar is pointless like this.
|
||||||
|
- H.B.
|
||||||
|
*/
|
||||||
public final Calendar startCalendar;
|
public final Calendar startCalendar;
|
||||||
public final Calendar endCalendar;
|
public final Calendar endCalendar;
|
||||||
private final Calendar currentCalendar;
|
private final Calendar currentCalendar;
|
||||||
|
@ -112,7 +112,7 @@ public class Street {
|
|||||||
double reamingLength = max - getLength();
|
double reamingLength = max - getLength();
|
||||||
double y = capcityPoint(min, getLength(),vehicle);
|
double y = capcityPoint(min, getLength(),vehicle);
|
||||||
double z = getNextStreet(vehicle).capcityPoint(0, reamingLength, vehicle);
|
double z = getNextStreet(vehicle).capcityPoint(0, reamingLength, vehicle);
|
||||||
return ((y + z)/2);
|
return (((getLength() - min)/(max - min)) * y) + (((reamingLength)/(max - min)) * z);
|
||||||
}
|
}
|
||||||
double totalLength = (max - min) * numberOfLanes;
|
double totalLength = (max - min) * numberOfLanes;
|
||||||
double totalLenthofCar=0;
|
double totalLenthofCar=0;
|
||||||
|
@ -29,6 +29,7 @@ public abstract class Vehicle {
|
|||||||
setMoving(false);
|
setMoving(false);
|
||||||
setTimeOfArrival(MakkahCity.getTimeMan().getCurrentTime());
|
setTimeOfArrival(MakkahCity.getTimeMan().getCurrentTime());
|
||||||
getCurrentStreet().getVehicles().remove(this);
|
getCurrentStreet().getVehicles().remove(this);
|
||||||
|
this.currentLocation = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void move(double distance) {
|
public void move(double distance) {
|
||||||
|
Loading…
Reference in New Issue
Block a user