Notebook

Recommended



Script

Basic


brachistochrone.py
import scvxgen as scvx

parameters = scvx.Parameters('g')
states = scvx.States('x y v')
controls = scvx.Controls('theta')

g, = parameters
x, y, v = states
theta, = controls

sin = scvx.sympy.sin
cos = scvx.sympy.cos
pi = float(scvx.sympy.pi)

dynamics = scvx.Dynamics(
     v * sin(theta),
    -v * cos(theta),
     g * cos(theta)
)

time = scvx.Time(guess=2, t_min_factor=0.25, t_max_factor=5)

parameters.g.set_value(9.81)

states.set_initial(0, 10, 0)
states.set_final(10, 5, scvx.Free())
states.set_minimum(0, 0, 0)
states.set_maximum(10, 10, 10)

controls.set_initial(5 * pi / 180)
controls.set_final(100.5 * pi / 180)
controls.set_minimum(0)
controls.set_maximum(100.5 * pi / 180)

settings = scvx.Settings(
     N_disc=2, N_prop=20, convex_solver='PIPG', w_cost=1, w_slack=10, w_trust=10
)

problem = scvx.Problem(
     time=time,
     parameters=parameters,
     states=states,
     controls=controls,
     dynamics=dynamics,
     settings=settings
)

problem.generate_code()

output = problem.solve()