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