Следующий алгоритм предназначен для равномерной выборки векторов приоритета (или критериев) из преобразованной версии симплекса (который представляет собой поверхность в трехмерном пространстве). Преобразование предполагает взятие мощности одного из весов. Не могли бы вы проверить расчет плотности по формуле Якобиана, правильность выборки по важности и правильность расчета максимальной плотности? Следует отметить, что строки, после которых стоит знак «#», являются комментариями для простоты понимания.
Для максимальной плотности
if power >= 1:
max_densidy = power # Maximum at w=1
else:
max_densidy = power * np.power(0.01, power - 1)
Для выборки
samples = []
while len(samples) < n_samples:
# Sample from the standard 2-simplex
u = np.random.uniform(0, 1, 2)
u = np.sort(u)
w = np.array([u[0], u[1] - u[0], 1 - u[1]])
# Compute the density correction (Jacobian factor)
# The transformation stretches/compresses the surface
if w[transform_idx] > 1e-10: # Avoid division by zero
# The Jacobian determinant factor for the surface measure
density = power * np.power(w[transform_idx], power - 1)
# Rejection sampling
if np.random.uniform(0, max_density)
Подробнее здесь: https://stackoverflow.com/questions/797 ... ed-simplex