58 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			Julia
		
	
	
	
	
	
			
		
		
	
	
			58 lines
		
	
	
		
			2.2 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 3norm_mass + norm_C3 + norm_v∞
 | |
|   end
 | |
| 
 | |
|   # Mission Parameters that won't change (they're very lenient)
 | |
|   sc, fuel = bepi, 3_600.
 | |
|   c3, v∞ = 100., 20.
 | |
| 
 | |
|   # Convenience function for these tests
 | |
|   Thesis.mbh(fbs, lw, la, sp, dp) = mbh(fbs, sc, fuel, lw, c3, v∞, la, easy_cost,
 | |
|                                         search_patience=sp, drill_patience=dp, verbose=true)
 | |
|   
 | |
|   # Again, we're going to test a simple case first
 | |
|   # This one seems to converge really easily, so we don't search much
 | |
|   # For all of these, this is a test, not actual optimization, so we don't drill much either
 | |
|   launch_window = DateTime(1992,11,1), DateTime(1992,12,1)
 | |
|   latest_arrival = DateTime(1993,6,1)
 | |
|   planets = [ Earth, Venus ] 
 | |
|   best, archive = mbh(planets, launch_window, latest_arrival, 2, 3)
 | |
|   @test typeof(best) == Mission
 | |
|   p = plot(best, title="MBH Test Solution")
 | |
|   savefig(p,"../plots/mbh_test_1_phase.html")
 | |
| 
 | |
|   # Now for a more complicated two-phase mission, with a bigger date range
 | |
|   # This is known to have a solution though
 | |
|   planets = [Earth, Venus, Mars]
 | |
|   launch_window = DateTime(2021,6,1), DateTime(2022,6,1)
 | |
|   latest_arrival = DateTime(2024,1,1)
 | |
|   best, archive = mbh(planets, launch_window, latest_arrival, 10, 3)
 | |
|   @test typeof(best) == Mission
 | |
|   p = plot(best, title="MBH Test Solution")
 | |
|   savefig(p,"../plots/mbh_test_2_phase.html")
 | |
| 
 | |
|   # Now for a real stress test - the old ten-year, 5-phase Jovian mission
 | |
|   # This is known to have a solution... tough to find though
 | |
|   # I'll give it a tight launch window to be nice
 | |
|   planets = [Earth, Venus, Earth, Mars, Earth, Jupiter]
 | |
|   launch_window = DateTime(2023,4,1), DateTime(2023,7,1)
 | |
|   latest_arrival = DateTime(2033,1,1)
 | |
|   best, archive = mbh(planets, launch_window, latest_arrival, 100, 3)
 | |
|   @test typeof(best) == Mission
 | |
|   p = plot(best, title="MBH Test Solution")
 | |
|   savefig(p,"../plots/mbh_test_5_phase.html")
 | |
| 
 | |
| end
 | 
