from jmetal.algorithm.multiobjective.random_search import RandomSearch from jmetal.problem import ZDT1 from jmetal.util.solution import ( print_function_values_to_file, print_variables_to_file, read_solutions, ) from jmetal.util.termination_criterion import StoppingByEvaluations if __name__ == "__main__": problem = ZDT1() problem.reference_front = read_solutions( filename="resources/reference_front/ZDT1.pf") max_evaluations = 1000 algorithm = RandomSearch(problem=problem, termination_criterion=StoppingByEvaluations( max_evaluations=max_evaluations)) algorithm.run() front = algorithm.get_result() # Save results to file print_function_values_to_file(front, "FUN." + algorithm.label) print_variables_to_file(front, "VAR." + algorithm.label) print(f"Algorithm: {algorithm.get_name()}") print(f"Problem: {problem.get_name()}") print(f"Computing time: {algorithm.total_computing_time}")
from jmetal.algorithm.multiobjective.moead import MOEAD from jmetal.operator import PolynomialMutation, DifferentialEvolutionCrossover from jmetal.problem import DTLZ2 from jmetal.util.aggregative_function import Tschebycheff from jmetal.util.solution import read_solutions, print_function_values_to_file, print_variables_to_file from jmetal.util.termination_criterion import StoppingByEvaluations if __name__ == '__main__': problem = DTLZ2() problem.reference_front = read_solutions(filename='resources/reference_front/DTLZ2.3D.pf') max_evaluations = 50000 algorithm = MOEAD( problem=problem, population_size=300, crossover=DifferentialEvolutionCrossover(CR=1.0, F=0.5, K=0.5), mutation=PolynomialMutation(probability=1.0 / problem.number_of_variables, distribution_index=20), aggregative_function=Tschebycheff(dimension=problem.number_of_objectives), neighbor_size=20, neighbourhood_selection_probability=0.9, max_number_of_replaced_solutions=2, weight_files_path='resources/MOEAD_weights', termination_criterion=StoppingByEvaluations(max_evaluations=max_evaluations) ) algorithm.run() front = algorithm.get_result() # Save results to file print_function_values_to_file(front, 'FUN.' + algorithm.label)
from jmetal.algorithm.multiobjective.moead import MOEAD from jmetal.operator import PolynomialMutation, DifferentialEvolutionCrossover from jmetal.problem import LZ09_F2 from jmetal.util.aggregative_function import Tschebycheff from jmetal.util.solution import read_solutions, print_function_values_to_file, print_variables_to_file from jmetal.util.termination_criterion import StoppingByEvaluations if __name__ == '__main__': problem = LZ09_F2() problem.reference_front = read_solutions( filename='resources/reference_front/LZ09_F2.pf') max_evaluations = 150000 algorithm = MOEAD( problem=problem, population_size=300, crossover=DifferentialEvolutionCrossover(CR=1.0, F=0.5, K=0.5), mutation=PolynomialMutation(probability=1.0 / problem.number_of_variables, distribution_index=20), aggregative_function=Tschebycheff( dimension=problem.number_of_objectives), neighbor_size=20, neighbourhood_selection_probability=0.9, max_number_of_replaced_solutions=2, weight_files_path='resources/MOEAD_weights', termination_criterion=StoppingByEvaluations(max=max_evaluations)) algorithm.run()
from jmetal.algorithm.multiobjective.nsgaii import NSGAII from jmetal.operator import SBXCrossover, PolynomialMutation from jmetal.problem import Srinivas from jmetal.util.comparator import DominanceComparator from jmetal.util.solution import read_solutions, print_function_values_to_file, print_variables_to_file from jmetal.util.termination_criterion import StoppingByEvaluations if __name__ == '__main__': problem = Srinivas() problem.reference_front = read_solutions( filename='resources/reference_front/Srinivas.pf') max_evaluations = 25000 algorithm = NSGAII( problem=problem, population_size=100, offspring_population_size=100, mutation=PolynomialMutation(probability=1.0 / problem.number_of_variables, distribution_index=20), crossover=SBXCrossover(probability=1.0, distribution_index=20), termination_criterion=StoppingByEvaluations(max=max_evaluations), dominance_comparator=DominanceComparator()) algorithm.run() front = algorithm.get_result() # Save results to file print_function_values_to_file(front, 'FUN.' + algorithm.label) print_variables_to_file(front, 'VAR.' + algorithm.label)
def generate_summary_from_experiment( input_dir: str, quality_indicators: List[QualityIndicator], reference_fronts: str = ""): """Compute a list of quality indicators. The input data directory *must* met the following structure (this is generated automatically by the Experiment class): * <base_dir> * algorithm_a * problem_a * FUN.0.tsv * FUN.1.tsv * VAR.0.tsv * VAR.1.tsv * ... :param input_dir: Directory where all the input data is found (function values and variables). :param reference_fronts: Directory where reference fronts are found. :param quality_indicators: List of quality indicators to compute. :return: None. """ if not quality_indicators: quality_indicators = [] with open("QualityIndicatorSummary.csv", "w+") as of: of.write( "Algorithm,Problem,ExecutionId,IndicatorName,IndicatorValue\n") for dirname, _, filenames in os.walk(input_dir): for filename in filenames: try: # Linux filesystem algorithm, problem = dirname.split("/")[-2:] except ValueError: # Windows filesystem algorithm, problem = dirname.split("\\")[-2:] if "TIME" in filename: run_tag = [s for s in filename.split(".") if s.isdigit()].pop() with open(os.path.join(dirname, filename), "r") as content_file: content = content_file.read() with open("QualityIndicatorSummary.csv", "a+") as of: of.write(",".join( [algorithm, problem, run_tag, "Time", str(content)])) of.write("\n") if "FUN" in filename: solutions = read_solutions(os.path.join(dirname, filename)) run_tag = [s for s in filename.split(".") if s.isdigit()].pop() for indicator in quality_indicators: reference_front_file = os.path.join( reference_fronts, problem + ".pf") # Add reference front if any if hasattr(indicator, "reference_front"): if Path(reference_front_file).is_file(): reference_front = [] with open(reference_front_file) as file: for line in file: reference_front.append( [float(x) for x in line.split()]) indicator.reference_front = reference_front else: logger.warning("Reference front not found at", reference_front_file) result = indicator.compute([ solutions[i].objectives for i in range(len(solutions)) ]) # Save quality indicator value to file with open("QualityIndicatorSummary.csv", "a+") as of: of.write(",".join([ algorithm, problem, run_tag, indicator.get_short_name(), str(result) ])) of.write("\n")