Почему результат вывода randomize повторяется одинаково? - PullRequest
0 голосов
/ 30 сентября 2019

Я хочу, чтобы на каждой итерации отображалось разное значение случайного массива. Почему мои выходные данные отображают только одно и то же случайное значение для каждой итерации и n_particles?

import random as rd
import numpy as np 

n_iterations = int(input("Inform the number of iterations: "))
n_particles = int(input("Inform the number of particles: "))

# a1,a2,a3=100

a3=rd.randint(0,1)
a2=rd.randint(0,50)
a1=100-a2-a3

particle_position_vector =  np.array([np.array([a1, a2, a3]) for _ in range(n_particles)])

iteration = 0
while iteration < n_iterations:
    print("iteration : ", iteration)
    for i in range(n_particles):
        print(particle_position_vector[i])

Я ожидаю, что выходные данные для a1, a2, a3 должны быть рандомизированы с другим значением при цикле вместо того же рандомизированного значения ..

Вывод ниже - это то, что я получаю не так, как ожидаемый результат ...

iteration :  0
[ 97  2  1]  
[ 97  2  1]  
iteration :  1
[ 97  2  1]  
[ 97  2  1]

1 Ответ

3 голосов
/ 30 сентября 2019

Поскольку вы фиксируете результат ГСЧ в переменной.

a3=rd.randint(0,1)
a2=rd.randint(0,50)
a1=100-a2-a3

Не входит в цикл и не будет генерировать новые значения при каждой итерации цикла for, вместо этого a3, a2, a1 будет иметь постоянные значения, сгенерированные случайным образом один раз. Если вы хотите, чтобы a3, a2, a1 были случайными значениями для каждой итерации в цикле while, вам нужно определить их внутри цикла.

iteration = 0
while iteration < n_iterations:
   a3=rd.randint(0,1)
   a2=rd.randint(0,50)
   a1=100-a2-a3
   particle_position_vector =  np.array([np.array([rd.randint(0,2), rd.randint(0,2), a1, a2, a3]) for _ in range(n_particles)])
    print("iteration : ", iteration)
    for i in range(n_particles):

        fitness_cadidate = fitness_function(particle_position_vector[i])
        print(-(fitness_cadidate), ' ', particle_position_vector[i], ' ')

Редактировать: OP сказал, что код не работает

Здесь вы можете увидеть, что я пытался, и я скопирую / вставлю именно вывод из командной строки.

import random as rd
import numpy as np 
n_particles = 10
iteration = 5
n_iterations = 10
while iteration < n_iterations:
   a3=rd.randint(0,1)
   a2=rd.randint(0,50)
   a1=100-a2-a3
   particle_position_vector =  np.array([np.array([rd.randint(0,2), rd.randint(0,2), a1, a2, a3]) for _ in range(n_particles)])
   print(a3)
   print(a2)
   print(a1)
   print(particle_position_vector)
   iteration += 1

Вывод:

1
30
69
[[ 2  2 69 30  1]
 [ 2  0 69 30  1]
 [ 0  2 69 30  1]
 [ 1  1 69 30  1]
 [ 1  0 69 30  1]
 [ 0  0 69 30  1]
 [ 2  0 69 30  1]
 [ 1  0 69 30  1]
 [ 2  1 69 30  1]
 [ 1  1 69 30  1]]
0
50
50
[[ 1  2 50 50  0]
 [ 0  2 50 50  0]
 [ 2  2 50 50  0]
 [ 1  0 50 50  0]
 [ 0  1 50 50  0]
 [ 2  0 50 50  0]
 [ 0  0 50 50  0]
 [ 0  2 50 50  0]
 [ 1  1 50 50  0]
 [ 1  1 50 50  0]]
1
23
76
[[ 2  0 76 23  1]
 [ 2  0 76 23  1]
 [ 1  1 76 23  1]
 [ 2  0 76 23  1]
 [ 2  1 76 23  1]
 [ 2  0 76 23  1]
 [ 1  0 76 23  1]
 [ 1  2 76 23  1]
 [ 2  2 76 23  1]
 [ 0  1 76 23  1]]
1
7
92
[[ 2  1 92  7  1]
 [ 0  0 92  7  1]
 [ 2  2 92  7  1]
 [ 1  1 92  7  1]
 [ 1  2 92  7  1]
 [ 1  1 92  7  1]
 [ 0  2 92  7  1]
 [ 0  2 92  7  1]
 [ 1  0 92  7  1]
 [ 2  0 92  7  1]]
1
2
97
[[ 2  2 97  2  1]
 [ 1  0 97  2  1]
 [ 1  2 97  2  1]
 [ 0  2 97  2  1]
 [ 1  2 97  2  1]
 [ 2  2 97  2  1]
 [ 2  1 97  2  1]
 [ 2  1 97  2  1]
 [ 1  1 97  2  1]
 [ 2  2 97  2  1]]

Как видите,для каждой итерации a1, a2 и a3 назначаются разные случайные значения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...