Keeping on keeping on

This commit is contained in:
Connor
2022-02-28 01:30:36 -07:00
parent 908dd438de
commit 445c1398ac
12 changed files with 175 additions and 45 deletions

View File

@@ -51,11 +51,13 @@ sorted_missions2 = sort(missions, by=cost_2)
println(get_id.(sorted_missions1[1:10]))
println(get_id.(sorted_missions2[1:10]))
display_mission = improve(sorted_missions2[1], n=5)
display_mission = improve(sorted_missions2[1], n=7)
# display(plot(display_mission,
# title="Sample Algorithm Result Mission",
# mode="light",
# planet_colors=false,
# phase_colors=["#F00","#0F0","#00F"],
# phase_colors=["#F00","#F0F","#6AF"],
# markers=false));
store(display_mission, "/home/connor/projects/thesis/archive/best/long_mission")
display(plot_thrust(display_mission, title="Thrust Magnitude vs Time", mode="light"))
display(plot_thrust_components(display_mission, title="Thrust Components vs Time", mode="light"))
# store(display_mission, "/home/connor/projects/thesis/archive/best/long_mission")

View File

@@ -3,7 +3,7 @@
using Random, PlotlyJS, Base.Iterators
export plot
export plot, plot_values, plot_thrust, plot_thrust_components
function random_color()
num1 = rand(0:255)
@@ -48,6 +48,7 @@ function standard_layout(limit::Float64, title::AbstractString; mode="dark")
Layout(
title=attr(
font_color="rgb(250,250,250)",
font_size="32",
yanchor="top",
y=0.95,
text=title
@@ -380,3 +381,97 @@ function plot(m::Union{Mission, Mission_Guess};
PlotlyJS.plot( PlotlyJS.Plot( traces, layout ) )
end
function plot_values(m::Union{Mission, Mission_Guess},
value::Function;
title::String="Mission Plot",
mode::String="dark",
)
i = 1
times = Vector{Float64}()
vals = Vector{Float64}()
for phase in m.phases
# First get the path
path = prop(phase.thrust_profile, start, m.sc, phase.tof)
push!(times, collect(LinRange(0,phase.tof,size(phase.thrust_profile)[2]))...)
push!(vals, value.(path)...)
end
trace = Scatter(;xs=times, ys=vals)
# Determine layout details
layout = standard_layout(0., title, mode=mode)
# Plot
PlotlyJS.plot( PlotlyJS.Plot( [trace], layout ) )
end
function plot_thrust(m::Union{Mission, Mission_Guess};
title::String="Mission Plot",
mode::String="dark",
)
times = Vector{Float64}()
vals = Vector{Float64}()
time = datetime2julian(m.launch_date)
start = state(Earth, time, m.launch_v∞, m.start_mass)
for phase in m.phases
# First get the path
path = prop(phase.thrust_profile, start, m.sc, phase.tof)
time += phase.tof/86400.
mass = path[end,end]
start = state(phase.planet, time, phase.v∞_out, mass)
n = size(phase.thrust_profile)[1]
println(n)
for i in 1:n
push!(times, time + i*phase.tof/(86400n))
push!(vals, norm(phase.thrust_profile[i]))
end
end
trace = scatter(;x=times, y=vals)
# Determine layout details
layout = Layout(;title=title, xaxis_title="Time (JD)", yaxis_title="Thrust (% of Max)")
# Plot
PlotlyJS.plot( PlotlyJS.Plot( [trace], layout ) )
end
function plot_thrust_components(m::Union{Mission, Mission_Guess};
title::String="Mission Plot",
mode::String="dark",
)
times = Vector{Float64}()
vals1 = Vector{Float64}()
vals2 = Vector{Float64}()
vals3 = Vector{Float64}()
time = datetime2julian(m.launch_date)
start = state(Earth, time, m.launch_v∞, m.start_mass)
for phase in m.phases
# First get the path
path = prop(phase.thrust_profile, start, m.sc, phase.tof)
time += phase.tof/86400.
mass = path[end,end]
start = state(phase.planet, time, phase.v∞_out, mass)
n = size(phase.thrust_profile)[1]
println(n)
for i in 1:n
push!(times, time + i*phase.tof/(86400n))
push!(vals1, phase.thrust_profile[i,1])
push!(vals2, phase.thrust_profile[i,2])
push!(vals3, phase.thrust_profile[i,3])
end
end
trace1 = scatter(;x=times, y=vals1, name="x component")
trace2 = scatter(;x=times, y=vals2, name="y component")
trace3 = scatter(;x=times, y=vals3, name="z component")
# Determine layout details
layout = Layout(;title=title,
xaxis_title="Time (JD)",
yaxis_title="Thrust (% of Max)")
# Plot
PlotlyJS.plot( PlotlyJS.Plot( [trace1, trace2, trace3], layout ) )
end