Changeset 1199
- Timestamp:
- 08/05/08 11:46:35 (4 months ago)
- Files:
-
- trunk/openopt/scikits/openopt/tests/chain.py (modified) (9 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/openopt/scikits/openopt/tests/chain.py
r1180 r1199 5 5 6 6 P = 1.01e-1 7 P = 07 #P = 0 8 8 xyCoordsAlwaysExist = False 9 9 10 contol = 1e- 210 contol = 1e-8 11 11 12 12 xl, yl = 0, 15 13 13 xr, yr = 8, 15 14 14 15 n = 5 015 n = 5 16 16 17 17 MaxForces = 100*sin(arange(n)) + 5000*ones(n)\ … … 36 36 37 37 #MaxForces *= 1.001 38 38 #MaxForces -= array([ 504.84391737, 353.6779311 , 220.55447721, 119.6013147 , 39 # 37.84759491]) 40 MaxForces -= array([ 470.83299096, 319.6860156 , 186.5286786 , 85.57322313, 3.84866201])-150 39 41 lengths = 5*ones(n)+cos(arange(n))#array([4, 3, 1, 2]) 40 42 masses = 15*ones(n)+4*cos(arange(n))#array([10, 15, 20]) … … 43 45 Fm = masses * g 44 46 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 ]) 47 AdditionalMasses = [1]*n 48 x0 = hstack((array([ 1253.71520066, -3022.1989107 ]), AdditionalMasses)) 49 49 50 lb = x0 - 10e3*array([10, 1])51 ub = x0 + 10e3*array([10, 1])50 lb = [-inf] * 2 + [0] * n 51 ub = [inf] * (n+2) 52 52 53 #x0 =array([ 2040, -2853.32432346])54 53 55 54 ######################################################## … … 72 71 prevBlockID = input['blockID'] # number of the block: 0, 1, 2 ..., n-1 73 72 73 74 74 blockID = prevBlockID + 1 75 CurrentAdditionalMass = input['AdditionalMasses'][blockID] 76 75 77 # if input['broken'] : 76 78 # return fillByNaNs(input, blockID) … … 98 100 ForceThreshold += P * distance 99 101 100 rFy = lFy +Fm[blockID] # TODO : store Fm[i] inside blocks102 rFy = lFy +Fm[blockID] + CurrentAdditionalMass*g # TODO : store Fm[i] inside blocks 101 103 rFx = lFx# Fx are same along whole chain 102 104 … … 118 120 r['ly'] = ry 119 121 r['forceConstraint'] = ForceThreshold 122 r['AdditionalMasses'] = input['AdditionalMasses'] 120 123 121 124 if P != 0: … … 130 133 131 134 ######################################################## 132 def firstBlockFunc(FxFy ):135 def firstBlockFunc(FxFyAdditionalMasses): 133 136 r = {} 134 r['lFx'], r['lFy'] = FxFy[0], FxFy[1]137 r['lFx'], r['lFy'] , r['AdditionalMasses']= FxFyAdditionalMasses[0], FxFyAdditionalMasses[1], FxFyAdditionalMasses[2:] 135 138 r['blockID'] = -1 136 139 r['lx'], r['ly'] = xl, yl … … 149 152 c = [] 150 153 for i in xrange(n): 151 ooFuncs.append(oofun( lambda *args: blockEngineFunc(*args), input = ooFuncs[i]))154 ooFuncs.append(oofun(blockEngineFunc, input = ooFuncs[i])) 152 155 c.append(lambda x, i=i: nanify(ooFuncs[i+1](x)['forceConstraint'], ooFuncs[i](x)['forceConstraint'])) 153 156 #c.append(lambda x, i=i: ooFuncs[i+1](x)['forceConstraint']) … … 157 160 return r 158 161 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) 162 p = NLP(f, x0, c=c, goal = 'max', ftol = 1e-16, xtol = 1e-16, plot=0, maxIter = 1e4, contol = contol, iprint=1, maxFunEvals = 1e10) 163 p.diffInt = 2 * [1e-4] + n * [1e-7] 164 p.Aeq = 2 * [0] + n * [1] 165 p.beq = 100 # sum of additional masses should be this number 160 166 #solver = 'scipy_slsqp' 161 167 solver = 'ralg' 162 #solver = 'ipopt' 168 solver = 'ipopt' 169 #solver = 'scipy_cobyla' 163 170 #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)171 r = p.solve(solver, debug=0, maxIter=1e4, show_nnan = 0) 165 172 166 173
