Changeset 1001 for trunk/GSASIImath.py


Ignore:
Timestamp:
Jul 18, 2013 3:19:58 PM (12 years ago)
Author:
vondreele
Message:

tweak MC/SA

File:
1 edited

Legend:

Unmodified
Added
Removed
  • TabularUnified trunk/GSASIImath.py

    r991 r1001  
    3131import GSASIIlattice as G2lat
    3232import GSASIIspc as G2spc
     33import GSASIIpwd as G2pwd
    3334import numpy.fft as fft
    3435import pypowder as pyd
     
    22022203           T0=None, Tf=1e-12, maxeval=None, maxaccept=None, maxiter=400,
    22032204           boltzmann=1.0, learn_rate=0.5, feps=1e-6, quench=1.0, m=1.0, n=1.0,
    2204            lower=-100, upper=100, dwell=50, slope=0.9,dlg=None):
     2205           lower=-100, upper=100, dwell=50, slope=0.9,ranStart=True,dlg=None):
    22052206    """Minimize a function using simulated annealing.
    22062207
     
    22452246    :param float slope:
    22462247        Parameter for log schedule
     2248    :param bool ranStart=True:
     2249        False for fixed point start
    22472250
    22482251    :returns: (xmin, Jmin, T, feval, iters, accept, retval) where
     
    23322335        x0 = schedule.getstart_temp(best_state)
    23332336    else:
    2334         x0 = random.uniform(size=len(x0))*(upper-lower) + lower #comment to avoid random start
     2337        if ranStart:
     2338            x0 = random.uniform(size=len(x0))*(upper-lower) + lower #comment to avoid random start
    23352339        best_state.x = None
    23362340        best_state.cost = numpy.Inf
     
    23452349    schedule.T = schedule.T0
    23462350    fqueue = [100, 300, 500, 700]
    2347     iters = 0
     2351    iters = 1
    23482352    keepGoing = True
    23492353    while keepGoing:
     
    24502454   
    24512455    '''
    2452     gamFW = lambda s,g: math.exp(math.log(s**5+2.69269*s**4*g+2.42843*s**3*g**2+4.47163*s**2*g**3+0.07842*s*g**4+g**5)/5.)
    24532456   
    24542457    twopi = 2.0*np.pi
     
    25862589        return Tdata,Xdata.T
    25872590   
    2588     def calcMDcorr(MDval,MDaxis,Uniq,G):
    2589         ''' Calls fortran routine'''
    2590         MDcorr = pyd.pymdcalc(MDval,MDaxis,len(Uniq),Uniq.flatten(),G)
    2591         return MDcorr
    2592        
    2593     def mcsaMDSFcalc(ifInv,Tdata,Mdata,Xdata,MDval,MDaxis,G,mul,FFs,Uniq,Phi):
    2594         ''' Calls fortran routine'''
    2595         Icalc = pyd.pymcsamdsfcalc(ifInv,len(Tdata),Tdata,Mdata,Xdata.flatten(),
    2596             MDval,MDaxis,G,mul,len(FFs),FFs,len(Uniq),Uniq.flatten(),Phi)
    2597         return Icalc
    2598 
    2599     def mcsaSFcalc(ifInv,Tdata,Mdata,Xdata,mul,FFs,Uniq,Phi):
    2600         ''' Calls fortran routine'''
    2601         Icalc = pyd.pymcsasfcalc(ifInv,len(Tdata),Tdata,Mdata,Xdata.flatten(),
    2602             mul,len(FFs),FFs,len(Uniq),Uniq.flatten(),Phi)
    2603         return Icalc
    26042591
    26052592    def mcsaCalc(values,refList,rcov,ifInv,RBdata,varyList,parmDict):
     
    26102597        puts result F^2 in each ref[8] in refList
    26112598        '''       
     2599        def mcsaMDSFcalc(mul,FFs,Uniq,Phi):
     2600            ''' Calls fortran routine'''
     2601            Icalc = pyd.pymcsamdsfcalc(ifInv,len(Tdata),Tdata,Mdata,Xdata.flatten(),
     2602                MDval,MDaxis,Gmat,mul,len(FFs),FFs,len(Uniq),Uniq.flatten(),Phi)
     2603            return Icalc
    26122604        global tsum
    26132605        parmDict.update(dict(zip(varyList,values)))
     
    26212613        for refl in refList:
    26222614            t0 = time.time()
    2623             refl[5] = mcsaMDSFcalc(ifInv,Tdata,Mdata,Xdata,MDval,MDaxis,Gmat,
    2624                 refl[3],refl[7],refl[8],refl[9])
    2625 #            refl[5] = mcsaSFcalc(ifInv,Tdata,Mdata,Xdata,refl[3],refl[7],refl[8],refl[9])
    2626 #            refl[5] *= calcMDcorr(MDval,MDaxis,refl[8],Gmat)
     2615            refl[5] = mcsaMDSFcalc(refl[3],refl[7],refl[8],refl[9])
    26272616            tsum += (time.time()-t0)
    26282617            sumFcsq += refl[5]
     
    26872676            h,k,l,m,d,pos,sig,gam,f = ref[:9]
    26882677            if d >= MCSA['dmin']:
    2689                 sig = gamFW(sig,gam)/sq8ln2        #--> sig from FWHM
     2678                sig = G2pwd.getgamFW(sig,gam)/sq8ln2        #--> sig from FWHM
    26902679                SQ = 0.25/d**2
    26912680                Uniq,phi = G2spc.GenHKLf([h,k,l],SGData)[2:]
     
    27632752        boltzmann=MCSA['boltzmann'], learn_rate=0.5, 
    27642753        quench=MCSA['fast parms'][0], m=MCSA['fast parms'][1], n=MCSA['fast parms'][2],
    2765         lower=lower, upper=upper, slope=MCSA['log slope'],dlg=pgbar)
     2754        lower=lower, upper=upper, slope=MCSA['log slope'],ranStart=MCSA.get('ranStart',True),dlg=pgbar)
    27662755    Result = [False,False,results[1],results[2],]+list(results[0])
    27672756    Result.append(varyList)
Note: See TracChangeset for help on using the changeset viewer.