j'ai construire un programme qui trouvent 8 constantes différentes dans cette équation:8 boucles imbriquées de combinaison possible
a*40 +b*0 +c*3 +d*10 +e*10 +f*0 +g*9 +h*7.5 =292(+-5)
a*4 +b*7 +c*5 +d*3 +e*0 +f*0 +g*7 +h*0 =63(+-5)
a*0 +b*6 +c*3 +d*0 +e*0 +f*5 +g*7 +h*0 =85(+-5)
a*175 +b*50 +c*50 +d*75 +e*75 +f*50 +g*110 +h*50 =635(+-5)
en utilisant la force brute (a-h < = 5). mais cela prend vraiment beaucoup de temps (je sais, je sais que vous n'avez pas besoin de le dire) comment puis-je accélérer ce processus?
fondamentalement, ceci est mon code. en réalité, mon programme en possède 4:
chofound=[]
konstanta=[5,5,5,5,5,5,5,5]
## konstanta=[10,0,5,8,2,0,4,
for h in range(0,5):
for g in range(0,5):
for f in range(0,5):
for e in range(0,5):
for d in range(0,5):
for c in range(0,5):
for b in range(0,5):
for a in range(0,5):
hasil= a*konstanta[0]+\
b*konstanta[1]+\
c*konstanta[2]+\
d*konstanta[3]+\
e*konstanta[4]+\
f*konstanta[5]+\
g*konstanta[6]+\
h*konstanta[7]
if (hasil>=(292-5) and hasil <=(292+5)):
asd=[a,b,c,d,e,f,g,h]
print ("found with config: {}".format(asd))
chofound.append(asd)
return chofound
Y a-t-il un moyen efficace de connaître le a-h sans force brute? ou tout algorithme pour faire fonctionner mon code de manière efficace?
Je n'ai aucune idée ce que vous essayez de faire, mais suppose que 'itertools' est la clé pour le faire moins verbeusement. Aussi 5 ** 8 itérations est trivial pour un ordinateur moderne. Quoi que vous fassiez, la boucle elle-même n'est pas le goulot de la bouteille. Peut-être que c'est toute cette impression. –
L'utilisation de la classe 'array' de' numpy' vous permettrait de réécrire ceci comme une opération vectorielle et devrait être beaucoup plus rapide que les boucles for. – Craig
Est-ce que 292 (+ - 5) signifie que votre solution a une tolérance de +/- 5? – Crispin