Source code for npl.optimization.genetic_algoritm.ExchangeOperator

import numpy as np
import copy


[docs] class ExchangeOperator: def __init__(self, p): self.p = p self.index = 0
[docs] def random_exchange(self, particle, n_exchanges=None): new_particle = copy.deepcopy(particle) if new_particle.is_pure(): print("Pure particle! No permutation possible") return new_particle symbols = new_particle.get_all_symbols() symbol1 = symbols[0] symbol2 = symbols[1] max_exchanges = min(new_particle.get_n_atoms_of_symbol(symbol1), new_particle.get_n_atoms_of_symbol(symbol2)) if n_exchanges is None: n_exchanges = min(np.random.geometric(p=self.p, size=1)[0], max_exchanges) symbol1_indices = np.random.choice(new_particle.get_indices_by_symbol(symbol1), n_exchanges, replace=False) symbol2_indices = np.random.choice(new_particle.get_indices_by_symbol(symbol2), n_exchanges, replace=False) new_particle.swap_symbols(zip(symbol1_indices, symbol2_indices)) return new_particle