gpt4 book ai didi

python - 如何在 Optuna 中建议多变量比率(有界限)?

转载 作者:行者123 更新时间:2023-12-05 04:54:31 24 4
gpt4 key购买 nike

我想在 Optuna 中建议比率。

比率为 X_1, X_2, ..., X_k , 以 ∑X_i = 1 为界和 0 <= X_i <= 1对于所有 i .

Optuna 不提供 Dirichlet 分布。

我已经尝试了下面的代码,但是它不起作用。

def objective(trial):
k = 10
ratios = np.zeros(k)

residual = 1
for i in range(k - 1):
ratios[i] = trial.suggest_float(f'ratio_{i}', 0, residual)
residual -= ratios[i]

# ratios[k - 1] = trial.suggest_float(f'ratio_{k - 1}', residual, residual)
ratios[k - 1] = residual
return np.log(ratios).sum()

study = optuna.create_study(direction='maximize')
study.optimize(objective, n_trials=20)

然后我尝试了下面的代码,它没有任何错误地终止了。不过建议k次,即使自由度是 k - 1 , 这是不一致的。

def objective(trial):
k = 10
ratios = np.zeros(k)

for i in range(k):
ratios[i] = trial.suggest_float(f'ratio_{i}', 0, 1)

ratios /= ratios.sum()
return np.log(ratios).sum()

study = optuna.create_study(direction='maximize')
study.optimize(objective, n_trials=20)

我如何建议一个比率或受多个变量限制?

这是一个简单的例子并且是可微分的,但我想处理一个更复杂的目标函数并且为此需要变量。

最佳答案

这有效。

class Objective:
def __init__(self):
self.max = 1
def __call__(self, trial):
k = 10
ratios = np.zeros(k)

for i in range(k):
ratios[i] = trial.suggest_float(f'ratio_{i}', 0, self.max)

ratios /= ratios.sum()
self.max = (self.max + ratios.max()) / 2
return np.log(ratios).sum()

study = optuna.create_study(direction='maximize')
study.optimize(Objective(), n_trials=100)

关于python - 如何在 Optuna 中建议多变量比率(有界限)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65713063/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com