def evaluate( self, device: Device, individual: IndividualMultiObjective) -> IndividualMultiObjective: assert not individual.fitness.valid coverage_fetcher = RequiredFeature('coverage_fetcher').request() start_time = time.time() device.mark_work_start() script_path, suite_lengths = self.dump_individual_to_files(individual) coverage, unique_crashes, scripts_crash_status = coverage_fetcher.get_suite_coverage( script_path, device, individual.generation, individual.index_in_generation) # remove from suite lengths the scripts that did NOT cause a crash for script, had_crash in scripts_crash_status.items(): if not had_crash: suite_lengths.pop(script, None) # 1st obj: coverage, 2nd: average seq length of the suite, 3rd: #crashes if suite_lengths: length = numpy.mean(list(suite_lengths.values())) else: length = sys.maxsize crashes = len(unique_crashes) individual.fitness.values = (coverage, length, crashes) finish_time = time.time() individual.evaluation_finish_timestamp = finish_time individual.evaluation_elapsed_time = finish_time - start_time individual.length = length individual.crashes = crashes hall_of_fame = RequiredFeature('hall_of_fame').request() hall_of_fame.update([individual]) budget_manager = RequiredFeature('budget_manager').request() budget_manager.increase_evaluations_used() device.mark_work_stop() return individual
def evaluate( self, device: Device, individual: IndividualSingleObjective ) -> IndividualSingleObjective: assert not individual.fitness.valid coverage_fetcher = RequiredFeature('coverage_fetcher').request() start_time = time.time() device.mark_work_start() script_path, suite_lengths = self.dump_individual_to_files(individual) coverage, unique_crashes, scripts_crash_status = coverage_fetcher.get_suite_coverage( script_path, device, individual.generation, individual.index_in_generation) # remove from suite lengths the scripts that did NOT cause a crash for script, had_crash in scripts_crash_status.items(): if not had_crash: suite_lengths.pop(script, None) individual.fitness.values = (coverage, ) finish_time = time.time() individual.evaluation_finish_timestamp = finish_time individual.evaluation_elapsed_time = finish_time - start_time # Save crashes and length info outside fitness, to avoid messing up with the "wvalues" and "dominates" function # inside Deap's Fitness base class. if suite_lengths: individual.length = numpy.mean(list(suite_lengths.values())) else: individual.length = sys.maxsize individual.crashes = len(unique_crashes) hall_of_fame = RequiredFeature('hall_of_fame').request() hall_of_fame.update([individual]) budget_manager = RequiredFeature('budget_manager').request() budget_manager.increase_evaluations_used() device.mark_work_stop() return individual