Я использую функцию scipy.optimize.minimize
и у меня есть 1D массив как x0
с различными параметрами внутри. Поскольку я работаю с разными физическими параметрами, я не хочу, например, делать итерацию 0,1 для температуры порядка 2500K. Поэтому я хочу наложить ограничения на итерации функции для каждого входа. Я уже пробовал это:
x0 = [0.1, 10.0, 0.90,1200] #tau,star_diam,amC,Td
bounds = [ [0.005,1],[7,13],[0.05,1], [800,1500] ]
cons = []
for factor in range(len(bounds)):
lower, upper = bounds[factor]
l = {'type': 'ineq',
'fun': lambda x, lb=lower, i=factor: x[i] - lb}
u = {'type': 'ineq',
'fun': lambda x, ub=upper, i=factor: ub - x[i]}
cons.append(l)
cons.append(u)
res = minimize(DUSTY_RUN,x0,args=(data_charac,lambda_max,lambda_min,DATA_DIR,INPUT_DIR), constraints=cons, method='COBYLA', options={'rhobeg': [0.01,0.01,0.01,100], 'maxiter': 5000, 'disp': False, 'catol': 1e-6})
В параметрах функции параметр rhoberg
рассматривается как float
, я пытался изменить его как список / массив, но это не ничего не менять, как мы можем догадаться.