From fe438aa764b5d1ad7ea61512cffbb3761eff99b7 Mon Sep 17 00:00:00 2001 From: couchot Date: Mon, 9 Dec 2013 14:03:52 +0100 Subject: [PATCH] ajout comparaison convexite --- IWCMC14/argmin.tex | 59 ++++++++- IWCMC14/convex.png | Bin 0 -> 35518 bytes IWCMC14/convexity.tex | 25 +++- exp_controle_asynchrone/simulMWSN.py | 182 +++++++++++++++++++++++++-- 4 files changed, 255 insertions(+), 11 deletions(-) create mode 100644 IWCMC14/convex.png diff --git a/IWCMC14/argmin.tex b/IWCMC14/argmin.tex index 6aae1e5..5677856 100644 --- a/IWCMC14/argmin.tex +++ b/IWCMC14/argmin.tex @@ -89,4 +89,61 @@ $$ \end{table*} -This improvement \ No newline at end of file +This improvment has been evaluated on a set of experiments. +For 10 tresholds $t$, such that $1E-5 \le t \le 1E-3$, we have +executed 10 times the aproach detailled before either with the new +gradient calculus or with the original argmin one. +The Table~\ref{Table:argmin:time} summarizes the averages of these +excution times, given in seconds. We remark time spent with the gradient +approach is about 37 times smaller than the one of the argmin one. +Among implementations of argmin aproaches, we have retained +the COBYLA one since it does not require any gradient to be executed. + +\begin{table*} +\begin{scriptsize} +$$ +\begin{array}{|l|l|l|l|l|l|l|l|l|l|l|} +\hline +\textrm{Convergence Treshold} & +10^{-5} & +1.67.10^{-5} & +2.78.10^{-5} & +4.64.10^{-5} & +7.74.10^{-5} & +1.29.10^{-4} & +2.15.10^{-4} & +3.59.10^{-4} & +5.99.10^{-4} & +0.001 \\ +\hline +\textrm{Gradient Calculus} & +56.29 & +29.17 & +37.05 & +6.05 & +5.47 & +3.82 & +1.91 & +2.37 & +0.87 & +0.65 \\ +\hline +\textrm{Argmin Method} & +2224.27 & +1158.37 & +1125.21& +216.82& +162.26& +126.99& +58.044& +74.204& +23.99& +15.85\\ +\hline +\end{array} +$$ +\caption{Convergence Times for Gradient and Argmin Methods}\label{Table:argmin:time} +\end{scriptsize} +\end{table*} + + \ No newline at end of file diff --git a/IWCMC14/convex.png b/IWCMC14/convex.png new file mode 100644 index 0000000000000000000000000000000000000000..2279c17670fb802200b0393b0de5256f8a779b21 GIT binary patch literal 35518 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 literal 0 HcmV?d00001 diff --git a/IWCMC14/convexity.tex b/IWCMC14/convexity.tex index 172ca37..ff4656d 100644 --- a/IWCMC14/convexity.tex +++ b/IWCMC14/convexity.tex @@ -46,4 +46,27 @@ Provided $p^{5/3}$ is replaced by $P$, we have a quadratic function which is strictly convex, for any value of $\lambda_h$ since the discriminant is positive. - \ No newline at end of file +This proposed enhacement has been evaluated as follows: +10 tresholds $t$, such that $1E-5 \le t \le 1E-3$, have +been selected and for each of them, +10 random configurations have been generated. +For each one, we store the +number of iterations which is sufficient to make the dual +function variation smaller than this given treshold with +the two approaches: either the original one ore the +one which is convex garantee. + +The Figure~\ref{Fig:convex} summarizes the average number of convergence +iterations for each tresholdvalue. As we can see, even if this new +enhanced method introduces new calculus, +it only slows few down the algorithm and garantee the convexity, +and thus the convergence. + +\begin{figure*} +\begin{center} +\includegraphics[scale=0.5]{convex.png} +\end{center} +\caption{Original Vs Convex Garantee Approaches}\label{Fig:convex} +\end{figure*} + + diff --git a/exp_controle_asynchrone/simulMWSN.py b/exp_controle_asynchrone/simulMWSN.py index 7ca4bd5..45326b6 100644 --- a/exp_controle_asynchrone/simulMWSN.py +++ b/exp_controle_asynchrone/simulMWSN.py @@ -12,7 +12,7 @@ import cv2 as cv2 import datetime as dt errorq = 0.1 -errorD = 1E-1 +errorD = 1E-2 epsilon = 1E-10 vrate = 0.8 p = 0.7 @@ -268,7 +268,7 @@ def maj_theta(k): -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 @@ -348,7 +348,7 @@ def maj(k,maj_theta,mxg,idxexp): 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 @@ -371,10 +371,21 @@ def maj(k,maj_theta,mxg,idxexp): 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 @@ -402,7 +413,7 @@ def maj(k,maj_theta,mxg,idxexp): 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 @@ -425,7 +436,7 @@ def maj(k,maj_theta,mxg,idxexp): 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 @@ -612,7 +623,8 @@ def __evalue_maj_theta__(nbexp,out=False): #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): @@ -686,7 +698,146 @@ print listederes + +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)): @@ -695,6 +846,19 @@ 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 + + + -- 2.39.5