示例#1
0
    def evalIndividualCapacity(self, individual):
        ''' Evaluates an individual based on the capacity/bus type chosen for each trip.

        @param: individual - a possible timetable for a bus line, covering the whole day.
        @return: a fitness score assigned in accordance with how close the requested
        capacity is to the availed capacity on the individual
        '''
        individual.sort(key = itemgetter(2))

        db = DB()
        requests = db.getRequestsFromDB()
        requests[:] = [request.time() for request in requests if request is not None]
        fitnessVal = 0 # assumed initial fitness value TODO: put as class variable

        for trip, item in enumerate(individual):
            nrReqs = []
            if trip == 0:
                start = datetime.strptime('00:00', '%H:%M').time()
                end   = datetime.strptime(individual[0][2], '%H:%M').time()
                nrReqs = [i for i in requests if i > start and i <= end]

                # Assign fitness values
                if len(nrReqs) == individual[trip][1]:
                    fitnessVal += 0
                elif len(nrReqs) < individual[trip][1]:
                    fitnessVal += 1
                else:
                    fitnessVal += 1000000
            else:
                start = datetime.strptime(individual[trip-1][2], '%H:%M').time()
                end   = datetime.strptime(individual[trip][2], '%H:%M').time()
                nrReqs = [i for i in requests if i > start and i <= end]

                # Assign fitness values
                if len(nrReqs) == individual[trip][1]:
                    fitnessVal += 0
                elif len(nrReqs) < individual[trip][1]:
                    fitnessVal += 1
                else:
                    fitnessVal += 1000000

        return fitnessVal