diff --git a/src/queens/parameters/parameters.py b/src/queens/parameters/parameters.py index 5babd1ee5..17f834027 100644 --- a/src/queens/parameters/parameters.py +++ b/src/queens/parameters/parameters.py @@ -19,6 +19,7 @@ import numpy as np from queens.distributions._distribution import Continuous, Discrete +from queens.distributions.free_variable import FreeVariable from queens.parameters.random_fields._random_field import RandomField from queens.utils.logger_settings import log_init_args @@ -60,16 +61,26 @@ class Parameters: """ @log_init_args - def __init__(self, **parameters): + def __init__(self, *parameters_without_distribution, **parameters): """Initialize Parameters object. Args: - **parameters (Distribution, RandomField): parameters as keyword arguments + *parameters_without_distribution (str): Names of one-dimensional parameters without + assumption about underlying distribution. + **parameters (Distribution, RandomField): parameters as keyword arguments. The keyword + corresponds to the parameter name and the + value corresponds to the underlying + distribution. """ joint_parameters_keys = [] joint_parameters_dim = 0 random_field_flag = False + for parameter_name in parameters_without_distribution: + if parameter_name in parameters: + raise ValueError(f"Parameter name {parameter_name} can only be used once.") + parameters[parameter_name] = FreeVariable(1) + for parameter_name, parameter_obj in parameters.items(): if isinstance(parameter_obj, (Continuous, Discrete)): joint_parameters_keys = _add_parameters_keys( diff --git a/tests/integration_tests/iterators/test_optimization.py b/tests/integration_tests/iterators/test_optimization.py index 30662934b..d303aa099 100644 --- a/tests/integration_tests/iterators/test_optimization.py +++ b/tests/integration_tests/iterators/test_optimization.py @@ -34,9 +34,7 @@ def test_optimization_rosenbrock(algorithm, global_settings): """Test different solution algorithms in optimization iterator.""" # Parameters - x1 = FreeVariable(dimension=1) - x2 = FreeVariable(dimension=1) - parameters = Parameters(x1=x1, x2=x2) + parameters = Parameters("x1", "x2") # Setup iterator driver = Function(parameters=parameters, function="rosenbrock60")