使用Python最小化方程式

时间:2018-12-02 20:46:38

标签: python convex-optimization

我有四个向量。

x = [0.4, -0.3, 0.9]
y1 = [0.3, 1, 0]
y2 = [1, -0.9, 0.5]
y3 =[0.6, 0.01, 0.8]

我需要最小化以下等式:

Equation

其中0 <= a,b,g <= 1。我尝试使用scipy.minimize,但我不明白如何将其用于此等式。有没有我可以使用的优化库,或者在Python中有更简单的方法可以做到?我们将不胜感激,因为我已经连续使用了4个小时,但没有任何成果。我的最终目标是在a,b,g之间找到0-1的值,这些值在给定这四个向量作为输入的情况下给我最小值。

1 个答案:

答案 0 :(得分:0)

编辑0:我通过使用Bounds实例解决了该问题。数组x应该是您想要的。这是答案。

      fun: 0.34189582276366093
 hess_inv: <3x3 LbfgsInvHessProduct with dtype=float64>
      jac: array([ 6.91014296e-01,  3.49720253e-07, -2.88657986e-07])
  message: b'CONVERGENCE: NORM_OF_PROJECTED_GRADIENT_<=_PGTOL'
     nfev: 40
      nit: 8
   status: 0
  success: True
        x: array([0.        , 0.15928136, 0.79907217])

我做了一些工作。我陷入了一个错误,但我觉得自己在解决问题的正确方法上。这是代码。

import numpy as np   
from scipy.optimize import Bounds,minimize

def cost_function(ini):

    x = np.array([0.4, -0.3, 0.9])
    y1 = np.array([0.3, 1, 0])
    y2 = np.array([1, -0.9, 0.5])
    y3 =np.array([0.6, 0.01, 0.8])

    L = np.linalg.norm(np.transpose(x) - np.dot(ini[0],y1) - np.dot(ini[1],y2) - np.dot(ini[2],y3))
    return L

ini = np.random.rand(3)
min_b= np.zeros(3)
max_b= np.ones(3)
bnds=Bounds(min_b,max_b)

print(minimize(cost_function,x0 =ini,bounds=bnds))

但是,尽管长度相等,但出现错误ValueError: length of x0 != length of bounds。我找不到解决方案,也许您可​​以。祝好运!让我知道您是否找到解决方案,并且可行!