【问题标题】:Scipy Minimization and stepsize constraintsScipy 最小化和步长约束
【发布时间】:2020-08-08 03:21:37
【问题描述】:

我使用scipy.optimize.minimize 函数,我有一个一维数组x0,里面有不同的参数。由于我使用不同的物理参数,例如,我不想对 2500K 数量级的温度进行 0.1 的迭代。所以我想对每个输入的函数迭代施加约束。我已经试过了:

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,我尝试将其更改为列表/数组,但这并没有像我们猜测的那样改变任何东西。

【问题讨论】:

  • 您不能在这些通用 NLP 求解器中强制一些优化路径。不过,您可以分解您的方法:outer 网格搜索或类似的 + inner NLP 用于本地优化/解决方案抛光。当然会有一些信息丢失,在评估网格点 x 时,您对未评估的网格点 y 一无所知。
  • @sascha 好的,我很害怕这种回答:/ 好吧,谢谢你,我会先研究网格方法 :)

标签: python python-3.x scipy minimize scipy-optimize


【解决方案1】:

rhoberg 是初始步骤,因此不直接控制后续步骤。您可以在 DUSTY_RUN 函数中添加参数缩放 - 因为您编写了 [0.01,0.01,0.01,100],所以您可以将前三个乘以 1e4

【讨论】:

    猜你喜欢
    • 2013-12-03
    • 2016-05-27
    • 1970-01-01
    • 1970-01-01
    • 2021-09-27
    • 1970-01-01
    • 2017-07-07
    • 1970-01-01
    • 2017-08-01
    相关资源
    最近更新 更多