def test_scalarQoI(self): systemsize = 3 mu = np.random.rand(systemsize) std_dev = np.diag(np.random.rand(systemsize)) jdist = cp.MvNormal(mu, std_dev) # Create QoI Object QoI = Paraboloid3D(systemsize) # Create the Monte Carlo object QoI_dict = { 'paraboloid': { 'QoI_func': QoI.eval_QoI, 'output_dimensions': 1, } } nsample = 1000000 mc_obj = MonteCarlo(nsample, jdist, QoI_dict) mc_obj.getSamples(jdist) # Get the mean and variance using Monte Carlo mu_js = mc_obj.mean(jdist, of=['paraboloid']) var_js = mc_obj.variance(jdist, of=['paraboloid']) # Analytical mean mu_j_analytical = QoI.eval_QoI_analyticalmean(mu, cp.Cov(jdist)) err = abs((mu_js['paraboloid'] - mu_j_analytical) / mu_j_analytical) self.assertTrue(err < 1e-3) # Analytical variance var_j_analytical = QoI.eval_QoI_analyticalvariance(mu, cp.Cov(jdist)) err = abs((var_js['paraboloid'] - var_j_analytical) / var_j_analytical) # print('var_js paraboloid = ', var_js['paraboloid'], '\n') self.assertTrue(err < 1e-2)
reduced_collocation=True, include_derivs=False, dominant_dir=dominant_dir) mc_obj.getSamples(jdist, include_derivs=False) else: print('Using Full Monte Carlo') nsample = 10000 # 5000 mc_obj = MonteCarlo(nsample, jdist, QoI_dict, reduced_collocation=False, include_derivs=False) mc_obj.getSamples(jdist, include_derivs=False) mu_j = mc_obj.mean(jdist, of=['time_duration']) var_j = mc_obj.variance(jdist, of=['time_duration']) # Print everything print() if use_reduced_collocation: print("Using Monte Carlo method along dominant directions.") else: print('Using Full Monte Carlo.') print('mean time duration = ', mu_j['time_duration']) print('variance time_duration = ', var_j['time_duration']) print() statistics_time = time.time() - (start_time + initialization_time) # Get the statistics schedule_dict = QoI.compute_schedule_statistics()
QoI_dict = {'fuelburn' : {'QoI_func' : QoI.eval_QoI, 'output_dimensions' : 1 }, } # Create the Monte Carlo object start_time1 = time.time() nsample = int(sys.argv[1]) mc_obj = MonteCarlo(nsample, jdist, QoI_dict) # tjdist: truncated normal distribution mc_obj.getSamples(jdist) # t1 = time.time() # Compute the statistical moments using Monte Carlo mu_j_mc = mc_obj.mean(jdist, of=['fuelburn']) t2 = time.time() var_j_mc = mc_obj.variance(jdist, of=['fuelburn']) t3 = time.time() print('Monte Carlo samples = ', nsample) print("mean_mc = ", mu_j_mc['fuelburn'][0]) print("var_mc = ", var_j_mc['fuelburn'][0]) print() # mean_sc_fuelburn = 5.269295151614887 # var_sc_fuelburn = 0.34932256 # err_mu = abs((mean_sc_fuelburn - mu_j_mc['fuelburn']) / mean_sc_fuelburn) # err_var = abs((var_sc_fuelburn - var_j_mc['fuelburn']) / var_sc_fuelburn) # print("err mu = ", err_mu) # print("err var = ", err_var) print('\n-------- Timing Results -------\n') prep_time_mc = t1 - start_time1
elapsed_time = end_time - start_time print() print('time elapsed = ', elapsed_time) else: raise NotImplementedError print() print(sol) print(sol.fStar) print() print("twist = ", UQObj.QoI.p['oas_scaneagle.wing.geometry.twist']) print("thickness =", UQObj.QoI.p['oas_scaneagle.wing.thickness']) print('twist_cp = ', UQObj.QoI.p['oas_scaneagle.wing.twist_cp']) print('thickness_cp = ', UQObj.QoI.p['oas_scaneagle.wing.thickness_cp']) print("sweep = ", UQObj.QoI.p['oas_scaneagle.wing.sweep']) print("aoa = ", UQObj.QoI.p['oas_scaneagle.alpha']) print() print('time elapsed = ', elapsed_time) # Compute the statistical moments mc_obj.getSamples(UQObj.jdist) mu_j = mc_obj.mean(UQObj.jdist, of=['fuelburn', 'constraints']) var_j = mc_obj.variance(UQObj.jdist, of=['fuelburn', 'con_failure']) print('mu fuelburn = ', mu_j['fuelburn']) print('var fuelburn = ', var_j['fuelburn']) print('mu_j KS = ', mu_j['constraints'][0]) print('var_j KS = ', var_j['con_failure'][0]) print('robust KS = ', mu_j['constraints'][0] + 2 * np.sqrt(var_j['con_failure'][0])) print('mu_j_lift = ', mu_j['constraints'][n_thickness_intersects+1]) print('mu_j CM = ', mu_j['constraints'][-2])