import numpy as np
def generate_genome(length: int, max_individuals: int = 0):
bits = None
if max_individuals > 0:
num_individuals = np.random.randint(1, max_individuals + 1)
print(f'Will have maximum of {num_individuals} individuals')
print('Controlled randomization')
bits = np.full(length, 0)
bits_flipped_ids = np.random.choice(range(0, length), size=num_individuals, replace=False)
print(f'Following indices will be flipped: {sorted(bits_flipped_ids)}')
np.put(a=bits, ind=bits_flipped_ids, v=1)
else:
print('Standard randomization')
bits = np.random.choice([0, 1], size=length)
genome = Genome(bits=bits.tolist())
print(f'Genome bits: {genome.bits}')
return genome
Поддерживает два режима:
без max_individuals — создает список битов определенной длины
с max_individuals — создает список битов определенной длины, но также гарантирует, что количество единиц не превышает max_individuals. Размещение единиц происходит по случайным индексам (конечно, ограничено разрешенной длиной списка)
Это часть генетический алгоритм, над которым я работаю. В результате будут созданы образцы, аналогичные приведенным ниже:
generate_genome(10, 0)
[0 0 0 0 0 0 0 0 0 1] with bits flipped at [9]
[0 0 0 1 0 1 0 1 0 0] with bits flipped at [3 5 7]
[0 1 0 0 0 1 0 1 0 0] with bits flipped at [1 5 7]
[0 1 0 1 0 0 0 0 0 0] with bits flipped at [1 3]
Моя проблема в том, что существует возможность создания одинаковых бит-списков. Эта возможность увеличивается с уменьшением длины и max_individuals. Я хотел бы контролировать это, чтобы увидеть, как это повлияет на мой алгоритм, поэтому я ищу эффективный способ создания набора уникальных битовых списков с помощью моей функции или, что еще лучше, набора битовых списков, в котором количество уникальных битовых списков списками можно управлять с помощью параметра.
Я создал следующую функцию, которая может генерировать список нулей и единиц (по сути, битовую строку) с использованием рандомизации. [code]import numpy as np
def generate_genome(length: int, max_individuals: int = 0): bits = None if max_individuals > 0: num_individuals = np.random.randint(1, max_individuals + 1) print(f'Will have maximum of {num_individuals} individuals') print('Controlled randomization') bits = np.full(length, 0) bits_flipped_ids = np.random.choice(range(0, length), size=num_individuals, replace=False) print(f'Following indices will be flipped: {sorted(bits_flipped_ids)}') np.put(a=bits, ind=bits_flipped_ids, v=1) else: print('Standard randomization') bits = np.random.choice([0, 1], size=length)
genome = Genome(bits=bits.tolist()) print(f'Genome bits: {genome.bits}') return genome [/code] Поддерживает два режима: [list] [*]без max_individuals — создает список битов определенной длины [*]с max_individuals — создает список битов определенной длины, но также гарантирует, что количество единиц не превышает max_individuals. Размещение единиц происходит по случайным индексам (конечно, ограничено разрешенной длиной списка) [/list] Это часть генетический алгоритм, над которым я работаю. В результате будут созданы образцы, аналогичные приведенным ниже: [list] [*]без max_individuals [code]generate_genome(10, 0)
[0 0 0 0 0 0 0 0 0 1] with bits flipped at [9] [0 0 0 1 0 1 0 1 0 0] with bits flipped at [3 5 7] [0 1 0 0 0 1 0 1 0 0] with bits flipped at [1 5 7] [0 1 0 1 0 0 0 0 0 0] with bits flipped at [1 3] [/code]
[/list] Моя проблема в том, что существует возможность создания одинаковых бит-списков. Эта возможность увеличивается с уменьшением длины и max_individuals. Я хотел бы контролировать это, чтобы увидеть, как это повлияет на мой алгоритм, поэтому я ищу эффективный способ создания набора уникальных битовых списков с помощью моей функции или, что еще лучше, набора битовых списков, в котором количество уникальных битовых списков списками можно управлять с помощью параметра.
Я создал следующую функцию, которая может генерировать список нулей и единиц (по сути, битовую строку) с использованием рандомизации.
import numpy as np
def generate_genome(length: int, max_individuals: int = 0):
bits = None
if max_individuals >...
Я создал следующую функцию, которая может генерировать список нулей и единиц (по сути, битовую строку) с использованием рандомизации.
import numpy as np
Я создал следующую функцию, которая может генерировать список нулей и единиц (по сути, битовую строку) с использованием рандомизации.
import numpy as np