Changeset 1180

Show
Ignore:
Timestamp:
08/03/08 13:20:31 (4 months ago)
Author:
dmitrey.kroshko
Message:

some changes for tests/chain.py

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/openopt/scikits/openopt/tests/chain.py

    r1173 r1180  
    33from pylab import * 
    44 
     5 
     6P = 1.01e-1 
     7P = 0 
     8xyCoordsAlwaysExist = False 
     9 
    510contol = 1e-2 
    6 g = 10 
     11 
    712xl, yl = 0, 15 
    813xr, yr = 8, 15 
     
    3035 
    3136 
    32 MaxForces *= 1.001 
     37#MaxForces *= 1.001 
    3338 
    3439lengths = 5*ones(n)+cos(arange(n))#array([4, 3, 1, 2]) 
    3540masses = 15*ones(n)+4*cos(arange(n))#array([10, 15, 20]) 
    3641 
    37  
     42g = 10 
    3843Fm = masses * g 
    3944 
    40 xs = array([ 2137.88245944, -2914.91219278]) 
    41 lb = xs - 10e3*array([10, 1]
    42 ub = xs + 10e3*array([10, 1]
    43 x0 = xs + 500*cos(arange(xs.size)
     45#xs = array([ 2137.88245944, -2914.91219278]) 
     46#x0 = xs + 500*cos(arange(xs.size)
     47#x0 = array([ 2127.17404077, -2942.88174668])-500*cos(arange(2)
     48x0 = array([ 1253.71520066, -3022.1989107 ]
    4449 
     50lb = x0 - 10e3*array([10, 1]) 
     51ub = x0 + 10e3*array([10, 1]) 
     52 
     53#x0 =array([ 2040, -2853.32432346]) 
    4554 
    4655######################################################## 
     
    5362 
    5463######################################################## 
     64from blockMisc import project2ball 
     65 
    5566def blockEngineFunc(input): 
    5667    # extract inputs 
     
    6273 
    6374    blockID = prevBlockID + 1 
    64     if input['broken'] : 
    65         return fillByNaNs(input, blockID) 
     75#    if input['broken'] : 
     76#        return fillByNaNs(input, blockID) 
    6677 
    6778    # calculate output 
     79 
    6880    Fwhole = sqrt(lFx**2+lFy**2) 
     81 
     82#    if input['broken']: 
     83#        ForceThreshold = nan 
     84#        rFx = nan 
     85#        rFy = nan 
     86#    else: 
     87#        ForceThreshold = Fwhole - MaxForces[blockID] 
     88#        if P != 0: 
     89#            projection, distance = project2ball(x = [lFx, lFy], radius=MaxForces[blockID], center = 0) 
     90#            ForceThreshold += P * distance 
     91# 
     92#        rFy = lFy +Fm[blockID] # TODO : store Fm[i] inside blocks 
     93#        rFx = lFx# Fx are same along whole chain 
     94 
    6995    ForceThreshold = Fwhole - MaxForces[blockID] 
     96    if P != 0: 
     97        projection, distance = project2ball(x = [lFx, lFy], radius=MaxForces[blockID], center = 0) 
     98        ForceThreshold += P * distance 
    7099 
    71100    rFy = lFy +Fm[blockID] # TODO : store Fm[i] inside blocks 
    72101    rFx = lFx# Fx are same along whole chain 
    73102 
    74     dx, dy = lengths[blockID] * lFx/ Fwhole, lengths[blockID] * rFx/ Fwhole 
    75     rx = lx + dx 
    76     ry = ly + dy 
     103 
     104    if xyCoordsAlwaysExist or not input['broken']: 
     105        dx, dy = lengths[blockID] * lFx/ Fwhole, lengths[blockID] * rFx/ Fwhole 
     106        rx = lx + dx 
     107        ry = ly + dy 
     108    else: 
     109        rx = nan 
     110        ry = nan 
    77111 
    78112    # make output 
     
    84118    r['ly'] = ry 
    85119    r['forceConstraint'] = ForceThreshold 
    86     if ForceThreshold > 0: # chain will be broken 
    87         r['broken'] = True 
     120 
     121    if P != 0: 
     122        r['broken'] = False 
    88123    else: 
    89         r['broken'] = False 
     124        if ForceThreshold > 0: # chain will be broken 
     125            r['broken'] = True 
     126        else: 
     127            r['broken'] = False 
     128 
    90129    return r 
    91130 
     
    103142######################################################## 
    104143######################################################## 
     144def nanify(z, prevBlockForceConstraint): 
     145    if prevBlockForceConstraint > 0 or isnan(prevBlockForceConstraint): return nan 
     146    else: return z 
     147 
    105148ooFuncs = [oofun(firstBlockFunc)] 
    106149c = [] 
    107150for i in xrange(n): 
    108151    ooFuncs.append(oofun(lambda *args: blockEngineFunc(*args), input = ooFuncs[i])) 
    109     c.append(lambda x, i=i: ooFuncs[i+1](x)['forceConstraint']) 
     152    c.append(lambda x, i=i: nanify(ooFuncs[i+1](x)['forceConstraint'], ooFuncs[i](x)['forceConstraint'])) 
     153    #c.append(lambda x, i=i: ooFuncs[i+1](x)['forceConstraint']) 
    110154 
    111155def f(x): 
    112    r = ooFuncs[-1]()['lx'] 
     156   r = ooFuncs[-1](x)['lx'] 
    113157   return r 
    114158 
    115 p = NLP(f, x0, c=c, goal = 'max', plot=0, maxIter = 1e4, contol = contol, iprint=1, maxFunEvals = 1e10) 
    116 r = p.solve('ralg') 
     159p = NLP(f, x0, c=c, goal = 'max', ftol = 1e-4, xtol = 1e-2, plot=0, maxIter = 1e4, contol = contol, iprint=1, maxFunEvals = 1e10, diffInt = 4e-7) 
     160#solver = 'scipy_slsqp' 
     161solver = 'ralg' 
     162#solver = 'ipopt' 
     163#r = p.solve(solver, debug=1, maxIter=1e4, showLS=1, show_nnan = 1) 
     164r = p.solve(solver, debug=1, maxIter=1e4, show_nnan = 0) 
     165 
     166 
    117167 
    118168