A legacy warning message using cout was moved to BOOST_LOG_TRIVIAL
added a getCacheMap method in order to give the oracle full access to the content of the cache (for the optimization process)
added an uploads field to CacheEntry to keep track of the concurrent uploads for each content in the cache. The counter is increased at every call of getFromCache(content) and decreased via a new method uploadCompleted(content). It is also possible to retrieve it directly through a new method getCurrentUploads(content).
added an uploads field to CacheEntry to keep track of the concurrent uploads for each content in the cache. The counter is increased at every call of getFromCache(content) and decreased via a new method uploadCompleted(content). It is also possible to retrieve it directly through a new method getCurrentUploads(content).
added a call to uploadCompleted(content) in notifyFlowCompleted() to make sure to decrease the upload counter once the transfer is over.
Also added a few lines to update the asidContentMap in case any content is erased from the cache due to replacement policies.
addToCache() - consolidated the replacement operations of LFU and LRU in a single block of code after the element has been chosen, as it was exactly the same code
Added a getTotalUploads() method to gathr the total number of concurrent uploads from the Cache at a given moment (for the caching optimization problem)
Added a uint maxUploads which is the maximum number of concurrent uploads we can have in the caching optimization problem per user, and a std::map<ContentElement*, double> contentRateMap to associate to each content the number of elements we should have across caches in an AS. Both need to be initialized in the constructor.
changed optimizeCaching() to return a pair of booleans, the first stating whether CPLEX found a solution, the latter specifying whether we should cache the requested content.
added optimizeCaching() to solve the caching optimization problem through CPLEX and the required includes. The new method is called in notifyCompletedFlow() before invoking addToCache(). The new method has to be tested yet.
maxUploads has been initialized in a hacky way without checking the link capacity (as it is never supposed to make it into "production" and reading it from the topology for each node sounds like too much effort). 
IMPORTANT: contentRateMap still needs to be populated in the constructor - in its current state the program will cause out of range exceptions when invoking optimizeCaching.
The topology now keeps track of the number of users generated per each PON node. This is used when determining the number of requests expected for each content in each AS.
The topology now keeps track of the number of users generated per each PON node. This is used when determining the number of requests expected for each content in each AS.
Added a pmf method to return the probability mass function of the i-th element
populateCatalog() and updateCatalog() now also populate contentRateMap with the number of expected requests for each content
Changed the way the content rate was determined in optimizeCaching() to get a more accurate estimate of the average number of concurrent requests. A minimum of 1 is assumed to make sure that at least a copy of each requested content will be kept at each AS.
optimizeCaching() now requires the current simulation time to extrapolate the current hour for rate calculation purposes
Makefles for the caching optimization problem. Also the topologies created for the journal review
Added a new input parameter, peak-req-ratio (-k), that determines the multiplicative factor used to estimate the peak number of requests from the average number of requests per hour.
Added a new input parameter, peak-req-ratio (-k), that determines the multiplicative factor used to estimate the peak number of requests from the average number of requests per hour.

Fixed a memory leak in optimizeCaching() due to the CPLEX environment not being closed under certain circumstances.
removed an assert check on cached content in the central server, since in our model it always has every content in the catalog (but the cache is modeled as a finite size one).