【发布时间】:2018-06-02 07:33:08
【问题描述】:
我想使用scipy.optimize 库使用约束向量进行约束优化。特别是,我提供了一个 3d 坐标向量 r0 的 N 点——因此是一个大小为 N x 3 的矩阵——作为函数的输入。坐标是笛卡尔坐标,我希望冻结所有 y 依赖。所以这意味着我需要将我的N x 3 矩阵的第二列保持为一个常数,例如y0。如何定义这样的约束列表?
具体来说,让我们考虑一下 COBYLA 算法 (https://docs.scipy.org/doc/scipy/reference/generated/scipy.optimize.fmin_cobyla.html#scipy.optimize.fmin_cobyla)。我尝试了以下构造:
cons = []
for i in range(xyz0.shape[0]):
def f(x):
return x[i,1]-xyz0cyl[i,1]
cons.append(f)
fmin_cobyla(energy, xyz0, cons, rhoend=1e-7)
并得到错误:
41 for i in range(xyz0.shape[0]):
42 def f(x):
---> 43 return x[i,1]-xyz0cyl[i,1]
44 cons.append(f)
45
IndexError: too many indices for array
发生了什么事?
【问题讨论】:
-
Multidim 数组被展平为一维,因为
minimize仅将序列作为约束。
标签: python optimization scipy