def test_jacobian_SimpleModel1(self): model = SimpleModel1() m = model.make_model() x_init_list = [ [-5.0], [-4.0], [-3.0], [-1.5], [0.5], [1.0], [2.0], [3.5] ] external_model = ExternalPyomoModel( [m.x], [m.y], [m.residual_eqn], [m.external_eqn], ) for x in x_init_list: external_model.set_input_values(x) jac = external_model.evaluate_jacobian_equality_constraints() self.assertAlmostEqual( jac.toarray()[0][0], model.evaluate_jacobian(x[0]), delta=1e-8, )
def test_jacobian_SimpleModel2x2_1(self): model = SimpleModel2by2_1() m = model.make_model() m.x[0].set_value(1.0) m.x[1].set_value(2.0) m.y[0].set_value(3.0) m.y[1].set_value(4.0) x0_init_list = [-5.0, -3.0, 0.5, 1.0, 2.5] x1_init_list = [-4.5, -2.3, 0.0, 1.0, 4.1] x_init_list = list(itertools.product(x0_init_list, x1_init_list)) external_model = ExternalPyomoModel( list(m.x.values()), list(m.y.values()), list(m.residual_eqn.values()), list(m.external_eqn.values()), ) for x in x_init_list: external_model.set_input_values(x) jac = external_model.evaluate_jacobian_equality_constraints() expected_jac = model.evaluate_jacobian(x) np.testing.assert_allclose(jac.toarray(), expected_jac, rtol=1e-8)
def test_jacobian_SimpleModel2(self): model = SimpleModel2() m = model.make_model() x_init_list = [ [-5.0], [-4.0], [-3.0], [-1.5], [0.5], [1.0], [2.0], [3.5] ] external_model = ExternalPyomoModel( [m.x], [m.y], [m.residual_eqn], [m.external_eqn], ) for x in x_init_list: external_model.set_input_values(x) jac = external_model.evaluate_jacobian_equality_constraints() # evaluate_jacobian_equality_constraints involves an LU # factorization and repeated back-solve. SciPy returns a # dense matrix from this operation. I am not sure if I should # cast it to a sparse matrix. For now it is dense... self.assertAlmostEqual( jac.toarray()[0][0], model.evaluate_jacobian(x[0]), delta=1e-7, )