如何将2个矩阵放入scipy.optimize.minimize?

lee*_*boy 4 python optimization minimize scipy

我使用该scipy.optimize.minimize功能。我的目的是w,z尽量减少f(w,z)

两者wzÑ矩阵:

[[1,1,1,1],
 [2,2,2,2]]
Run Code Online (Sandbox Code Playgroud)

f(w,z)是接收参数w和z。

我已经尝试过以下表格:

def f(x):
   w = x[0]
   z = x[1]
   ...

minimize(f, [w,z])
Run Code Online (Sandbox Code Playgroud)

但是,最小化效果不佳。

将两个矩阵(n × m)放入其中的有效形式是什么scipy.optimize.minimize

Ben*_*Ben 7

Optimize需要一维矢量来进行优化。您走在正确的轨道上。您需要将论点放平minimize,然后在中f,从开始,x = np.reshape(x, (2, m, n))然后退出wz然后您就应该做生意。

我以前遇到过这个问题。例如,同时优化多个不同类别中的矢量部分。通常,我通常使用一个将事物映射到一维向量的函数,然后使用另一个将数据拉回到对象中的函数,以便评估成本函数。如:

def toVector(w, z):
    assert w.shape == (2, 4)
    assert z.shape == (2, 4)
    return np.hstack([w.flatten(), z.flatten()])

def toWZ(vec):
    assert vec.shape == (2*2*4,)
    return vec[:2*4].reshape(2,4), vec[2*4:].reshape(2,4)

def doOptimization(f_of_w_z, w0, z0):
    def f(x): 
        w, z = toWZ(x)
        return f_of_w_z(w, z)

    result = minimize(f, toVec(w0, z0))
    # Different optimize functions return their
    # vector result differently. In this case it's result.x:
    result.x = toWZ(result.x) 
    return result
Run Code Online (Sandbox Code Playgroud)

  • 如果它对任何人都有帮助,我根据这个答案创建了一个简单的包,以帮助概括变量和约束的创建和管理,以便在具有许多变量的大型项目中使用。GitHub 链接在这里:https://github.com/andrewnyu/optimstruct (2认同)