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
Ejemplo n.º 4
0
        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])