Scipy Минимизация и ограничения по размеру - PullRequest
0 голосов
/ 24 апреля 2020

Я использую функцию 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, я пытался изменить его как список / массив, но это не ничего не менять, как мы можем догадаться.

1 Ответ

0 голосов
/ 26 апреля 2020

rhoberg - начальный шаг, поэтому он не контролирует непосредственно следующие шаги. Вы можете добавить масштабирование параметров в вашей функции DUSTY_RUN - поскольку вы написали [0.01,0.01,0.01,100], вы можете умножить первые три на 1e4.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...