使用scipy.optimize时,以及使用pyopt时,优化函数必须采用以下形式:
def obj(x):
通常下一行将是:
wingspan =x[0]
AspectRatio=x[1]
同样,对于约束,我们必须使用不直观的名称:
{'type': 'eq',
... 'fun' : lambda x: np.array([x[0]**3 - x[1]]),
... 'jac' : lambda x: np.array([3.0*(x[0]**2.0), -1.0])}
或者在pyopt中:
opt_prob.addCon('x1', type='i', lower=-inf, upper=inf, equal=0.0)
在这里,它更糟糕(?):这里,名称是x1,在目标函数中它变成x [0]。
是否有任何辅助功能可以将这个非常数学的界面更改为更多的工程设计。接口
同样:约束通常需要规范化: 如果我想要重量< 9000:
w=weight/9000-1
同样在这里,我想知道,如果有更多的工程'接口? 理想情况下我想:
def obj(span=40, aspect_ratio=12, aileron=0, dihedral=0):
return compute_blockfuel(span, aspect_ratio, aileron, dihedral)
def weight(span=40, aspect_ratio=12):
return span*span*aspect_ratio
和
opt=optimize(obj, 'maximize')
opt.add_var(span, min=10, max=20)
opt.add_cons(weight, max=9000)
opt.start()
是否存在scipy.optimize或pyopt这样的包装器?如果没有,有充分的理由吗?如果没有:我将如何创建这样的包装器?
感谢您的帮助!