Compare commits

...

5 Commits

Author SHA1 Message Date
20cfeb268c Amend prev commit about checks 2021-01-11 02:37:28 +03:00
200c06bfac Skip done vehicles:
Skip done cars improves perf greatly.
    Tested in parallel with previous commit
    and results in faster exc when sim has more/less
    generated cars.
2021-01-11 01:53:31 +03:00
7ffbe689bc Discard special cases for general implementation:
Instead of checking instance of veh,
    use the abstract method getMaxSpeed()
    with a given factor.

    This should reduce redundant checks
    (Wasted CPU cycles). Thus, run is
    a tiny bit faster.
2021-01-10 23:48:22 +03:00
612c00a3f1 Reindent (No Change) 2021-01-10 22:00:25 +03:00
69c1a19ed9 Memory usage improvements:
- Use smaller number types int -> short
    saves in heap size.

    - Save UID of vehicles as int (4 Bytes)
    or short (2 Bytes) and when needed, make
    a String as UID. A string would take up
    (16 Bytes).
2021-01-10 21:57:51 +03:00
7 changed files with 187 additions and 198 deletions

View File

@ -1,11 +1,11 @@
public class Bus extends CivilVehicle {
private String UID;
private int UID;
private Campaign campaign;
private static int numeberOfBuses;
private final int TIME_TO_FIX = 20; //in minutes
public static final int MAX_FORWARD = 900; //Meter/Min
private final short TIME_TO_FIX = 20; //in minutes
public static final short MAX_FORWARD = 900; //Meter/Min
public static final double STD_BUS_SIZE = 10;
@ -40,11 +40,11 @@ public class Bus extends CivilVehicle {
private void generateUID() {
numeberOfBuses++;
this.UID = String.format("BUS%04d", numeberOfBuses);
this.UID = numeberOfBuses;
}
public String getUID(){
return this.UID;
return String.format("BUS%04d", UID);
}
public Campaign getCampaign() {

View File

@ -467,7 +467,6 @@ public class GUI_History {
}
public String avgTimeOfTrip() {
//TODO: does output diff value even after all have arrived.
Calendar now = new GregorianCalendar();
now.setTime(currenttimeManager);
Calendar from = (GregorianCalendar)now.clone();

View File

@ -251,7 +251,7 @@ public class GUI_ViewStreet {
if (vehicles.isEmpty()) return;
vehicleData = new Object[vehicles.size()][6];
for (int i = 0; i < vehicles.size(); i++) {
vehicleData[i][0] = vehicles.get(i).getUID();// TODO: There is an Exception error here;
vehicleData[i][0] = vehicles.get(i).getUID();
if (vehicles.get(i) instanceof Bus)
vehicleData[i][1] = ((Bus)vehicles.get(i)).getCampaign().getHotelDistrict().name();
else vehicleData[i][1] = "Local Vehicle";

View File

@ -56,7 +56,6 @@ public class MakkahCity {
public static void main(String[] args) {
//TODO: fix state errors
t.start();
//Gen Camp
campPerDistrict[District.ALMANSOOR.ordinal()] = new ArrayList<>();
@ -439,7 +438,7 @@ public class MakkahCity {
clearDoneCivilVehicles();
addCivilVehicleNoise();
for (Vehicle vehicle : listOfVehicles) {
if (vehicle.getRoute() == null)
if (vehicle.getRoute() == null || vehicle.isArrivedToDest())
continue;
Route route = vehicle.getRoute();
double currentLocation = vehicle.getCurrentLocation();
@ -458,10 +457,7 @@ public class MakkahCity {
if (!vehicle.isArrivedToDest()) {
double factor = 1-(vehicle.getCurrentStreet().capcityPoint(vehicle.getCurrentLocation(),
vehicle.getCurrentLocation()+1000,vehicle)) ;
if (vehicle instanceof Bus) vehicle.move(Bus.MAX_FORWARD * factor );
else if (vehicle instanceof Sedan) vehicle.move(Sedan.MAX_FORWARD * factor );
else if (vehicle instanceof SUV) vehicle.move(SUV.MAX_FORWARD * factor );
else if (vehicle instanceof Truck) vehicle.move(Bus.MAX_FORWARD * factor );
vehicle.move(vehicle.getMaxSpeed()*factor);
}
}
}
@ -503,7 +499,7 @@ public class MakkahCity {
clearDoneCivilVehicles();
addCivilVehicleNoise();
for (Vehicle vehicle : listOfVehicles) {
if (vehicle.getRoute() == null)
if (vehicle.getRoute() == null || vehicle.isArrivedToDest())
continue;
Route route = vehicle.getRoute();
double currentLocation = vehicle.getCurrentLocation();
@ -521,10 +517,7 @@ public class MakkahCity {
if (!vehicle.isArrivedToDest()) {
double factor = 1-(vehicle.getCurrentStreet().capcityPoint(vehicle.getCurrentLocation(),
vehicle.getCurrentLocation()+1000,vehicle)) ;
if (vehicle instanceof Bus) vehicle.move(Bus.MAX_FORWARD * factor );
else if (vehicle instanceof Sedan) vehicle.move(Sedan.MAX_FORWARD * factor );
else if (vehicle instanceof SUV) vehicle.move(SUV.MAX_FORWARD * factor );
else if (vehicle instanceof Truck) vehicle.move(Bus.MAX_FORWARD * factor );
vehicle.move(vehicle.getMaxSpeed()* factor);
}
}
}
@ -592,7 +585,7 @@ public class MakkahCity {
stdStreet[i].getPercentRemainingCapacity());
}
String input = in.next();
int index = Integer.parseInt(input);//TODO: unhandled ex
int index = Integer.parseInt(input);
showStreet(stdStreet[index]);
}
if (choice.equals("4")){
@ -911,7 +904,7 @@ public class MakkahCity {
if (street.getName() == StreetNames.IBRAHIM_ALKHALIL2) numOfSedan = (int) (numOfSedan * 1.2);
for (int x = 0; x < numOfSedan; x++) {
Sedan car = new Sedan(getRandom(4, 5));
double pointOfEntry = getRandom(0, street.getLength());//TODO: consider getLength - x
double pointOfEntry = getRandom(0, street.getLength());
if (street.capcityPoint(pointOfEntry, pointOfEntry+1500) < 1){
listOfVehicles.add(car);
car.setCurrentLocation(pointOfEntry);
@ -924,7 +917,7 @@ public class MakkahCity {
if (street.getName() == StreetNames.FOURTH_HIGHWAY1) numOfTruck = (int) (numOfTruck * 0.5);
if (street.getName() == StreetNames.FOURTH_HIGHWAY2) numOfTruck = (int) (numOfTruck * 0.5);
if (street.getName() == StreetNames.STREET3) numOfTruck = (int) (numOfTruck * 1.5);
if (street.getName() == StreetNames.IBRAHIM_ALKHALIL2) numOfSedan = (int) (numOfSedan * 1.2);
if (street.getName() == StreetNames.IBRAHIM_ALKHALIL2) numOfTruck = (int) (numOfTruck * 1.2);
for (int x = 0; x < numOfTruck; x++) {
Truck car = new Truck(getRandom(4, 5));
double pointOfEntry = getRandom(0, street.getLength());
@ -939,7 +932,7 @@ public class MakkahCity {
if (street.getName() == StreetNames.FOURTH_HIGHWAY1) numOfSUV = (int) (numOfSUV * 0.5);
if (street.getName() == StreetNames.FOURTH_HIGHWAY2) numOfSUV = (int) (numOfSUV * 0.5);
if (street.getName() == StreetNames.STREET3) numOfSUV = (int) (numOfSUV * 1.5);
if (street.getName() == StreetNames.IBRAHIM_ALKHALIL2) numOfSUV = (int) (numOfSedan * 1.2);
if (street.getName() == StreetNames.IBRAHIM_ALKHALIL2) numOfSUV = (int) (numOfSUV * 1.2);
for (int x = 0; x < numOfSUV; x++) {
SUV car = new SUV(getRandom(4, 5));
double pointOfEntry = getRandom(0, street.getLength());
@ -950,7 +943,6 @@ public class MakkahCity {
car.setCurrentStreet(street);
}
}
}
}
@ -958,12 +950,6 @@ public class MakkahCity {
return currenttimeManager;
}
/**
* Find shortest path without respect to traffic
* @param campaign
* @return
*/
private static Route getBestRoute(Campaign campaign , Mashier mashier) {
//ArrayList<Route> routes = (ArrayList<Route>) Arrays.asList(getRoutesToDistrict(campaign.getHotelDistrict()));
Route[] routes = getRoutesToDistrict(campaign.getHotelDistrict());
@ -999,6 +985,11 @@ public class MakkahCity {
return sortingRoute;
}
/**
* Find shortest path without respect to traffic
* @param campaign
* @return
*/
public static Route getShortestRoute(Campaign campaign, Mashier mashier) {
Route[] routes = getRoutesToDistrict(campaign.getHotelDistrict());
Route route = null;

View File

@ -1,9 +1,9 @@
public class SUV extends CivilVehicle {
private String UID;
private static int numeberOfSUV;
private final int TIME_TO_FIX = 15; //in minutes
public static final int MAX_FORWARD = 1300;
private short UID;
private static short numeberOfSUV;
private final short TIME_TO_FIX = 15; //in minutes
public static final short MAX_FORWARD = 1300;
public SUV(double vehicleSize){
super(vehicleSize);
@ -21,12 +21,11 @@ public class SUV extends CivilVehicle {
private void generateUID() {
numeberOfSUV++;
this.UID = String.format("SUV%04d", numeberOfSUV);
this.UID = numeberOfSUV;
}
public String getUID(){
return this.UID;
return String.format("SUV%04d", UID);
}

View File

@ -1,10 +1,10 @@
public class Sedan extends CivilVehicle {
private String UID;
private static int numeberOfSedan;
private final int TIME_TO_FIX = 15; //in minutes
public static final int MAX_FORWARD = 1500; // Meter/Min
private short UID;
private static short numeberOfSedan;
private final short TIME_TO_FIX = 15; //in minutes
public static final short MAX_FORWARD = 1500; // Meter/Min
public Sedan(double vehicleSize){
super(vehicleSize);
@ -16,12 +16,11 @@ public class Sedan extends CivilVehicle {
private void generateUID() {
numeberOfSedan++;
this.UID = String.format("Sedan%04d", numeberOfSedan);
this.UID = numeberOfSedan;
}
public String getUID(){
return this.UID;
return String.format("Sedan%04d", UID);
}
@Override

View File

@ -1,8 +1,8 @@
public class Truck extends CivilVehicle {
private String UID;
private static int numeberOfTruck;
private final int TIME_TO_FIX = 20; //in minutes
private short UID;
private static short numeberOfTruck;
private final short TIME_TO_FIX = 20; //in minutes
@Override
public int getMaxSpeed() {
@ -19,12 +19,13 @@ public class Truck extends CivilVehicle {
}
private void generateUID() {
numeberOfTruck++;
this.UID = String.format("Truck%04d", numeberOfTruck);
this.UID = numeberOfTruck;
}
public String getUID(){
return this.UID;
return String.format("Truck%04d", UID);
}
}