Changeset 1199

Show
Ignore:
Timestamp:
08/05/08 11:46:35 (4 months ago)
Author:
dmitrey.kroshko
Message:

some changes in tests/chain.py (new vars: additional masses)

Files:

Legend:

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

    r1180 r1199  
    55 
    66P = 1.01e-1 
    7 P = 0 
     7#P = 0 
    88xyCoordsAlwaysExist = False 
    99 
    10 contol = 1e-2 
     10contol = 1e-8 
    1111 
    1212xl, yl = 0, 15 
    1313xr, yr = 8, 15 
    1414 
    15 n = 50 
     15n = 5 
    1616 
    1717MaxForces = 100*sin(arange(n)) + 5000*ones(n)\ 
     
    3636 
    3737#MaxForces *= 1.001 
    38  
     38#MaxForces -= array([ 504.84391737,  353.6779311 ,  220.55447721,  119.6013147 , 
     39#         37.84759491]) 
     40MaxForces -= array([ 470.83299096,  319.6860156 ,  186.5286786 ,   85.57322313,  3.84866201])-150 
    3941lengths = 5*ones(n)+cos(arange(n))#array([4, 3, 1, 2]) 
    4042masses = 15*ones(n)+4*cos(arange(n))#array([10, 15, 20]) 
     
    4345Fm = masses * g 
    4446 
    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)) 
    48 x0 = array([ 1253.71520066, -3022.1989107 ]) 
     47AdditionalMasses = [1]*n 
     48x0 = hstack((array([ 1253.71520066, -3022.1989107 ]), AdditionalMasses)) 
    4949 
    50 lb = x0 - 10e3*array([10, 1]) 
    51 ub = x0 + 10e3*array([10, 1]
     50lb = [-inf] * 2 + [0] * n 
     51ub = [inf] * (n+2
    5252 
    53 #x0 =array([ 2040, -2853.32432346]) 
    5453 
    5554######################################################## 
     
    7271    prevBlockID = input['blockID'] # number of the block:  0, 1, 2 ..., n-1 
    7372 
     73 
    7474    blockID = prevBlockID + 1 
     75    CurrentAdditionalMass = input['AdditionalMasses'][blockID] 
     76 
    7577#    if input['broken'] : 
    7678#        return fillByNaNs(input, blockID) 
     
    98100        ForceThreshold += P * distance 
    99101 
    100     rFy = lFy +Fm[blockID] # TODO : store Fm[i] inside blocks 
     102    rFy = lFy +Fm[blockID] + CurrentAdditionalMass*g # TODO : store Fm[i] inside blocks 
    101103    rFx = lFx# Fx are same along whole chain 
    102104 
     
    118120    r['ly'] = ry 
    119121    r['forceConstraint'] = ForceThreshold 
     122    r['AdditionalMasses'] = input['AdditionalMasses'] 
    120123 
    121124    if P != 0: 
     
    130133 
    131134######################################################## 
    132 def firstBlockFunc(FxFy): 
     135def firstBlockFunc(FxFyAdditionalMasses): 
    133136    r = {} 
    134     r['lFx'], r['lFy'] = FxFy[0], FxFy[1
     137    r['lFx'], r['lFy'] , r['AdditionalMasses']= FxFyAdditionalMasses[0], FxFyAdditionalMasses[1], FxFyAdditionalMasses[2:
    135138    r['blockID'] = -1 
    136139    r['lx'], r['ly'] = xl, yl 
     
    149152c = [] 
    150153for i in xrange(n): 
    151     ooFuncs.append(oofun(lambda *args: blockEngineFunc(*args), input = ooFuncs[i])) 
     154    ooFuncs.append(oofun(blockEngineFunc, input = ooFuncs[i])) 
    152155    c.append(lambda x, i=i: nanify(ooFuncs[i+1](x)['forceConstraint'], ooFuncs[i](x)['forceConstraint'])) 
    153156    #c.append(lambda x, i=i: ooFuncs[i+1](x)['forceConstraint']) 
     
    157160   return r 
    158161 
    159 p = 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) 
     162p = NLP(f, x0, c=c, goal = 'max', ftol = 1e-16, xtol = 1e-16, plot=0, maxIter = 1e4, contol = contol, iprint=1, maxFunEvals = 1e10) 
     163p.diffInt = 2 * [1e-4] + n * [1e-7] 
     164p.Aeq = 2 * [0] + n * [1] 
     165p.beq = 100 # sum of additional masses should be this number 
    160166#solver = 'scipy_slsqp' 
    161167solver = 'ralg' 
    162 #solver = 'ipopt' 
     168solver = 'ipopt' 
     169#solver = 'scipy_cobyla' 
    163170#r = p.solve(solver, debug=1, maxIter=1e4, showLS=1, show_nnan = 1) 
    164 r = p.solve(solver, debug=1, maxIter=1e4, show_nnan = 0) 
     171r = p.solve(solver, debug=0, maxIter=1e4, show_nnan = 0) 
    165172 
    166173