Exemplo n.º 1
0
 def call(
     iproblem: IProblem, epochs: int, agent_count: int
 ) -> Generator[Tuple[np.ndarray, np.ndarray], None, None]:
     problem = Problem(iproblem)
     evolution = Evolution(problem, epochs, agent_count)
     for pop in evolution.evolve():
         xs = [x for x in map(lambda x: x.features, pop.fronts[0])]
         fs = [f for f in map(lambda x: x.objectives, pop.fronts[0])]
         # f_norms = [x for x in map(lambda x: x.normalized_objectives, pop.fronts[0])] # Originally here for debugging purposes
         yield np.array(xs), np.array(fs)
Exemplo n.º 2
0
def optimizator(nGeneration=1000,
                nVariables=1,
                objectives=None,
                varRange=None,
                same_range=None,
                expand=False,
                nIndividuals=50):
    """Hàm tìm bộ tham số tối ưu để tối thiểu hóa các hàm `objectives`

    Keyword Arguments:
        nGeneration {int} -- Số lượng thế hệ muốn chạy tìm tối ưu (default: {1000})
        nVariables {int} -- Số lượng biến trong hàm tối ưu (default: {1})
        objectives {list} -- Danh sách các hàm cần tối ưu (default: {None})
        varRange {list} -- Danh sách các tuple là khoảng giá trị của các biến trong các hàm `objectives` (default: {None})

    Returns:
        list, list -- danh sách các giá trị của biến khiến các hàm `objectives` đạt tối thiểu, danh sách các giá trị tối thiểu của các hàm
        float -- time
    """

    ##############################
    # Định nghĩa problem cần minimize
    ##############################
    problem = Problem(num_of_variables=nVariables,
                      objectives=objectives,
                      variables_range=varRange,
                      expand=expand,
                      same_range=same_range)

    ##############################
    # Tiến hành minimize
    ##############################
    evo = Evolution(problem,
                    num_of_generations=nGeneration,
                    num_of_individuals=nIndividuals)

    start = time.time()

    evol = evo.evolve()

    end = time.time()

    return evol[0].features, evol[0].objectives, end - start
Exemplo n.º 3
0
def Select(population, MSR, RV, BI_size, population_K ,nsol, new_msr, new_rv,new_bisize, new_K, generation,self_population,Zdt_definitions,PPlotter,PProblem,EEvolution,population_label,children_label):
    if (Zdt_definitions is None) and (PPlotter is None) and (PProblem is None) and (EEvolution is None):

        zdt_definitions = ZDT3Definitions()
        plotter = Plotter(zdt_definitions)
        problem = ZDT(zdt_definitions)
        evolution = Evolution(problem, 1, len(population))
        evolution.register_on_new_generation(plotter.plot_population_best_front)
        evolution.register_on_new_generation(collect_metrics)
    else:
        zdt_definitions=Zdt_definitions
        plotter=PPlotter
        problem=PProblem
        evolution=EEvolution


    new_pop,objectives,self_population,Final_label,K= evolution.evolve(population,MSR, RV, BI_size, population_K,nsol, new_msr, new_rv, new_bisize, new_K,generation,self_population,population_label,children_label)

    return new_pop,objectives,self_population,zdt_definitions,plotter,problem,evolution,Final_label,K
Exemplo n.º 4
0

def f1(x):
    s = 0
    for i in range(len(x) - 1):
        s += -10 * math.exp(-0.2 * math.sqrt(x[i]**2 + x[i + 1]**2))
    return s


def f2(x):
    s = 0
    for i in range(len(x)):
        s += abs(x[i])**0.8 + 5 * math.sin(x[i]**3)
    return s


problem = Problem(num_of_variables=3,
                  objectives=[f1, f2],
                  variables_range=[(-5, 5)],
                  same_range=True,
                  expand=False)
evo = Evolution(problem, mutation_param=20)
func = [i.objectives for i in evo.evolve()]

function1 = [i[0] for i in func]
function2 = [i[1] for i in func]
plt.xlabel('Function 1', fontsize=15)
plt.ylabel('Function 2', fontsize=15)
plt.scatter(function1, function2)
plt.show()
Exemplo n.º 5
0
    problem = Problem(num_of_variables=5,
                      objectives=[gmean_inv, dem_fpr],
                      variables_range=[
                          (min_range_criterion, max_range_criterion),
                          (min_range_max_depth, max_range_max_depth),
                          (min_range_samples_split, max_range_samples_split),
                          (min_range_leaf_nodes, max_range_leaf_nodes),
                          (min_range_class_weight, max_range_class_weight)
                      ],
                      individuals_df=pd.DataFrame(),
                      num_of_generations=generations,
                      num_of_individuals=individuals,
                      dataset_name=dataset,
                      variable_name=variable,
                      seed=set_seed)

    print("------------RUN:", run)

    evo = Evolution(problem,
                    evolutions_df=pd.DataFrame(),
                    dataset_name=dataset,
                    protected_variable=variable,
                    num_of_generations=generations,
                    num_of_individuals=individuals)
    pareto = evo.evolve()

    first = True
    for p in pareto:
        problem.test_and_save(p, first, problem.seed)
        first = False
Exemplo n.º 6
0
    print("Generation: {}".format(generation_num + 1))


collected_metrics = {}


def collect_metrics(population, generation_num):
    pareto_front = population.fronts[0]
    metrics = ZDT3Metrics()
    hv = metrics.HV(pareto_front)
    hvr = metrics.HVR(pareto_front)
    collected_metrics[generation_num] = hv, hvr


pbr_props.show_info = True

pbr_definitions = PBRDefinitions()
plotter = Plotter(pbr_definitions)
problem = PBRCosts(pbr_definitions)
evolution = Evolution(problem, 50, 50)
evolution.register_on_new_generation(plotter.plot_population_best_front)
evolution.register_on_new_generation(print_generation)
evolution.register_on_new_generation(collect_metrics)
pareto_front = evolution.evolve()
plotter.write_report(pareto_front)

pbr_engine.close_aspen()

# plotter.plot_x_y(collected_metrics.keys(), map(lambda (hv, hvr): hvr, collected_metrics.values()), 'generation', 'HVR', 'HVR metric for PBR problem', 'hvr-pbr_problem')
print("--- Whole run: %s seconds ---" % (time.time() - start_time))
Exemplo n.º 7
0
    def optimize(self,predictions,run_day,C=0,Q=0.6,Q_rfa=1,num_of_generations=250, num_of_individuals=200, num_of_tour_particips=10,tournament_prob=1, p_c=0.5,p_m=0.5,p_risked=0.8,full=True,policy='return'):
        
        """optimizes the portfolio following constraints, predictions and historical risk

            Parameters
            ----------
            predictions : array
                array of optimal portfolios
                
            run_day : datetime
                array of corresponfing portfolios risks
                
            C : int
                array of corresponfing portfolios returns
                
            Q : float
                maximal quantity to be invested in a risky asset
                
            Q_rfa : sloat
                maximal quantity to be invested in the risk free asset
                
            num_of_generations : int
                number of NSGAII generations 
                
            num_of_individuals : int
                NSGAII population 
                
            num_of_tour_particips : int
                NSGAII tournament participants 
                
            tournament_prob : float
                paramters in binary selection tournament (not used for now)
                
            p_c : float
                crossover probability 
                
            p_m : float
                mutaion probability
                
            p_risked : float
                probability of doing the crossover on the risky assets
                
            full : boolean
                True: cross over on the whole portfolio , False : cross over on a part of the portfolio
                
            policy : str
                selection policy


            Returns
            -------
            array
                the selected optimal portfolio
        """
        
        L=[]
        B=[]
        
        all_real_returns=self.get_all_real_returns()
        
        cov=all_real_returns[all_real_returns.index<=run_day].cov().values


        def f1(x):
            return self.risk_portfolio(x,cov)

        def f2(x):
            return self.return_portfolio(x,predictions)

        portfolio_size=self.N
        Q=Q
        Q_rfa=Q_rfa
        if(C==0):
            C=portfolio_size

        problem = Problem(portfolio_size=portfolio_size, objectives=[f1, f2],Q=Q,Q_rfa=Q_rfa,C=C)
        evo = Evolution(problem, num_of_generations, num_of_individuals, num_of_tour_particips,tournament_prob, p_c,p_m,p_risked,full=True)
        solutions=evo.evolve()
        func = [i.objectives for i in solutions]
        function1 = [i[0] for i in func]
        function2 = [i[1] for i in func]

        plt.scatter(function1,function2)
        plt.title('Paret Set of Optimar Portfolios')
        plt.xlabel('Risk')
        plt.ylabel('Return')

        plt.savefig(self.portfolios_path+'/front_'+str(run_day)+'.png')


        selected_portfolio=self.choose_portfolio(solutions,function1,function2,policy,L,B)
        
        with open(self.portfolios_path+'/portfolio_'+str(run_day)+'.p', 'wb') as f:
            pickle.dump(selected_portfolio, f)
        
        
        return selected_portfolio
Exemplo n.º 8
0
    #individual_id_list = contains all UNIQUE GENE ID that is used for calculating BHI
    #individual_ref_id_list = contains all GENE reference id that is used for calculating PPI Interaction Score
    #all_datamatrix, all_normalized_data_matrix = preprocessed the gene expression values that is fed to FCM
    #unique_protein_ref: Contains unique Gene refernce ID
"""
individual_list = []

individual_length, individual_list, individual_id_list, individual_ref_id_list = preprocess(
    'Input_data/preprocessed_ILD.txt')
all_data_matrix, all_normalized_data_matrix = preprocess_fcm_datamatrix(
    individual_length, individual_list)
"""
Input from user
"""
chromosome_number = int(
    sys.argv[1]
)  # Enter the number of chromosome(individual) you want to generate
generation_number = int(sys.argv[2])  # Enter the maximum number of generation

zdt_definitions = ZDT3Definitions(individual_list, individual_id_list,
                                  individual_ref_id_list)
plotter = Plotter(zdt_definitions, individual_list)
problem = ZDT(zdt_definitions, all_normalized_data_matrix, chromosome_number)
evolution = Evolution(problem, generation_number, chromosome_number,
                      individual_list, individual_length)
evolution.register_on_new_generation(plotter.plot_population_best_front)
evolution.register_on_new_generation(print_generation)
pareto_front = evolution.evolve()
end = time.time()
print "##$$$##"
print(end - start)
Exemplo n.º 9
0
from nsga2.problem import Problem
from nsga2.evolution import Evolution
import matplotlib.pyplot as plt


def f1(x):
    return x**2


def f2(x):
    return (x - 2)**2


problem = Problem(num_of_variables=1,
                  objectives=[f1, f2],
                  variables_range=[(-55, 55)])
evo = Evolution(problem)
evol = evo.evolve()
func = [i.objectives for i in evol]

function1 = [i[0] for i in func]
function2 = [i[1] for i in func]
plt.xlabel('Function 1', fontsize=15)
plt.ylabel('Function 2', fontsize=15)
plt.scatter(function1, function2)
plt.show()
Exemplo n.º 10
0
                      (min_range_class_weight, max_range_class_weight)
                  ],
                  individuals_df=pd.DataFrame(),
                  num_of_generations=generations,
                  num_of_individuals=individuals,
                  dataset_name=dataset,
                  variable_name=variable,
                  seed=set_seed)

# problem with 3 fo:
#problem = Problem(num_of_variables = 5, objectives = [gmean_inv, dem_fpr, complexity], variables_range = [(min_range_criterion, max_range_criterion), (min_range_max_depth, max_range_max_depth), (min_range_samples_split, max_range_samples_split), (min_range_leaf_nodes, max_range_leaf_nodes), (min_range_class_weight, max_range_class_weight)], individuals_df = pd.DataFrame(), num_of_generations = generations, num_of_individuals = individuals, dataset_name = dataset, variable_name = variable, seed = set_seed)
#problem = Problem(num_of_variables = 5, objectives = [accuracy_inv, dem_fpr], variables_range = [(min_range_criterion, max_range_criterion), (min_range_max_depth, max_range_max_depth), (min_range_samples_leaf, max_range_samples_leaf), (min_range_impurity_decrease, max_range_impurity_decrease), (min_range_class_weight, max_range_class_weight)], individuals_df = pd.DataFrame(), num_of_generations = generations, num_of_individuals = individuals, dataset_name = dataset, variable_name = variable)

evo = Evolution(problem,
                evolutions_df=pd.DataFrame(),
                dataset_name=dataset,
                protected_variable=variable,
                num_of_generations=generations,
                num_of_individuals=individuals)
func = [i.objectives for i in evo.evolve()]
print(func)

df = pd.read_csv(config['ROOT_PATH'] + '/results/population/evolution_' +
                 dataset + '_' + variable + '_seed_' + str(set_seed) +
                 '_gen_' + str(generations) + '_indiv_' + str(individuals) +
                 '.csv')
df = df.loc[(df['rank'] == 0)
            & ((df['generation'] == 1) | (df['generation'] == 20)
               | (df['generation'] == 40) | (df['generation'] == 60)
               | (df['generation'] == 80) | (df['generation'] == 100))]

#scatterplot(df, set_seed, 'dem_fp', 'error', 'generation', dataset, variable, generations, individuals)
Exemplo n.º 11
0
                    156,50,32,112,132,84,56,49,136,134,75,31,57,36,54,59,\
                    114,13,40,14,66,5,63,107,176,133,180,97,162,123,0,67]
    '''
    # hos_opt_id_arr 存储需要优化的医院ID,traffic的前10以及road的前10,非重复数值16个
    hos_opt_id_arr = [
        1, 6, 11, 26, 27, 29, 35, 46, 47, 62, 71, 84, 94, 113, 122, 132
    ]
    #打乱数组顺序,随机洗牌,选取前P个作为候选点
    np.random.shuffle(hos_opt_id_arr)
    hos_opt = hos_opt_id_arr[0:vardim]

    hos_definitions = HospitalDefinitions()
    plotter = Plotter(hos_definitions)
    problem = Hospital(hos_definitions, vardim, bound, hos_opt)
    '''Evolution(self,problem, vardim, num_of_generations, num_of_individuals, mutation_prob, num_of_genes_to_mutate, num_of_tour_particips)'''
    evolution = Evolution(problem, vardim, i, num_of_generations,
                          num_of_individuals, 0.4, 1, 2)
    evolution.register_on_new_generation(plotter.plot_population_best_front)
    evolution.register_on_new_generation(print_generation)
    evolution.register_on_new_generation(print_metrics)
    evolution.register_on_new_generation(collect_metrics)
    pareto_front = evolution.evolve()

    plotter.plot_x_y(collected_metrics.keys(),
                     map(lambda (hv, hvr): hvr,
                         collected_metrics.values()), 'generation', 'HVR',
                     'HVR metric for Hospital relocation problem',
                     str(vardim) + '-' + str(i) + '-' + 'HVR')
    fout = open(
        "D:\\PythonCode\\NSGA-II\\txt\\" + str(vardim) + '-' + str(i) + '-' +
        'metrics.txt', 'w')
    fout.write('generation,HV,HVR' + '\n')
Exemplo n.º 12
0
def print_generation(population, generation_num):
    print("Generation: {}".format(generation_num))

def print_metrics(population, generation_num):
    pareto_front = population.fronts[0]
    metrics = ZDT3Metrics()
    hv = metrics.HV(pareto_front)
    hvr = metrics.HVR(pareto_front)
    print("HV: {}".format(hv))
    print("HVR: {}".format(hvr))

collected_metrics = {}
def collect_metrics(population, generation_num):
    pareto_front = population.fronts[0]
    metrics = ZDT3Metrics()
    hv = metrics.HV(pareto_front)
    hvr = metrics.HVR(pareto_front)
    collected_metrics[generation_num] = hv, hvr

zdt_definitions = ZDT3Definitions()
plotter = Plotter(zdt_definitions)
problem = ZDT(zdt_definitions)
evolution = Evolution(problem, 200, 200)
evolution.register_on_new_generation(plotter.plot_population_best_front)
evolution.register_on_new_generation(print_generation)
evolution.register_on_new_generation(print_metrics)
evolution.register_on_new_generation(collect_metrics)
pareto_front = evolution.evolve()

plotter.plot_x_y(collected_metrics.keys(), map(lambda (hv, hvr): hvr, collected_metrics.values()), 'generation', 'HVR', 'HVR metric for ZDT3 problem', 'hvr-zdt3')