我有四个向量。
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]
我需要最小化以下等式:
其中0 <= a,b,g <= 1
。我尝试使用scipy.minimize
,但我不明白如何将其用于此等式。有没有我可以使用的优化库,或者在Python中有更简单的方法可以做到?我们将不胜感激,因为我已经连续使用了4个小时,但没有任何成果。我的最终目标是在a,b,g
之间找到0-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
。我找不到解决方案,也许您可以。祝好运!让我知道您是否找到解决方案,并且可行!