in robogym/randomization/sim.py [0:0]
def _randomize_sim(self, random_state: RandomState):
param_value = self._randomizer_param_values * self._coef
if self._apply_mode == "coupled":
new_value = self._initial_value * np.exp(param_value)
elif self._apply_mode == "coupled_additive":
new_value = self._initial_value + (np.exp(param_value) - 1.0)
elif self._apply_mode == "uncoupled":
new_value = self._initial_value * np.exp(
random_state.normal(param_value, size=self._initial_value.shape)
* np.absolute(param_value)
)
elif self._apply_mode == "ranges":
low = min(0, -param_value[0])
high = max(0, param_value[1])
new_value = self._initial_value * np.exp(
random_state.uniform(low, high, size=self._initial_value.shape)
)
elif self._apply_mode == "coupled_ranges":
low = min(0, -param_value[0])
high = max(0, param_value[1])
new_value = self._initial_value * np.exp(random_state.uniform(low, high))
elif self._apply_mode == "coupled_symmetric_ranges":
low = -abs(param_value)
high = abs(param_value) # This is intentially domain_param_value
new_value = self._initial_value * np.exp(
random_state.uniform(low, high, size=self._initial_value.shape)
)
elif self._apply_mode == "variance":
variance = abs(param_value)
new_value = self._initial_value * np.exp(
random_state.normal(0, size=self._initial_value.shape) * variance
)
elif self._apply_mode == "variance_additive":
scale = np.exp(abs(param_value)) - 1.0
noise = random_state.normal(0, scale=scale, size=self._initial_value.shape)
new_value = self._initial_value + noise
elif self._apply_mode == "variance_mean_additive":
pos = np.exp(param_value[0]) - 1.0
scale = np.exp(abs(param_value[1])) - 1.0
noise = np.abs(
random_state.normal(pos, scale=scale, size=self._initial_value.shape)
)
new_value = self._initial_value + noise
elif self._apply_mode == "coupled_mean_variance":
new_value = self._initial_value * np.exp(
random_state.normal(
param_value, scale=abs(param_value), size=self._initial_value.shape
)
)
elif self._apply_mode == "uncoupled_mean_variance":
new_value = self._initial_value * np.exp(
random_state.normal(
param_value[0],
scale=abs(param_value[1]),
size=self._initial_value.shape,
)
)
elif self._apply_mode == "max_additive":
high = np.exp(abs(param_value)) - 1.0
noise = random_state.uniform(
low=0, high=high, size=self._initial_value.shape
)
new_value = self._initial_value + noise
else:
raise RuntimeError()
if self._positive_only:
new_value = np.clip(new_value, 0, np.inf)
self.set_params(new_value)