import datetime as dt
errorq = 0.1
-errorD = 1E-1
+errorD = 1E-2
epsilon = 1E-10
vrate = 0.8
p = 0.7
-def maj(k,maj_theta,mxg,idxexp):
+def maj(k,maj_theta,mxg,idxexp,comppsh=False):
# initialisation des operateurs lagrangiens
global u, v, la, w, theta , q, Ps, Rh, eta, x, valeurFonctionDuale
n1 = dt.datetime.now()
c = -float(sum([a[i][l]*w[l] for l in L]) - la[i]*Bi)/(2*amplifieur)
n2 = dt.datetime.now()
- cp = armin(f_q,q[i],POS,tuple([i]))
+ #cp = armin(f_q,q[i],POS,tuple([i]))
n3 = dt.datetime.now()
tq += (n2-n1).microseconds
tqa += (n3-n2).microseconds
for h in V:
if not ASYNC or random() < taux_succes:
n1 = dt.datetime.now()
- t= float(-3*la[h]+mt.sqrt(9*(la[h]**2)+64*delta*v[h]*mt.log(float(sigma2)/D)/gamma))/(16*delta)
- rep = mt.pow(t,float(3)/5)
+ #calcul nouvelle solution
+ if comppsh :
+ if la[h] != 0 :
+ t= float(2*v[h]*mt.log(float(sigma2)/D))/(3*gamma*la[h])
+ rep = mt.pow(t,float(3)/5)
+ else :
+ rep = 10
+ else :
+ t= float(-3*la[h]+mt.sqrt(9*(la[h]**2)+64*delta*v[h]*mt.log(float(sigma2)/D)/gamma))/(16*delta)
+ rep = mt.pow(t,float(3)/5)
+
+
+
n2 = dt.datetime.now()
- cp = armin(f_Ps,Ps[h],POS,tuple([h]))
+ #cp = armin(f_Ps,Ps[h],POS,tuple([h]))
n3 = dt.datetime.now()
tp += (n2-n1).microseconds
tpa += (n3-n2).microseconds
n1 = dt.datetime.now()
rep = float(v[h])/(2*delta)
n2 = dt.datetime.now()
- cp = armin(f_Rh,Rh[h],POS_NUL,tuple([h]))
+ #cp = armin(f_Rh,Rh[h],POS_NUL,tuple([h]))
n3 = dt.datetime.now()
tr += (n2-n1).microseconds
tra += (n3-n2).microseconds
n1 = dt.datetime.now()
rep = -float(cs[l]*sum([la[i]*aplus[i][l] for i in N]) +cr*sum([la[i]*amoins[i][l] for i in N])+sum([u[(h,i)]*a[i][l] for i in N]))/(2*delta)
n2 = dt.datetime.now()
- cp = armin(f_x,x[(h,l)],POS_NUL,tuple([h,l]))
+ #cp = armin(f_x,x[(h,l)],POS_NUL,tuple([h,l]))
n3 = dt.datetime.now()
tx += (n2-n1).microseconds
txa += (n3-n2).microseconds
#print liste_arret
#print (min(m),max(m),float(sum(m))/nbexp,m),m
- return (liste_arret,dur,dura)
+ #return (liste_arret,dur,dura)
+ return (liste_arret,dur)
def __une_seule_exp__(fichier_donees):
+
+def __comparePsh_et_Psh_avec8_3__(nbexp,out=False):
+ print "tttttttttttt"
+ global u, v, la, w, theta , q, Ps, Rh, eta, x, valeurFonctionDuale
+ res = {}
+ m,mp = [],[]
+ itermax = 100000
+
+ def __maj_theta(k):
+ mem = []
+ om = omega/(mt.pow(k,0.75))
+ return om
+ liste_arret=[]
+ for idxexp in range(nbexp):
+ mxg = 0
+ if not(out):
+ initialisation()
+ else :
+ initialisation_()
+
+ k = 1
+ arret = False
+ sm = 0
+ err, ar = 0,0
+ dur,dura=0,0
+
+ # duppliquee
+ while k < itermax and not arret :
+ (u,v,la,w,theta,eta,q,Ps,Rh,x,valeurFonctionDuale,ar,mxg,smax,ct,cta)=maj(k,__maj_theta,mxg,idxexp)
+ err = (max(q.values()) - min(q.values()))/min(q.values())
+ dur += ct
+ dura += cta
+ arret = err < errorq or ar < errorD
+ k+=1
+ variation = "+" if smax > sm else "-"
+ if out : print variation,
+ if k%100 ==0 :
+ print "k:", k,
+ "erreur sur q",
+ errorq, "erreur sur F", ar, "et q:", q
+
+ if out : print "maxg=", mxg
+ mem = [deepcopy(q),deepcopy(Ps),deepcopy(Rh),deepcopy(eta),
+ deepcopy(x),deepcopy(u),deepcopy(v),deepcopy(la),deepcopy(w)]
+ """
+ if k%4500 == 0 :
+
+ #print "#########\n",mem,"\#########\n"
+ if k%4600 == 0 :
+ #print "#########m\n",mem,"\#########\n"
+ """
+
+
+ if smax - sm > 500:
+ print "variation trop grande"
+ print "init"
+ print init
+ exit
+ sm = smax
+
+ if k == itermax:
+ print "nbre d'iteration trop grand"
+ print "init"
+ print init
+ sy.exit(1)
+ else :
+ liste_arret += [(err, ar,k,errorD)]
+
+ print "###############"
+ print k," avec optym"
+ print "###############"
+ m += [k]
+ ##fin de duplication
+
+
+
+ #remise a zero
+ q,Ps,Rh,eta,x,u,v,la,w=init[0],init[1],init[2],init[3],init[4],init[5],init[6],init[7],init[8]
+ k = 1
+ arret = False
+ sm = 0
+ err, ar = 0,0
+ dur,dura=0,0
+ # duppliquee
+ while k < itermax and not arret :
+ (u,v,la,w,theta,eta,q,Ps,Rh,x,valeurFonctionDuale,ar,mxg,smax,ct,cta)=maj(k,__maj_theta,mxg,idxexp,True)
+ err = (max(q.values()) - min(q.values()))/min(q.values())
+ dur += ct
+ dura += cta
+ arret = err < errorq or ar < errorD
+ k+=1
+ variation = "+" if smax > sm else "-"
+ if out : print variation,
+ if k%100 ==0 :
+ print "k:", k,
+ "erreur sur q",
+ errorq, "erreur sur F", ar, "et q:", q
+
+ if out : print "maxg=", mxg
+ mem = [deepcopy(q),deepcopy(Ps),deepcopy(Rh),deepcopy(eta),
+ deepcopy(x),deepcopy(u),deepcopy(v),deepcopy(la),deepcopy(w)]
+ """
+ if k%4500 == 0 :
+
+ #print "#########\n",mem,"\#########\n"
+ if k%4600 == 0 :
+ #print "#########m\n",mem,"\#########\n"
+ """
+
+
+ if smax - sm > 500:
+ print "variation trop grande"
+ print "init"
+ print init
+ exit
+ sm = smax
+
+ if k == itermax:
+ print "nbre d'iteration trop grand"
+ print "init"
+ print init
+ sy.exit(1)
+ else :
+ liste_arret += [(err, ar,k,errorD)]
+
+ print "###############"
+ print k,"sans optym"
+ print "###############"
+ mp += [k]
+
+
+ #print liste_arret
+ #print (min(m),max(m),float(sum(m))/nbexp,m),m
+ #return (liste_arret,dur,dura)
+ return (m,mp)
+
+
+
# pour evaluer argmin
+"""
listederes=[]
k=0
for k in list(np.logspace(-5, -3, num=10)):
listederes += [(k,__evalue_maj_theta__(3))]
k+=1
print listederes
+"""
+
+# pour evaluer psh
+listederes=[]
+for k in list(np.logspace(-5, -3, num=10)):
+ print "Precision",k
+ errorD = k
+ listederes += [(k,__comparePsh_et_Psh_avec8_3__(10))]
+ k+=1
+print listederes
+
+
+