def test_array_multi_vectorize(self): def branin(x): x1 = 15 * x[0] - 5 x2 = 15 * x[1] return (x2 - (5.1 / (4. * np.pi**2.)) * x1**2. + 5. * x1 / np.pi - 6.)**2. + 10. * (1. - 1. / (8. * np.pi)) * np.cos(x1) + 10. # Add a linear error def branin_low_fidelity(x): return branin(x) + 30. * x[1] + 10. mm = om.MultiFiMetaModelUnStructuredComp(nfi=2) mm.add_input('x', np.zeros((1, 2))) mm.add_output('y', np.zeros((1, ))) mm.options['default_surrogate'] = om.MultiFiCoKrigingSurrogate( normalize=False) prob = om.Problem() prob.model.add_subsystem('mm', mm) prob.setup() x = [ [ [0.13073587, 0.24909577], # expensive (hifi) doe [0.91915571, 0.4735261], [0.75830543, 0.13321705], [0.51760477, 0.34594101], [0.03531219, 0.77765831], [0.27249206, 0.5306115], [0.62762489, 0.65778471], [0.3914706, 0.09852519], [0.86565585, 0.85350002], [0.40806563, 0.91465314] ], [ [0.91430235, 0.17029894], # cheap (lowfi) doe [0.99329651, 0.76431519], [0.2012252, 0.35006032], [0.61707854, 0.90210676], [0.15113004, 0.0133355], [0.07108082, 0.55344447], [0.4483159, 0.52182902], [0.5926638, 0.06595122], [0.66305449, 0.48579608], [0.47965045, 0.7407793], [0.13073587, 0.24909577], # notice hifi doe inclusion [0.91915571, 0.4735261], [0.75830543, 0.13321705], [0.51760477, 0.34594101], [0.03531219, 0.77765831], [0.27249206, 0.5306115], [0.62762489, 0.65778471], [0.3914706, 0.09852519], [0.86565585, 0.85350002], [0.40806563, 0.91465314] ] ] y = np.array([[branin(case) for case in x[0]], [branin_low_fidelity(case) for case in x[1]]])
def test_surrogate_message_format(self): mm = om.MultiFiMetaModelUnStructuredComp(nfi=2) mm.add_input('x', np.zeros((1, 2))) mm.add_output('y', np.zeros((1, ))) mm.options['default_surrogate'] = om.MultiFiCoKrigingSurrogate(normalize=False) prob = om.Problem() prob.model.add_subsystem('mm', mm) prob.setup() x = [[[ 0.13073587, 0.24909577], # expensive (hifi) doe [ 0.13073587, 0.24909577], [ 0.40806563, 0.91465314]], [[ 0.91430235, 0.17029894], # cheap (lowfi) doe [ 0.40806563, 0.91465314]]] mm.options['train:x'] = x[0] mm.options['train:y'] = np.array([1, 2, 3]) mm.options['train:x_fi2'] = x[1] mm.options['train:y_fi2'] = np.array([1, 2]) prob['mm.x'] = np.array([[2./3., 1./3.]]) with self.assertRaises(ValueError) as cm: prob.run_model() expected = ("mm: Multiple input features cannot have the same value.") self.assertEqual(str(cm.exception), expected)
def test_om_slice_in_add_input(self): mm = om.MultiFiMetaModelUnStructuredComp(nfi=2) mm.add_input('x', np.ones(3), src_indices=om.slicer[:, 1]) mm.add_output('y', np.zeros((1, ))) mm.options['default_surrogate'] = om.MultiFiCoKrigingSurrogate( normalize=False) arr = np.array([[1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4]]) prob = om.Problem() prob.model.add_subsystem('mm', mm) prob.model.add_subsystem('indep', om.IndepVarComp('x', arr)) prob.model.connect('indep.x', 'mm.x') prob.setup() assert_near_equal(prob['mm.x'], np.array([[1, 2, 3, 4], [1, 2, 3, 4], [1, 2, 3, 4]]))
def test_2_input_2_fidelity(self): import numpy as np import openmdao.api as om mm = om.MultiFiMetaModelUnStructuredComp(nfi=2) mm.add_input('x', np.zeros((1, 2))) mm.add_output('y', np.zeros((1, ))) # Surrrogate model that implements the multifidelity cokriging method. mm.options['default_surrogate'] = om.MultiFiCoKrigingSurrogate( normalize=False) prob = om.Problem() prob.model.add_subsystem('mm', mm) prob.setup() x_hifi = np.array([ [0.13073587, 0.24909577], # expensive (hifi) doe [0.91915571, 0.4735261], [0.75830543, 0.13321705], [0.51760477, 0.34594101], [0.03531219, 0.77765831], [0.27249206, 0.5306115], [0.62762489, 0.65778471], [0.3914706, 0.09852519], [0.86565585, 0.85350002], [0.40806563, 0.91465314] ]) y_hifi = np.array([ 69.22687251161716, 28.427292491743817, 20.36175030334259, 7.840766670948326, 23.950783505007422, 16.0326610719367, 77.32264403894713, 26.625242780670835, 135.85615334210993, 101.43980212355875 ]) x_lofi = np.array([ [0.91430235, 0.17029894], # cheap (lowfi) doe [0.99329651, 0.76431519], [0.2012252, 0.35006032], [0.61707854, 0.90210676], [0.15113004, 0.0133355], [0.07108082, 0.55344447], [0.4483159, 0.52182902], [0.5926638, 0.06595122], [0.66305449, 0.48579608], [0.47965045, 0.7407793], [0.13073587, 0.24909577], # notice hifi doe inclusion [0.91915571, 0.4735261], [0.75830543, 0.13321705], [0.51760477, 0.34594101], [0.03531219, 0.77765831], [0.27249206, 0.5306115], [0.62762489, 0.65778471], [0.3914706, 0.09852519], [0.86565585, 0.85350002], [0.40806563, 0.91465314] ]) y_lofi = list([ 18.204898470295255, 107.66640600958577, 46.11717344625053, 186.002239934648, 135.12480249921992, 65.3605467926758, 51.72316385370553, 15.541873662737451, 72.77648156410065, 100.33324800434931, 86.69974561161716, 52.63307549174382, 34.358261803342586, 28.218996970948325, 57.280532805007425, 41.9510060719367, 107.05618533894713, 39.580998480670836, 171.46115394210995, 138.87939632355875 ]) mm.options['train:x'] = x_hifi mm.options['train:y'] = y_hifi mm.options['train:x_fi2'] = x_lofi mm.options['train:y_fi2'] = y_lofi prob.set_val('mm.x', np.array([[2. / 3., 1. / 3.]])) prob.run_model() assert_near_equal(prob.get_val('mm.y'), 26.26, tolerance=0.02)
prob['mm.x'] = np.array([[1. / 3., 2. / 3.]]) prob.run_model() assert_near_equal(prob['mm.y'], 36.1031735, tolerance=0.02) # Now, vectorized model with both points predicted together. mm = om.MultiFiMetaModelUnStructuredComp(nfi=2, vec_size=2) mm.add_input('x', np.zeros((2, 1, 2))) mm.add_output('y', np.zeros(( 2, 1, ))) mm.options['default_surrogate'] = om.MultiFiCoKrigingSurrogate( normalize=False) prob = om.Problem() prob.model.add_subsystem('mm', mm) prob.setup() mm.options['train:x'] = x[0] mm.options['train:y'] = y[0] mm.options['train:x_fi2'] = x[1] mm.options['train:y_fi2'] = y[1] prob['mm.x'] = np.array([[[2. / 3., 1. / 3.]], [[1. / 3., 2. / 3.]]]) prob.run_model() assert_near_equal(prob['mm.y'], [[26.26], [36.1031735]], tolerance=0.02)