43 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Julia
		
	
	
	
	
	
			
		
		
	
	
			43 lines
		
	
	
		
			1.4 KiB
		
	
	
	
		
			Julia
		
	
	
	
	
	
| @testset "Monotonic Basin Hopping" begin
 | |
| 
 | |
|   using PlotlyJS: savefig
 | |
| 
 | |
|   println("Testing Monotonic Basin Hopper")
 | |
| 
 | |
|   """
 | |
|   The cost function for the mission
 | |
|   """
 | |
|   function easy_cost(m::Mission, C3::Float64, v∞::Float64)
 | |
|     norm_mass = (m.start_mass - prop(m)[7]) / m.start_mass
 | |
|     norm_C3 = ( m.launch_v∞ ⋅ m.launch_v∞ ) / C3
 | |
|     norm_v∞ = norm(m.phases[end].v∞_in) / v∞
 | |
|     return norm_mass + norm_C3 + norm_v∞
 | |
|   end
 | |
| 
 | |
|   # Mission Parameters that won't change (they're very lenient)
 | |
|   sc, fuel = bepi, 2_000.
 | |
|   max_c3, max_v∞ = 100., 20.
 | |
|   launch_window = DateTime(2027,1,1), DateTime(2027,12,25)
 | |
|   latest_arrival = DateTime(2034,12,25)
 | |
| 
 | |
|   # Convenience function for these tests
 | |
|   Thesis.mbh(fbs) = mbh(fbs, sc, sc.dry_mass + fuel, launch_window, max_c3, max_v∞, latest_arrival,
 | |
|                         easy_cost, search_patience=500, drill_patience=20, verbose=true, test=true)
 | |
|   function log(m::Mission, archive::Vector{Mission})
 | |
|     p = plot(m, title="MBH Test Solution")
 | |
|     savefig(p,"../plots/mbh_test_$(length(m.phases))_phase.html")
 | |
|     store(m, "missions/mbh_$(length(m.phases))_phase_best")
 | |
|     store(archive, "missions/mbh_$(length(m.phases))_phase_archive")
 | |
|   end
 | |
|   
 | |
|   # Start simple and get more complex
 | |
|   tests = [Earth, Jupiter], [Earth, Mars, Jupiter], [Earth, Mars, Mars, Jupiter]
 | |
| 
 | |
|   for planets in tests
 | |
|     best, archive = mbh(planets)
 | |
|     @test typeof(best) == Mission
 | |
|     log(best, archive)
 | |
|   end
 | |
| 
 | |
| end
 | 
