Skip to main content

Genetic Algorithm Framework

Project description

Genetic-Algorithm

Implementation of Genetic-Algorithm for solution finding (optimization)

Easy to use GA implementation. With parallel computing and info-prints. Simple and flexible for your optimal solution finding.

Usage

  1. Get the code

    • Download the project and add to python module search path in your code

      import sys
      sys.path.insert(0, '../path_to_GA_py_dir')
      # ./ => this folder
      # ../ => supfolder
      
    • Or pip install it (easier)

      pip install simple-genetic-algorithm
      
  2. Import the class and helper function

    import simple_genetic_algorithm as sga
    # sga.GeneticInstance
    # sga.get_random
    # or
    from simple_genetic_algorithm import GeneticInstance, get_random
    
  3. Create 2 functions and parameters

    class Example_GA(sga.GeneticInstance):
    
        def calculate_fitness(self, kwargs, params):
            # return here the fitness (how good the solution is)
            # as bigger as better!
            # hint: if you have a loss, you should propably just return -1*loss
            # example for sklearn model:
             model = RandomForestRegressor(n_estimators=params["n_estimators"], ...)
      		 model = model.fit(kwargs["X_train"], kwargs["y_train"])
            # predict
            y_pred = model.predict(kwargs["X_test"])
            # calc mean absolute error loss
            y_true = np.array(kwargs["y_test"])
            y_pred = np.array(y_pred)
            return - np.mean(np.abs(y_true - y_pred))
    
        def get_random_value(self, param_key):
            if param_key == "name_of_parameter_1":
                return get_random(10, 1000)
            elif param_key == "name_of_parameter_2":
                return get_random(["something_1", "something_2", "something_3"])
            elif param_key == "name_of_parameter_3":
                return get_random(0.0, 1.0)
            
            ...
    
    parameters = ["n_estimators", "criterion", "max_depth", "max_features", "bootstrap"]
    
  4. Create and run genetic algorithm and pass the input, which will be used in the calculate_fitness function (in kwargs variable)

    optimizer = Example_GA(generations=10, population_size=15, mutation_rate=0.3, list_of_params=parameters)
    best_params, best_fitness, log_str = optimizer.optimize(X_train=X_train, y_train=y_train, X_test=X_dev, y_test=y_dev)
    

Short explanation:
The kwargs are the inputs of optimize-method. These are the values which are needed to calculate the fitness. Maybe you can calculate the fitness without them, depending on what you are optimizing.
The list of parameters are the gene/the solution, so the parameters which are changed and optimized.
The get_random_value method return a random value for a given parameter, so that the solutions can be initialized and mutated.

Examples

License

Feel free to use it. Of course you don't have to name me in your code :)

-> It is a copy-left license => MPL-2.0

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

simple_genetic_algorithm-0.2.5.0.tar.gz (11.9 kB view details)

Uploaded Source

File details

Details for the file simple_genetic_algorithm-0.2.5.0.tar.gz.

File metadata

File hashes

Hashes for simple_genetic_algorithm-0.2.5.0.tar.gz
Algorithm Hash digest
SHA256 500de4a285eeedb3a363b3237d9fcc43cc551202276d520e518a18e7b8ceb9a6
MD5 91d9da0c71f170351b5e12b85cb68b35
BLAKE2b-256 73b20377233d30208ef03d281646e4f29ab186426c0c89cea0338b479bbcceee

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page