Python 如何使用optuna或hyperopt调整条件目标函数

Python 如何使用optuna或hyperopt调整条件目标函数,python,optuna,Python,Optuna,我尝试使用optuna来调整超参数。但我的目标函数是有条件的,这会在获得最佳参数时产生问题 我只想在满足条件的情况下获得cwc,否则继续试验下一个超参数。 但我想,由于不符合条件,而且客观函数与化学武器公约有关,它给出了错误 UnboundLocalError:分配前引用的局部变量“cwc\U train” define objective (trial): k_dis = trial.suggest_uniform('k_dis', 0.0, 5.0) l_dis = tria

我尝试使用optuna来调整超参数。但我的目标函数是有条件的,这会在获得最佳参数时产生问题

我只想在满足条件的情况下获得cwc,否则继续试验下一个超参数。 但我想,由于不符合条件,而且客观函数与化学武器公约有关,它给出了错误

UnboundLocalError:分配前引用的局部变量“cwc\U train”

define objective (trial):
    k_dis = trial.suggest_uniform('k_dis', 0.0, 5.0)
    l_dis = trial.suggest_uniform('l_dis', 0.0, 5.0)
    k_bound = trial.suggest_uniform('k_bound', 0.0, 5.0)
    l_bound = trial.suggest_uniform('l_bound', 0.0, 5.0) 

    picp = .....
    pinrw = .....


    if picp_train >= 0.8 and pinrw_train < 0.18: 
        cwc_train = fc.CWC_proposed(predict_bound_train, Y_train)
    else:
        print("error = ")
    return  cwc_train
study = optuna.create_study()
study.optimize(objective, n_trials=100)
定义目标(试验):
k_-dis=试验。建议统一标准('k_-dis',0.0,5.0)
l_-dis=试验。建议统一('l_-dis',0.0,5.0)
k_界=试验。建议统一标准(“k_界”,0.0,5.0)
l_界=试验。建议统一('l_界',0.0,5.0)
picp=。。。。。
pinrw=。。。。。
如果picp\U列>=0.8且pinrw\U列<0.18:
cwc\U列车=拟定的fc.cwc\U列车(预计开往列车、Y\U列车)
其他:
打印(“错误=”)
返回cwc_列车
study=optuna.create_study()
研究。优化(目标,n_试验=100)
UnboundLocalError:分配前引用的局部变量“cwc\U train”

define objective (trial):
    k_dis = trial.suggest_uniform('k_dis', 0.0, 5.0)
    l_dis = trial.suggest_uniform('l_dis', 0.0, 5.0)
    k_bound = trial.suggest_uniform('k_bound', 0.0, 5.0)
    l_bound = trial.suggest_uniform('l_bound', 0.0, 5.0) 

    picp = .....
    pinrw = .....


    if picp_train >= 0.8 and pinrw_train < 0.18: 
        cwc_train = fc.CWC_proposed(predict_bound_train, Y_train)
    else:
        print("error = ")
    return  cwc_train
study = optuna.create_study()
study.optimize(objective, n_trials=100)
我只想在满足条件的情况下获得cwc,否则继续试验下一个超参数

在这种情况下,请提出
optuna.structs.TrialPruned
,而不是返回cwc\U列车。请注意,默认采样器(
TPESampler
)知道修剪后的解决方案,因此可以降低重新采样的概率

if picp_train >= 0.8 and pinrw_train < 0.18: 
    cwc_train = fc.CWC_proposed(predict_bound_train, Y_train)
    return cwc_train
raise optuna.structs.TrialPruned()
如果picp\U列>=0.8且pinrw\U列<0.18:
cwc\U列车=拟定的fc.cwc\U列车(预计开往列车、Y\U列车)
返回cwc_列车
raise optuna.structs.TrialPruned()
我只想在满足条件的情况下获得cwc,否则继续试验下一个超参数

在这种情况下,请提出
optuna.structs.TrialPruned
,而不是返回cwc\U列车。请注意,默认采样器(
TPESampler
)知道修剪后的解决方案,因此可以降低重新采样的概率

if picp_train >= 0.8 and pinrw_train < 0.18: 
    cwc_train = fc.CWC_proposed(predict_bound_train, Y_train)
    return cwc_train
raise optuna.structs.TrialPruned()
如果picp\U列>=0.8且pinrw\U列<0.18:
cwc\U列车=拟定的fc.cwc\U列车(预计开往列车、Y\U列车)
返回cwc_列车
raise optuna.structs.TrialPruned()