У меня есть код:
for i in [data1, data2]:
pbest_A = i.iloc[:, 0]
pbest_B = i.iloc[:, 3]
gbest_score_cycle = i['score'].max() # max score in cycle
gbest_score = np.where(gbest_score_cycle > gbest_score, gbest_score_cycle, gbest_score) # update gbest score
if gbest_score == gbest_score_cycle: # row of gbest
gbest = i.loc[i['score'].idxmax()]
gbest_A = gbest[0]
gbest_B = gbest[3]
save_A = []
save_B = []
for j in range(5):
R1 = random.uniform(0,1)
R2 = random.uniform(0,1)
Xid_A = New_Xid_A
Xid_B = New_Xid_B
Vid_A = New_Vid_A
Vid_B = New_Vid_B
New_Vid_A = w*Vid_A + c1*R1*(pbest_A[i]- Xid_A) + c2*R2*(gbest_A - Xid_A)
New_Vid_B = w*Vid_B + c1*R1*(pbest_B[i] - Xid_B) + c2*R2*(gbest_B - Xid_B)
New_Xid_A= Xid_A + New_Vid_A
New_Xid_B= Xid_B + New_Vid_B
# get result: New_Xid_A, New_Xid_B
# *** if New_Xid_A > 10 or New_Xid_B > 20, restart this loop (same j in [for j in range(5)])
save_A.append(New_Xid_A)
save_B.append(New_Xid_B)
print(save_A)
print(save_B)
Я искал проблему такого рода. И я думаю о том, как использовать while
в цикле for. Потому что теперь моя проблема в том, когда условие соответствует, затем перезапустите цикл (и не добавляйте к save_A & save_B). Есть ли способ сделать это?