Source code for kona.examples.simple_2by2

import numpy

from kona.user import UserSolver

[docs]class Simple2x2(UserSolver): def __init__(self): super(Simple2x2, self).__init__( num_design=2, num_state=2, num_eq=0, num_ineq=0) self.dRdX = -1*numpy.eye(2) self.dRdU = numpy.array([[1,1],[0,1]])
[docs] def eval_obj(self, at_design, at_state): return numpy.sum(at_state.data**2) + (at_design[0]-3)**2
[docs] def eval_residual(self, at_design, at_state, store_here): p = at_design u = at_state.data store_here.data[:] = self.dRdU.dot(u) - p
[docs] def multiply_dRdX(self, at_design, at_state, in_vec, out_vec): out_vec.data[:] = self.dRdX.dot(in_vec)
[docs] def multiply_dRdU(self, at_design, at_state, in_vec, out_vec): out_vec.data[:] = self.dRdU.dot(in_vec.data)
[docs] def multiply_dRdX_T(self, at_design, at_state, in_vec): return self.dRdX.T.dot(in_vec.data)
[docs] def multiply_dRdU_T(self, at_design, at_state, in_vec, out_vec): out_vec.data[:] = self.dRdU.T.dot(in_vec.data)
[docs] def eval_dFdX(self, at_design, at_state): return numpy.array([2*at_design[0], 2*at_design[1]])
[docs] def eval_dFdU(self, at_design, at_state, store_here): U = at_state.data store_here.data[:] = numpy.array([2*(U[0]), 0])
[docs] def init_design(self): return numpy.array([10., 10.])
[docs] def solve_nonlinear(self, at_design, result): result.data[:] = numpy.linalg.solve(self.dRdU, at_design) return 0
[docs] def solve_linear(self, at_design, at_state, rhs_vec, rel_tol, result): result.data[:] = numpy.linalg.solve(self.dRdU, rhs_vec.data) return 0
[docs] def solve_adjoint(self, at_design, at_state, rhs_vec, rel_tol, result): result.data[:] = numpy.linalg.solve(self.dRdU.T, rhs_vec.data) return 0