def first_population(sensors, mi, d):
    population = []
    done = False
    for i in range(mi):
        genes = []
        gene_part = ''
        for _ in range(sensors):
            while True:
                gene_part = ''
                for _ in range((math.ceil(math.log2(dekoder.n())) +
                                math.ceil(math.log2(dekoder.m())) + 2)):
                    rand = random.randint(0, 1)
                    gene_part += str(rand)
                if not done:
                    tp = afunction.j_for_one(
                        dekoder.decode(gene_part)[0][0],
                        dekoder.decode(gene_part)[1][0], d)
                else:
                    tp = [0, 0]
                if not tp[1]:
                    break
            genes.append(gene_part)
        new_gene = ''
        while genes:
            new_gene += genes.pop()
        s = SJ(d)
        power = s.simple_J(new_gene)

        print(i + 1, "/", mi, " genotypes created (power: ", power, ")")
        if power >= 0.9:
            done = True
        population.append(new_gene)
    print("first population created")
    return population
def J_return_forbidden(x, y, alpha, dep):
    table = readFile.getArray()
    no_0 = seen_counter_for_0(table)

    n = dekoder.n()  # szerokosc x
    m = dekoder.m()  # szerokosc y
    is_forbidden = False

    for k in range(len(x)):

        # print(alpha[k])
        # print(m)

        table = angel_change(alpha[k], table)
        temp_x = x[k]
        x[k] = change_x(alpha[k], x[k], y[k], n, m)
        y[k] = change_y(alpha[k], temp_x, y[k], n, m)

        # print(x[k])
        # print(y[k])

        temp = j_for_one(x[k], y[k], dep, table)
        table = temp[0]
        if temp[1]:
            is_forbidden = True
        table = angel_change_back(alpha[k], table)
        # print_matrix(table)

    if is_forbidden:
        return None
    else:
        return round((seen_counter(table) / no_0), 4)