pythonbook/优化算法/Adadelta.py

61 lines
1.3 KiB
Python

import numpy as np
from function import *
import math
z_history = []
x1_history = []
x2_history = []
# fName = 'semicircle'
# fName = 'rosenbrock'
# fName = 'semicircle2'
fName = 'himmelblau'
dfName = 'df_'+fName
def objective(trial):
x1 = 0.1
x2 = 0.1
# x1 = trial.suggest_float("x1", 0, 3)
# x2 = trial.suggest_float("x2", 0, 3)
beta = 0.5
# lr = trial.suggest_float("lr", 0, 0.1)
epochs = 15
z = eval(fName)(x1, x2)
z_history.append(z)
s1 ,s2 = 0,0
eps = 1e-5
deltax1,deltax1 = 0,0
for epoch in range(epochs):
dx1, dx2 = eval(dfName)(x1, x2)
s1 = beta*s1+(1-beta)* dx1 ** 2
s2 = beta*s2+(1-beta)* dx2 ** 2
dx1 =
g1 = math.sqrt(s2)
deltax1,deltax2 = beta*deltax1+(1-beta)* dx1 ** 2
lr1,lr2 = lr/ math.sqrt(s1),lr/ math.sqrt(s2)
x1 -= lr1 * dx1
x2 -= lr2 * dx2
x1_history.append(x1)
x2_history.append(x2)
z = eval(fName)(x1, x2)
z_history.append(z)
return eval(fName)(x1, x2)
def main():
study = optuna.create_study(direction="minimize")
study.optimize(objective, n_trials=1, timeout=600)
plot_optimization_history(study).show()
plotAll(fName,np.array(x1_history), np.array(x2_history))
print(study.best_value,study.best_trial)
if __name__ == '__main__':
main()