【问题标题】:How Do I put 2 matrix into scipy.optimize.minimize?如何将 2 个矩阵放入 scipy.optimize.minimize?
【发布时间】:2015-09-26 08:18:35
【问题描述】:

我使用scipy.optimize.minimize 函数。 我的目的是得到w,z 最小化f(w,z)

wz 都是 nm 矩阵:

[[1,1,1,1],
 [2,2,2,2]]

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

我已经尝试过下面给出的表格:

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

minimize(f, [w,z])

但是,最小化效果不好。

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

【问题讨论】:

    标签: python optimization scipy minimize


    【解决方案1】:

    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
    

    【讨论】:

    • 如果它对任何人都有帮助,我基于这个答案创建了一个简单的包,以帮助概括变量和约束的创建和管理,以便在具有许多变量的大型项目中使用。 GitHub 链接在这里:github.com/andrewnyu/optimstruct
    猜你喜欢
    • 1970-01-01
    • 2014-08-15
    • 2015-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-11
    相关资源
    最近更新 更多