Newer
Older
/**
* Observer
* Author: Thibaut
* Description:
*/
model Observer
import "./FinalDestinationManager.gaml"
import "./LogisticProvider.gaml"
import "./Batch.gaml"
import "./Warehouse.gaml"
Thibaut Démare
committed
import "./Parameters.gaml"
int numberofEmptyStockInFinalDests <- 0;
int numberOfEmptyStockInWarehouses <- 0;
Thibaut Démare
committed
float stockInFinalDest <- 0.0;
float freeSurfaceInFinalDest <- 0.0;
Thibaut Démare
committed
float stockInWarehouse <- 0.0;
float freeSurfaceInWarehouse <- 0.0;
Thibaut Démare
committed
int cumulativeNumberOfBatchProviderToLarge <- 0;
int cumulativeNumberOfBatchLargeToClose <- 0;
int cumulativeNumberOfBatchCloseToFinal <- 0;
Thibaut Démare
committed
float cumulativeStockOnRoads <- 0.0;
float stockOnRoadsProviderToLarge <- 0.0;
float cumulativeStockOnRoadsProviderToLarge <- 0.0;
float cumulativeStockOnRoadsLargeToClose <- 0.0;
float cumulativeStockOnRoadsCloseToFinal <- 0.0;
reflex updateStockInBuildings {
do computeStockInFinalDests;
do computeStockInWarehouses;
}
action computeStockInFinalDests{
Thibaut Démare
committed
stockInFinalDest <- 0.0;
freeSurfaceInFinalDest <- 0.0;
numberofEmptyStockInFinalDests <- 0;
float totalNumberOfStock <- 0.0;
Thibaut Démare
committed
ask FinalDestinationManager {
Thibaut Démare
committed
ask self.building.stocks {
stockInFinalDest <- stockInFinalDest + self.quantity;
tempStock <- tempStock + self.quantity;
totalNumberOfStock <- totalNumberOfStock + 1;
if(self.quantity = 0){
numberofEmptyStockInFinalDests <- numberofEmptyStockInFinalDests + 1;
}
Thibaut Démare
committed
}
freeSurfaceInFinalDest <- freeSurfaceInFinalDest + (surface - tempStock);
Thibaut Démare
committed
}
}
action computeStockInWarehouses {
Thibaut Démare
committed
stockInWarehouse <- 0.0;
freeSurfaceInWarehouse <- 0.0;
numberOfEmptyStockInWarehouses <- 0;
float totalNumberOfStock <- 0.0;
Thibaut Démare
committed
ask Warehouse {
Thibaut Démare
committed
ask self.stocks {
stockInWarehouse <- stockInWarehouse + self.quantity;
tempStock <- tempStock + self.quantity;
totalNumberOfStock <- totalNumberOfStock + 1;
if(self.quantity = 0){
numberOfEmptyStockInWarehouses <- numberOfEmptyStockInWarehouses + 1;
}
Thibaut Démare
committed
}
freeSurfaceInWarehouse <- freeSurfaceInWarehouse + (surfaceUsedForLH - tempStock);
Thibaut Démare
committed
}
}
Thibaut Démare
committed
// Init to zero
totalNumberOfBatch <- 0;
numberOfBatchProviderToLarge <- 0;
numberOfBatchLargeToClose <- 0;
numberOfBatchCloseToFinal <- 0;
Thibaut Démare
committed
stockOnRoadsProviderToLarge <- 0.0;
stockOnRoadsLargeToClose <- 0.0;
stockOnRoadsCloseToFinal <- 0.0;
Thibaut Démare
committed
// Filter the right agents
if(self.position = 1){
Thibaut Démare
committed
numberOfBatchProviderToLarge <- numberOfBatchProviderToLarge + 1;
cumulativeNumberOfBatchProviderToLarge <- cumulativeNumberOfBatchProviderToLarge + 1;
stockOnRoadsProviderToLarge <- stockOnRoadsProviderToLarge + self.overallQuantity;
cumulativeStockOnRoadsProviderToLarge <- cumulativeStockOnRoadsProviderToLarge + self.overallQuantity;
else if(self.position = 2){
numberOfBatchLargeToClose <- numberOfBatchLargeToClose + 1;
cumulativeNumberOfBatchLargeToClose <- cumulativeNumberOfBatchLargeToClose + 1;
stockOnRoadsLargeToClose <- stockOnRoadsLargeToClose + self.overallQuantity;
cumulativeStockOnRoadsLargeToClose <- cumulativeStockOnRoadsLargeToClose + self.overallQuantity;
else if(self.position = 3){
numberOfBatchCloseToFinal <- numberOfBatchCloseToFinal + 1;
cumulativeNumberOfBatchCloseToFinal <- cumulativeNumberOfBatchCloseToFinal + 1;
stockOnRoadsCloseToFinal <- stockOnRoadsCloseToFinal + self.overallQuantity;
cumulativeStockOnRoadsCloseToFinal <- cumulativeStockOnRoadsCloseToFinal + self.overallQuantity;
Thibaut Démare
committed
totalNumberOfBatch <- totalNumberOfBatch + 1;
cumulativeNumberOfBatch <- cumulativeNumberOfBatch + 1;
Thibaut Démare
committed
stockOnRoads <- stockOnRoadsProviderToLarge + stockOnRoadsLargeToClose + stockOnRoadsCloseToFinal;
cumulativeStockOnRoads <- cumulativeStockOnRoads + stockOnRoads;
reflex update_average_time_to_deliver {
int i <- 0;
int sum <- 0;
ask LogisticProvider {
int j <- 0;
loop while: j<length(timeToDeliver) {
sum <- sum + timeToDeliver[j];
j <- j + 1;
i <- i + 1;
}
}
if(i > 0){
write (sum/i);
}
}