# add nonlinear constraint ocp.constrain(thrust4, '<=', posvel4_2**2) # fix objective and setup solver obj = sum([ocp('thrust',timestep=k)**2 for k in range(ocp.nk)]) ocp.setObjective(obj) # ocp.setObjective(ocp.lookup('integral vel*vel',timestep=-1)) callback = rawe.telemetry.startTelemetry( ocp, callbacks=[ (rawe.telemetry.trajectoryCallback(toProto, Trajectory), 'rocket trajectory') ]) solverOptions = [ ("tol",1e-9) ] ocp.setupSolver(solverOpts=solverOptions, callback=callback) # ocp.interpolateInitialGuess("data/rocket_opt.dat",force=True,quiet=True,numLoops=1) traj = ocp.solve() print "final position: "+str(traj.lookup('pos',-1)) # save trajectory traj.save("data/rocket_opt.dat") # plot results # traj.plot('pos') traj.plot(['pos','vel']) traj.plot('thrust') # traj.subplot([['pos','vel'],['thrust']])
ocp.constrain( pos, '<=', abspos) ocp.constrain(-abspos, '<=', pos) # fix objective and setup solver # L1 parts obj = 0 for k in range(N): for j in range(ocp.deg+1): obj += ocp('abspos',timestep=k,degIdx=j) obj += ocp('abspos',timestep=N,degIdx=0) # L2 parts for k in range(N): obj += ocp('force',timestep=k)**2 ocp.setObjective(obj) solverOptions = [ ("expand_f",True) , ("expand_g",True) , ("generate_hessian",True) , ("tol",1e-9) ] ocp.setupSolver(solverOpts=solverOptions) traj = ocp.solve() # plot results traj.subplot([['pos','vel'],['force'],['force_over_pos']]) traj.plot(['pos','abspos']) plt.show()