56 lines
1.5 KiB
Python
56 lines
1.5 KiB
Python
"""Module for the ParametricProblem class"""
|
|
|
|
from abc import abstractmethod
|
|
import torch
|
|
from .abstract_problem import AbstractProblem
|
|
|
|
|
|
class InverseProblem(AbstractProblem):
|
|
"""
|
|
The class for the definition of inverse problems, i.e., problems
|
|
with unknown parameters that have to be learned during the training process
|
|
from given data.
|
|
|
|
Here's an example of a spatial inverse ODE problem, i.e., a spatial
|
|
ODE problem with an unknown parameter `alpha` as coefficient of the
|
|
derivative term.
|
|
|
|
:Example:
|
|
TODO
|
|
"""
|
|
|
|
def __init__(self):
|
|
super().__init__()
|
|
# storing unknown_parameters for optimization
|
|
self.unknown_parameters = {}
|
|
for var in self.unknown_variables:
|
|
range_var = self.unknown_parameter_domain.range_[var]
|
|
tensor_var = (
|
|
torch.rand(1, requires_grad=True) * range_var[1] + range_var[0]
|
|
)
|
|
self.unknown_parameters[var] = torch.nn.Parameter(tensor_var)
|
|
|
|
@abstractmethod
|
|
def unknown_parameter_domain(self):
|
|
"""
|
|
The parameters' domain of the problem.
|
|
"""
|
|
|
|
@property
|
|
def unknown_variables(self):
|
|
"""
|
|
The parameters of the problem.
|
|
"""
|
|
return self.unknown_parameter_domain.variables
|
|
|
|
@property
|
|
def unknown_parameters(self):
|
|
"""
|
|
The parameters of the problem.
|
|
"""
|
|
return self.__unknown_parameters
|
|
|
|
@unknown_parameters.setter
|
|
def unknown_parameters(self, value):
|
|
self.__unknown_parameters = value
|