Changeset 1180
- Timestamp:
- 08/03/08 13:20:31 (4 months ago)
- Files:
-
- trunk/openopt/scikits/openopt/tests/chain.py (modified) (6 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
trunk/openopt/scikits/openopt/tests/chain.py
r1173 r1180 3 3 from pylab import * 4 4 5 6 P = 1.01e-1 7 P = 0 8 xyCoordsAlwaysExist = False 9 5 10 contol = 1e-2 6 g = 10 11 7 12 xl, yl = 0, 15 8 13 xr, yr = 8, 15 … … 30 35 31 36 32 MaxForces *= 1.00137 #MaxForces *= 1.001 33 38 34 39 lengths = 5*ones(n)+cos(arange(n))#array([4, 3, 1, 2]) 35 40 masses = 15*ones(n)+4*cos(arange(n))#array([10, 15, 20]) 36 41 37 42 g = 10 38 43 Fm = masses * g 39 44 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)) 48 x0 = array([ 1253.71520066, -3022.1989107 ]) 44 49 50 lb = x0 - 10e3*array([10, 1]) 51 ub = x0 + 10e3*array([10, 1]) 52 53 #x0 =array([ 2040, -2853.32432346]) 45 54 46 55 ######################################################## … … 53 62 54 63 ######################################################## 64 from blockMisc import project2ball 65 55 66 def blockEngineFunc(input): 56 67 # extract inputs … … 62 73 63 74 blockID = prevBlockID + 1 64 if input['broken'] :65 return fillByNaNs(input, blockID)75 # if input['broken'] : 76 # return fillByNaNs(input, blockID) 66 77 67 78 # calculate output 79 68 80 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 69 95 ForceThreshold = Fwhole - MaxForces[blockID] 96 if P != 0: 97 projection, distance = project2ball(x = [lFx, lFy], radius=MaxForces[blockID], center = 0) 98 ForceThreshold += P * distance 70 99 71 100 rFy = lFy +Fm[blockID] # TODO : store Fm[i] inside blocks 72 101 rFx = lFx# Fx are same along whole chain 73 102 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 77 111 78 112 # make output … … 84 118 r['ly'] = ry 85 119 r['forceConstraint'] = ForceThreshold 86 if ForceThreshold > 0: # chain will be broken 87 r['broken'] = True 120 121 if P != 0: 122 r['broken'] = False 88 123 else: 89 r['broken'] = False 124 if ForceThreshold > 0: # chain will be broken 125 r['broken'] = True 126 else: 127 r['broken'] = False 128 90 129 return r 91 130 … … 103 142 ######################################################## 104 143 ######################################################## 144 def nanify(z, prevBlockForceConstraint): 145 if prevBlockForceConstraint > 0 or isnan(prevBlockForceConstraint): return nan 146 else: return z 147 105 148 ooFuncs = [oofun(firstBlockFunc)] 106 149 c = [] 107 150 for i in xrange(n): 108 151 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']) 110 154 111 155 def f(x): 112 r = ooFuncs[-1]( )['lx']156 r = ooFuncs[-1](x)['lx'] 113 157 return r 114 158 115 p = NLP(f, x0, c=c, goal = 'max', plot=0, maxIter = 1e4, contol = contol, iprint=1, maxFunEvals = 1e10) 116 r = p.solve('ralg') 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) 160 #solver = 'scipy_slsqp' 161 solver = 'ralg' 162 #solver = 'ipopt' 163 #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) 165 166 117 167 118 168
