Skip to content

Commit

Permalink
aggiunta documentazione
Browse files Browse the repository at this point in the history
  • Loading branch information
fulcorno committed Jun 3, 2015
1 parent b02c13d commit dc17a70
Show file tree
Hide file tree
Showing 2 changed files with 42 additions and 1 deletion.
21 changes: 21 additions & 0 deletions src/it/polito/tdp/babs/model/Model.java
Original file line number Diff line number Diff line change
Expand Up @@ -31,12 +31,22 @@ public void loadStations() {
stations = dao.getAllStations() ;
}

/**
* Carica tutti e soli i trip della giornata specificata
* @param day giorno da caricare
* @return numero di trip caricati
*/
public int loadTripsOfTheDay(LocalDate day) {
BabsDAO dao = new BabsDAO() ;
tripsOfTheDay = dao.getTripsOfDay(day) ;
return tripsOfTheDay.size() ;
}

/**
* Conta il numero di trip, nel giorno corrente, che partono dalla stazione specificata
* @param depart stazione di partenza
* @return numero di trip
*/
public int countDepartingTrips(Station depart) {
int count=0 ;
for(Trip t : tripsOfTheDay) {
Expand All @@ -47,6 +57,11 @@ public int countDepartingTrips(Station depart) {
return count ;
}

/**
* Conta il numero di trip, nel giorno corrente, che rientrano nella stazione specificata
* @param arrival stazione di arrivo
* @return numero di trip
*/
public int countArrivingTrips(Station arrival) {
int count=0 ;
for(Trip t : tripsOfTheDay) {
Expand All @@ -57,6 +72,12 @@ public int countArrivingTrips(Station arrival) {
return count ;
}

/**
* Dato l'ID di una Station, trova l'oggetto Station corrispondente nella lista del modello.
* Nota: potrebbe essere ottimizzato costruendo una mappa ID->Station
* @param stationID identificavo numerico di una stazione
* @return oggetto Station corrispondente, oppure null se non esiste
*/
public Station getStationByID(int stationID) {
for(Station s: stations) {
if( s.getStationID()==stationID)
Expand Down
22 changes: 21 additions & 1 deletion src/it/polito/tdp/babs/model/Simulator.java
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,12 @@ private enum BikeEvent {
PICK, DROP
};

/**
* Evento simulato: la PRESA o il RIENTRO di una bicicletta
*
* @author Fulvio Corno
*
*/
private class SimEvent implements Comparable<SimEvent> {
private BikeEvent type;
private LocalDateTime time;
Expand Down Expand Up @@ -50,23 +56,31 @@ public Trip getTrip() {
}
}

// La coda di simulazione
private PriorityQueue<SimEvent> queue = new PriorityQueue<Simulator.SimEvent>();

private double K; // percentuale di riempimento iniziale

// Numero di biciclette in ciascuna stazione
private Map<Station, Integer> occupancy;

// Risultati della simulazione
private int failedPicks;
private int failedDrops;

/**
* Inizializza un nuovo simulatore per il calcolo di prese/rientri falliti
* @param K rapporto di occupazione (tra 0.0 ed 1.1)
* @param model il modello
*/
public Simulator(double K, Model model) {
this.K = K;
this.model = model ;

// Calcola l'occupazione iniziale (K% dei posti disponibili)
occupancy = new HashMap<>();
for (Station s : model.getStations()) {
int bikes = (int) (s.getDockCount() * K);
int bikes = (int) (s.getDockCount() * this.K);
occupancy.put(s, bikes);
}

Expand All @@ -80,6 +94,11 @@ public Simulator(double K, Model model) {
failedPicks = 0;
}

/**
* Esegue la simulazione
*
* @return numero di eventi simulati
*/
public int run() {

int events = 0 ;
Expand All @@ -102,6 +121,7 @@ public int run() {
occupancy.put(s, occupancy.get(s) - 1);
queue.add(new SimEvent(BikeEvent.DROP, t.getEndDate(),
model.getStationByID(t.getEndStationID()), t));
// nota: se la PRESA non riesce, allora NON bisogna schedulare il rientro
}

break;
Expand Down

0 comments on commit dc17a70

Please sign in to comment.