Skip to content

Commit 8e2cd0a

Browse files
committed
Merge branch 'dev' into revise
2 parents 9c2c07b + 2170df0 commit 8e2cd0a

15 files changed

+130
-584
lines changed

Project.toml

+4-10
Original file line numberDiff line numberDiff line change
@@ -1,22 +1,16 @@
11
name = "OptimalControl"
22
uuid = "5f98b655-cc9a-415a-b60e-744165666948"
33
authors = ["Olivier Cots <[email protected]>"]
4-
version = "0.5.0"
4+
version = "0.6.0"
55

66
[deps]
77
CTBase = "54762871-cc72-4466-b8e8-f6c8b58076cd"
88
CTDirect = "790bbbee-bee9-49ee-8912-a9de031322d5"
9-
CTDirectShooting = "e0e6c04b-5022-4cd2-bea2-4a09fff39444"
109
CTFlows = "1c39547c-7794-42f7-af83-d98194f657c2"
1110
DocStringExtensions = "ffbed154-4ef7-542d-bbb7-c09d3a79fcae"
12-
MINPACK = "4854310b-de5a-5eb6-a2a5-c1dee2bd17f9"
13-
Markdown = "d6f4376e-aef5-505a-96c1-9c027394607a"
14-
Plots = "91a5bcdd-55d7-5caf-9e0b-520d859cae80"
15-
Reexport = "189a3867-3050-52da-a836-e630ba90ab69"
1611

1712
[compat]
18-
CTBase = "0.5"
19-
CTDirect = "0.2"
20-
CTDirectShooting = "0.1"
21-
Reexport = "1.2"
13+
CTBase = "0.7"
14+
CTDirect = "0.3"
15+
CTFlows = "0.3"
2216
julia = "1.8"

examples/basic.jl

+2-2
Original file line numberDiff line numberDiff line change
@@ -58,9 +58,9 @@ dynamics!(ocp_f, (x, u) -> A*x + B*u)
5858
objective!(ocp_f, :lagrange, (x, u) -> 0.5u^2)
5959

6060
# Solve
61-
ocp = ocp_f
61+
ocp = ocp_a
6262
N = 50
63-
sol = solve(ocp_f, grid_size=N)
63+
sol = solve(ocp, grid_size=N)
6464

6565
# Plot
6666
plot(sol)

examples/basic_fig.png

-1.46 KB
Loading

examples/callbacks-print.jl

-55
This file was deleted.

examples/callbacks-stop.jl

-53
This file was deleted.

examples/direct-shooting.ipynb

-149
This file was deleted.

examples/direct-shooting.jl

-37
This file was deleted.

examples/goddard.jl

+28-29
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,8 @@ v0 = 0
1919
vmax = 0.1
2020
m0 = 1
2121
mf = 0.6
22+
23+
# Initial state
2224
x0 = [ r0, v0, m0 ]
2325

2426
# Abstract model
@@ -35,9 +37,9 @@ x0 = [ r0, v0, m0 ]
3537

3638
x(t0) == [ r0, v0, m0 ]
3739
0 u(t) 1
38-
r0 r(t) Inf, (1)
39-
0 v(t) vmax, (2)
40-
mf m(t) m0, (3)
40+
r0 r(t) Inf, (1)
41+
0 v(t) vmax, (2)
42+
mf m(t) m0, (3)
4143

4244
(t) == F0(x(t)) + u(t) * F1(x(t))
4345

@@ -48,14 +50,12 @@ end
4850
F0(x) = begin
4951
r, v, m = x
5052
D = Cd * v^2 * exp(-β*(r - 1))
51-
F = [ v, -D/m - 1/r^2, 0 ]
52-
return F
53+
return [ v, -D/m - 1/r^2, 0 ]
5354
end
5455

5556
F1(x) = begin
5657
r, v, m = x
57-
F = [ 0, Tmax/m, -b*Tmax ]
58-
return F
58+
return [ 0, Tmax/m, -b*Tmax ]
5959
end
6060

6161
# Functional model
@@ -87,27 +87,27 @@ savefig("goddard_fig1.png")
8787
md"![fig](goddard_fig1.png)"
8888

8989
# Shooting function
90-
u0(x, p) = 0.
91-
u1(x, p) = 1.
92-
93-
H0(x, p) = p' * F0(x)
94-
H1(x, p) = p' * F1(x)
95-
H01 = Poisson(H0, H1)
96-
H001 = Poisson(H0, H01)
97-
H101 = Poisson(H1, H01)
90+
u0 = 0
91+
u1 = 1
92+
93+
H0 = Lift(F0)
94+
H1 = Lift(F1)
95+
H01 = @Poisson {H0, H1}
96+
H001 = @Poisson {H0, H01}
97+
H101 = @Poisson {H1, H01}
9898
us(x, p) = -H001(x, p) / H101(x, p)
9999

100-
remove_constraint!(ocp, :eq1)
101-
remove_constraint!(ocp, :eq3)
102-
constraint!(ocp, :final, Index(3), mf, :eq4)
103-
g(x) = vmax - constraint(ocp, :eq2)(x)
104-
ub(x, _) = -Ad(F0, g)(x) / Ad(F1, g)(x)
105-
μb(x, p) = H01(x, p) / Ad(F1, g)(x)
100+
#remove_constraint!(ocp, :eq1)
101+
#remove_constraint!(ocp, :eq3)
102+
#constraint!(ocp, :final, Index(3), mf, :eq4)
103+
g(x) = vmax - constraint(ocp, :eq2)(x, Real[])
104+
ub(x) = -Lie(F0, g)(x) / Lie(F1, g)(x)
105+
μ(x, p) = H01(x, p) / Lie(F1, g)(x)
106106

107-
f0 = Flow(ocp, u0)
108-
f1 = Flow(ocp, u1)
109-
fs = Flow(ocp, us)
110-
fb = Flow(ocp, ub, (x, _) -> g(x), μb)
107+
f0 = Flow(ocp, (x, p, tf) -> u0)
108+
f1 = Flow(ocp, (x, p, tf) -> u1)
109+
fs = Flow(ocp, (x, p, tf) -> us(x, p))
110+
fb = Flow(ocp, (x, p, tf) -> ub(x), (x, u, tf) -> g(x), (x, p, tf) -> μ(x, p))
111111

112112
shoot!(s, p0, t1, t2, t3, tf) = begin
113113

@@ -129,11 +129,10 @@ t = direct_sol.times
129129
x = direct_sol.state
130130
u = direct_sol.control
131131
p = direct_sol.adjoint
132-
H1(t) = H1(x(t), p(t))
133132

134-
u_plot = plot(t, t -> u(t)[1], xlabel = "t", ylabel = "u", legend = false)
135-
H1_plot = plot(t, H1, xlabel = "t", ylabel = "H1", legend = false)
136-
g_plot = plot(t, g x, xlabel = "t", ylabel = "g", legend = false)
133+
u_plot = plot(t, u, label = "u(t)")
134+
H1_plot = plot(t, t -> H1(x(t), p(t)), label = "H₁(x(t), p(t))")
135+
g_plot = plot(t, g x, label = "g(x(t))")
137136
display(plot(u_plot, H1_plot, g_plot, layout=(3,1), size=(400,300)))
138137
savefig("goddard_fig2.png")
139138
md"![fig](goddard_fig2.png)"

0 commit comments

Comments
 (0)