20
20
TrialParameter ,
21
21
TrialStatus ,
22
22
)
23
- from generator_standard .vocs import VOCS , ContinuousVariable
23
+ from generator_standard .vocs import VOCS , ContinuousVariable , DiscreteVariable
24
24
from generator_standard .generator import Generator as StandardGenerator
25
25
26
26
logger = get_logger (__name__ )
@@ -114,7 +114,7 @@ def __init__(
114
114
self ._check_parameters (self ._varying_parameters )
115
115
116
116
def _validate_vocs (self , vocs : VOCS ) -> None :
117
- """This generator should have atleast one variable and one objective"""
117
+ """Ensure the generator has at least one variable and one objective. """
118
118
if not vocs .variables :
119
119
raise ValueError ("VOCS must define at least one variable." )
120
120
if not vocs .objectives :
@@ -126,7 +126,7 @@ def _convert_vocs_variables_to_varying_parameters(
126
126
"""Convert VOCS variables to optimas VaryingParameter objects."""
127
127
varying_parameters = []
128
128
for var_name , var_spec in self ._vocs .variables .items ():
129
- # Only handle ContinuousVariable for now
129
+ # Handle ContinuousVariable
130
130
if isinstance (var_spec , ContinuousVariable ):
131
131
vp = VaryingParameter (
132
132
name = var_name ,
@@ -135,6 +135,25 @@ def _convert_vocs_variables_to_varying_parameters(
135
135
default_value = var_spec .default_value ,
136
136
)
137
137
varying_parameters .append (vp )
138
+ # Handle DiscreteVariable that is a range of integers
139
+ # TODO: Suggest supporting IntegerVariables in vocs
140
+ elif isinstance (var_spec , DiscreteVariable ):
141
+ values = list (var_spec .values )
142
+ if len (values ) > 1 :
143
+ # Check if values form a continuous integer range
144
+ sorted_values = sorted (values )
145
+ if all (
146
+ isinstance (v , int ) for v in values
147
+ ) and sorted_values == list (
148
+ range (sorted_values [0 ], sorted_values [- 1 ] + 1 )
149
+ ):
150
+ vp = VaryingParameter (
151
+ name = var_name ,
152
+ lower_bound = sorted_values [0 ],
153
+ upper_bound = sorted_values [- 1 ],
154
+ dtype = int ,
155
+ )
156
+ varying_parameters .append (vp )
138
157
return varying_parameters
139
158
140
159
def _convert_vocs_objectives_to_objectives (self ) -> List [Objective ]:
0 commit comments