Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import numpy as np
- from scipy import misc
- import time
- def Jr(mr=0.01,D=0.05): #J roues
- return(4*0.5*mr*D**2)
- # def Jt(mt=0.005,d=0.001): #J treuil
- # return(0.5*mt*d**2)
- #
- # def Jc(mc=0.01,L=0.2): #J clapet
- # return(mc*(L/2)**2)
- def MU(m=2.2): #MU coeff de frottement des axes proportionnel à m
- return(0.1*m)
- def prog(u):
- return(10**(np.floor(np.log(u)/np.log(10)-2)))
- def precision(u):
- return(10**(np.floor(np.log(u)/np.log(10)-4)))
- # def G_rec(x,
- # x0=1e-5,
- # pas=0.001,
- # L=0.2,
- # B=0.3,
- # d=0.001,
- # D=0.05,
- # m=2.2,
- # mr=0.01,
- # C=2.5):
- #
- # assert (-1<1/(2*L*B)*(((x*d)/D-L+B)**2-L**2-B**2) and 1/(2*L*B)*(((x*d)/D-L+B)**2-L**2-B**2)<1)
- #
- # g=lambda t: np.sqrt((0.5/(D**2)*(m*D**2+Jr()+Jt()+Jc()*(d/L)**2))/(0.5*C*np.pi**2-0.5*C*np.arccos(1/(2*L*B)*(((t*d)/D-L+B)**2-L**2-B**2))**2))
- #
- # S=0
- # for i in range(int((x-x0)/pas)):
- # S=S+pas*g(x0+i*pas)
- # return(S)
- def Duree_trajet_premiere_phase(x, #Simpson
- x0=1e-5,
- pas=10**-5,
- L=0.2,
- B=0.3,
- d=0.001,
- D=0.05,
- m=2.2,
- mr=0.01,
- C=2.5,
- l=0.1):
- D1=D
- mr1=mr
- assert (-1<1/(2*L*B)*(((x*d)/D-L+B)**2-L**2-B**2) and 1/(2*L*B)*(((x*d)/D-L+B)**2-L**2-B**2)<1)
- g=lambda t: np.sqrt((0.5/(D**2)*(m*D**2+Jr(mr=mr1,D=D1)))/(0.5*C*np.pi**2-0.5*C*np.arccos(1/(2*L*B)*(((t*d)/D-L+B)**2-L**2-B**2))**2))
- z=(g(x0)+g(x))/6
- for i in range(1,int((x-x0)/pas)) :
- z=z+g(x0+i*pas)/3
- for i in range(int((x-x0)/pas)) :
- z=z+g(x0+(2*i+1)*pas/2)*2/3
- return pas*z
- def Duree_trajet_seconde_phase(x,
- x0=1e-5,
- pas=10**-5,
- L=0.2,
- B=0.3,
- d=0.001,
- D=0.05,
- m=2.2,
- mr=0.01,
- C=2.5,
- l=0.1):
- D1=D
- m1=m
- mr1=mr
- v=np.sqrt((0.5*C*np.pi**2)/(0.5*m1+(0.5*Jr(mr=mr1,D=D1)/(D1**2))))
- f=lambda t: m1/MU(m=m1)*np.log((-v*l/(v*l+MU(m=m1)))/((1+(-v*l/(v*l+MU(m=m1))))*np.exp(l/m1*t)-1))
- return f(x)
- def Duree_trajet(x,
- x0=1e-5,
- pas=10**-3,
- L=0.2,
- B=0.3,
- d=0.001,
- D=0.05,
- m=2.2,
- mr=0.01,
- C=2.5,
- l=0.1):
- x01=x0
- pas1=pas
- L1=L
- B1=B
- d1=d
- D1=D
- m1=m
- mr1=mr
- C1=C
- l1=l
- if x<=2*D*L/d:
- return (Duree_trajet_premiere_phase(x,
- x0=x01,
- pas=pas1,
- L=L1,
- B=B1,
- d=d1,
- D=D1,
- m=m1,
- mr=mr1,
- C=C1,
- l=l1))
- a=2*D*L/d
- return( Duree_trajet_premiere_phase(a-10**-3,
- x0=x01,
- pas=pas1,
- L=L1,
- B=B1,
- d=d1,
- D=D1,
- m=m1,
- mr=mr1,
- C=C1,
- l=l1) + Duree_trajet_seconde_phase(x-a,
- x0=x01,
- pas=pas1,
- L=L1,
- B=B1,
- d=d1,
- D=D1,
- m=m1,
- mr=mr1,
- C=C1,
- l=l1) )
- def Optimisation_duree_trajet(x,
- x0=1e-3,
- pas=0.001,
- L=0.2,
- B=0.3,
- d=0.001,
- D=0.05,
- m=2.2,
- mr=0.01,
- C=2.5,
- l=0.1):
- a=time.time()
- # p0=0.001 # Pas d'apprentissage
- # p1=0.0001
- # p2=0.00001
- # p3=0.000001
- # e0=0.00001 # Précision
- # e1=0.000001
- # e2=0.0000001
- # e3=0.00000001
- h=10**(-3) # Pour les taux d'accroissement
- n=1 # Nbr d'itération
- mi=m # Valeurs initiales
- Di=D
- Li=L
- Bi=B
- mri=mr
- Ci=C
- di=d
- mf=mi
- Df=Di
- Lf=Li
- Bf=Bi
- mrf=mri
- Cf=Ci
- df=di
- mInt=mi-prog(mi)*( ((Duree_trajet(x,m=mi+h,D=Di,L=Li,B=Bi,mr=mri,C=Ci,d=di))-(Duree_trajet(x,m=mi,D=Di,L=Li,B=Bi,mr=mri,C=Ci,d=di)))/h )
- DInt=Di-prog(Di)*( ((Duree_trajet(x,m=mi,D=Di+h,L=Li,B=Bi,mr=mri,C=Ci,d=di))-(Duree_trajet(x,m=mi,D=Di,L=Li,B=Bi,mr=mri,C=Ci,d=di)))/h )
- LInt=Li-prog(Li)*( ((Duree_trajet(x,m=mi,D=Di,L=Li+h,B=Bi,mr=mri,C=Ci,d=di))-(Duree_trajet(x,m=mi,D=Di,L=Li,B=Bi,mr=mri,C=Ci,d=di)))/h )
- BInt=Bi-prog(Bi)*( ((Duree_trajet(x,m=mi,D=Di,L=Li,B=Bi+h,mr=mri,C=Ci,d=di))-(Duree_trajet(x,m=mi,D=Di,L=Li,B=Bi,mr=mri,C=Ci,d=di)))/h )
- mrInt=mri-prog(mri)*( ((Duree_trajet(x,m=mi,D=Di,L=Li,B=Bi,mr=mri+h,C=Ci,d=di))-(Duree_trajet(x,m=mi,D=Di,L=Li,B=Bi,mr=mri,C=Ci,d=di)))/h )
- CInt=Ci-prog(Ci)*( ((Duree_trajet(x,m=mi,D=Di,L=Li,B=Bi,mr=mri,C=Ci+h,d=di))-(Duree_trajet(x,m=mi,D=Di,L=Li,B=Bi,mr=mri,C=Ci,d=di)))/h )
- dInt=di-prog(di)*( ((Duree_trajet(x,m=mi,D=Di,L=Li,B=Bi,mr=mri,C=Ci,d=di+h))-(Duree_trajet(x,m=mi,D=Di,L=Li,B=Bi,mr=mri,C=Ci,d=di)))/h )
- x1=2*Di*Li/di
- v=np.sqrt((0.5*Ci*np.pi**2)/(0.5*mInt+(0.5*Jr(mr=mri,D=Di)/(Di**2))))
- log=(-v*l/(v*l+MU(m=mInt)))/((1+(-v*l/(v*l+MU(m=mInt))))*np.exp(l/mInt*(x-x1))-1)
- if mInt>0.5:
- if x>x1:
- if log>0:
- mf=mInt
- else:
- mf=mInt
- else:
- mf=0.5
- x1=2*DInt*Li/di
- v=np.sqrt((0.5*Ci*np.pi**2)/(0.5*mf+(0.5*Jr(mr=mri,D=DInt)/(DInt**2))))
- log=(-v*l/(v*l+MU(m=mf)))/((1+(-v*l/(v*l+MU(m=mf))))*np.exp(l/mf*(x-x1))-1)
- if DInt>0.02:
- if DInt<0.25:
- if x>x1:
- if log>0:
- Df=DInt
- else:
- Df=DInt
- else:
- Df=0.25
- else:
- Df=0.02
- x1=2*Df*LInt/di
- v=np.sqrt((0.5*Ci*np.pi**2)/(0.5*mf+(0.5*Jr(mr=mri,D=Df)/(Df**2))))
- log=(-v*l/(v*l+MU(m=mf)))/((1+(-v*l/(v*l+MU(m=mf))))*np.exp(l/mf*(x-x1))-1)
- if LInt>0.05:
- if LInt<1:
- if x>x1:
- if log>0:
- Lf=LInt
- else:
- Lf=LInt
- else:
- Lf=1
- else:
- Lf=0.05
- if BInt>0.10: #Pas besoin de recalculer log car B n'intervient pas dans la distance totale
- if BInt<1:
- if BInt>=Lf:
- Bf=BInt
- else:
- Bf=Lf
- else:
- Bf=1
- else:
- Bf=0.10
- x1=2*Df*Lf/di
- v=np.sqrt((0.5*Ci*np.pi**2)/(0.5*mf+(0.5*Jr(mr=mrInt,D=Df)/(Df**2))))
- log=(-v*l/(v*l+MU(m=mf)))/((1+(-v*l/(v*l+MU(m=mf))))*np.exp(l/mf*(x-x1))-1)
- if mrInt>0.020:
- if mrInt<0.1*mf:
- if x>x1:
- if log>0:
- mrf=mrInt
- else:
- mrf=mrInt
- else:
- mrf=0.1*mf
- else:
- mrf=0.020
- v=np.sqrt((0.5*CInt*np.pi**2)/(0.5*mf+(0.5*Jr(mr=mrf,D=Df)/(Df**2))))
- log=(-v*l/(v*l+MU(m=mf)))/((1+(-v*l/(v*l+MU(m=mf))))*np.exp(l/mf*(x-x1))-1)
- if CInt>1:
- if CInt<3:
- if x>x1:
- if log>0:
- Cf=CInt
- else:
- Cf=CInt
- else:
- Cf=3
- else:
- Cf=1
- x1=2*Df*Lf/dInt
- v=np.sqrt((0.5*Cf*np.pi**2)/(0.5*mf+(0.5*Jr(mr=mrInt,D=Df)/(Df**2))))
- log=(-v*l/(v*l+MU(m=mf)))/((1+(-v*l/(v*l+MU(m=mf))))*np.exp(l/mf*(x-x1))-1)
- if dInt>0.001:
- if dInt<0.02:
- if x>x1:
- if log>0:
- df=dInt
- else:
- df=dInt
- else:
- df=0.02
- else:
- df=0.001
- x1=2*Df*Lf/df
- if x<=x1:
- while abs(mf-mi)>precision(mf) or abs(Df-Di)>precision(Df) or abs(Lf-Li)>precision(Lf) or abs(Bf-Bi)>precision(Bf) or abs(mrf-mri)>precision(mrf) or abs(Cf-Ci)>precision(Cf) or abs(df-di)>precision(df):
- mi=mf
- Di=Df
- Li=Lf
- Bi=Bf
- mri=mrf
- Ci=Cf
- di=df
- mInt=mi-prog(mi)*( ((Duree_trajet(x,m=mi+h,D=Di,L=Li,B=Bi,mr=mri,C=Ci,d=di))-(Duree_trajet(x,m=mi,D=Di,L=Li,B=Bi,mr=mri,C=Ci,d=di)))/h )
- DInt=Di-prog(Di)*( ((Duree_trajet(x,m=mi,D=Di+h,L=Li,B=Bi,mr=mri,C=Ci,d=di))-(Duree_trajet(x,m=mi,D=Di,L=Li,B=Bi,mr=mri,C=Ci,d=di)))/h )
- LInt=Li-prog(Li)*( ((Duree_trajet(x,m=mi,D=Di,L=Li+h,B=Bi,mr=mri,C=Ci,d=di))-(Duree_trajet(x,m=mi,D=Di,L=Li,B=Bi,mr=mri,C=Ci,d=di)))/h )
- BInt=Bi-prog(Bi)*( ((Duree_trajet(x,m=mi,D=Di,L=Li,B=Bi+h,mr=mri,C=Ci,d=di))-(Duree_trajet(x,m=mi,D=Di,L=Li,B=Bi,mr=mri,C=Ci,d=di)))/h )
- mrInt=mri-prog(mri)*( ((Duree_trajet(x,m=mi,D=Di,L=Li,B=Bi,mr=mri+h,C=Ci,d=di))-(Duree_trajet(x,m=mi,D=Di,L=Li,B=Bi,mr=mri,C=Ci,d=di)))/h )
- CInt=Ci-prog(Ci)*( ((Duree_trajet(x,m=mi,D=Di,L=Li,B=Bi,mr=mri,C=Ci+h,d=di))-(Duree_trajet(x,m=mi,D=Di,L=Li,B=Bi,mr=mri,C=Ci,d=di)))/h )
- dInt=di-prog(di)*( ((Duree_trajet(x,m=mi,D=Di,L=Li,B=Bi,mr=mri,C=Ci,d=di+h))-(Duree_trajet(x,m=mi,D=Di,L=Li,B=Bi,mr=mri,C=Ci,d=di)))/h )
- if mInt>0.5:
- mf=mInt
- else:
- mf=0.5
- if DInt>0.02:
- if DInt<0.25:
- Df=DInt
- else:
- Df=0.25
- else:
- Df=0.02
- if LInt>0.05:
- if LInt<1:
- Lf=LInt
- else:
- Lf=1
- else:
- Lf=0.05
- if BInt>0.10:
- if BInt<1:
- if BInt>=Lf:
- Bf=BInt
- else:
- Bf=Lf
- else:
- Bf=1
- else:
- Bf=0.10
- if mrInt>0.020:
- if mrInt<0.1*mf:
- mrf=mrInt
- else:
- mrf=0.1*mf
- else:
- mrf=0.020
- if CInt>1:
- if CInt<3:
- Cf=CInt
- else:
- Cf=3
- else:
- Cf=1
- if dInt>0.001:
- if dInt<0.02:
- df=dInt
- else:
- df=0.02
- else:
- df=0.001
- n+=1
- print(mf,Df,Lf,Bf,mrf,Cf,df,n)
- else:
- while abs(mf-mi)>precision(mf) or abs(Df-Di)>precision(Df) or abs(Lf-Li)>precision(Lf) or abs(Bf-Bi)>precision(Bf) or abs(mrf-mri)>precision(mrf) or abs(Cf-Ci)>precision(Cf) or abs(df-di)>precision(df):
- mi=mf
- Di=Df
- Li=Lf
- Bi=Bf
- mri=mrf
- Ci=Cf
- di=df
- mInt=mi-prog(mi)*( ((Duree_trajet(x,m=mi+h,D=Di,L=Li,B=Bi,mr=mri,C=Ci,d=di))-(Duree_trajet(x,m=mi,D=Di,L=Li,B=Bi,mr=mri,C=Ci,d=di)))/h )
- DInt=Di-prog(Di)*( ((Duree_trajet(x,m=mi,D=Di+h,L=Li,B=Bi,mr=mri,C=Ci,d=di))-(Duree_trajet(x,m=mi,D=Di,L=Li,B=Bi,mr=mri,C=Ci,d=di)))/h )
- LInt=Li-prog(Li)*( ((Duree_trajet(x,m=mi,D=Di,L=Li+h,B=Bi,mr=mri,C=Ci,d=di))-(Duree_trajet(x,m=mi,D=Di,L=Li,B=Bi,mr=mri,C=Ci,d=di)))/h )
- BInt=Bi-prog(Bi)*( ((Duree_trajet(x,m=mi,D=Di,L=Li,B=Bi+h,mr=mri,C=Ci,d=di))-(Duree_trajet(x,m=mi,D=Di,L=Li,B=Bi,mr=mri,C=Ci,d=di)))/h )
- mrInt=mri-prog(mri)*( ((Duree_trajet(x,m=mi,D=Di,L=Li,B=Bi,mr=mri+h,C=Ci,d=di))-(Duree_trajet(x,m=mi,D=Di,L=Li,B=Bi,mr=mri,C=Ci,d=di)))/h )
- CInt=Ci-prog(Ci)*( ((Duree_trajet(x,m=mi,D=Di,L=Li,B=Bi,mr=mri,C=Ci+h,d=di))-(Duree_trajet(x,m=mi,D=Di,L=Li,B=Bi,mr=mri,C=Ci,d=di)))/h )
- dInt=di-prog(di)*( ((Duree_trajet(x,m=mi,D=Di,L=Li,B=Bi,mr=mri,C=Ci,d=di+h))-(Duree_trajet(x,m=mi,D=Di,L=Li,B=Bi,mr=mri,C=Ci,d=di)))/h )
- x1=2*Di*Li/di
- v=np.sqrt((0.5*Ci*np.pi**2)/(0.5*mInt+(0.5*Jr(mr=mri,D=Di)/(Di**2))))
- log=(-v*l/(v*l+MU(m=mInt)))/((1+(-v*l/(v*l+MU(m=mInt))))*np.exp(l/mInt*(x-x1))-1)
- if mInt>0.5:
- if x>x1:
- if log>0:
- mf=mInt
- else:
- mf=mInt
- else:
- mf=0.5
- x1=2*DInt*Li/di
- v=np.sqrt((0.5*Ci*np.pi**2)/(0.5*mf+(0.5*Jr(mr=mri,D=DInt)/(DInt**2))))
- log=(-v*l/(v*l+MU(m=mf)))/((1+(-v*l/(v*l+MU(m=mf))))*np.exp(l/mf*(x-x1))-1)
- if DInt>0.02:
- if DInt<0.25:
- if x>x1:
- if log>0:
- Df=DInt
- else:
- Df=DInt
- else:
- Df=0.25
- else:
- Df=0.02
- x1=2*Df*LInt/di
- v=np.sqrt((0.5*Ci*np.pi**2)/(0.5*mf+(0.5*Jr(mr=mri,D=Df)/(Df**2))))
- log=(-v*l/(v*l+MU(m=mf)))/((1+(-v*l/(v*l+MU(m=mf))))*np.exp(l/mf*(x-x1))-1)
- if LInt>0.05:
- if LInt<1:
- if x>x1:
- if log>0:
- Lf=LInt
- else:
- Lf=LInt
- else:
- Lf=1
- else:
- Lf=0.05
- if BInt>0.10: #Pas besoin de recalculer log car B n'intervient pas dans la distance totale
- if BInt<1:
- if BInt>=Lf:
- Bf=BInt
- else:
- Bf=Lf
- else:
- Bf=1
- else:
- Bf=0.10
- x1=2*Df*Lf/di
- v=np.sqrt((0.5*Ci*np.pi**2)/(0.5*mf+(0.5*Jr(mr=mrInt,D=Df)/(Df**2))))
- log=(-v*l/(v*l+MU(m=mf)))/((1+(-v*l/(v*l+MU(m=mf))))*np.exp(l/mf*(x-x1))-1)
- if mrInt>0.020:
- if mrInt<0.1*mf:
- if x>x1:
- if log>0:
- mrf=mrInt
- else:
- mrf=mrInt
- else:
- mrf=0.1*mf
- else:
- mrf=0.020
- v=np.sqrt((0.5*CInt*np.pi**2)/(0.5*mf+(0.5*Jr(mr=mrf,D=Df)/(Df**2))))
- log=(-v*l/(v*l+MU(m=mf)))/((1+(-v*l/(v*l+MU(m=mf))))*np.exp(l/mf*(x-x1))-1)
- if CInt>1:
- if CInt<3:
- if x>x1:
- if log>0:
- Cf=CInt
- else:
- Cf=CInt
- else:
- Cf=3
- else:
- Cf=1
- x1=2*Df*Lf/dInt
- v=np.sqrt((0.5*Cf*np.pi**2)/(0.5*mf+(0.5*Jr(mr=mrInt,D=Df)/(Df**2))))
- log=(-v*l/(v*l+MU(m=mf)))/((1+(-v*l/(v*l+MU(m=mf))))*np.exp(l/mf*(x-x1))-1)
- if dInt>0.001:
- if dInt<0.02:
- if x>x1:
- if log>0:
- df=dInt
- else:
- df=dInt
- else:
- df=0.02
- else:
- df=0.001
- n+=1
- print(mf,Df,Lf,Bf,mrf,Cf,df,n)
- b=time.time()
- return(mf,Df,Lf,Bf,mrf,Cf,df,n,(b-a)/60)
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement