ValueError:形状(12,2)和(24,)不对齐:2(dim 1)!= 24(dim 0)

时间:2018-11-07 16:39:59

标签: python optimization scipy

我需要基于两个损耗变量L1和L2来最小化损耗。所以我的目标函数是

z=a*L1+(1-a)*L2,subject to constraint
L2-L1<=G1

我有大约一百万行csv格式的记录。每行包含1个L1,1的L2值和1个G1的值以及a的1个值。考虑到数据大小,我认为可以使用信任区域内部点优化。 首先,我从数据集中提取了12行的小数据,并编写了以下代码。

from scipy.optimize import LinearConstraint
from scipy.optimize import minimize
from scipy.optimize import SR1

df=pd.read_csv('subset.csv')

linear_constraint = LinearConstraint([[-1, 1], [-1, 1],[-1, 1],[-1, 1],[-1, 1],[-1, 1],[-1, 1],[-1, 1],[-1, 1],[-1, 1],[-1, 1],[-1, 1]], 
                                     [-np.inf,-np.inf,-np.inf,-np.inf,-np.inf,-np.inf,-np.inf,-np.inf,-np.inf,-np.inf,-np.inf,-np.inf],                                      [0.0313,0.7153,0.1341,0.338,0,0.0182,0.2188,0.3234,0.5558,0,0.1382,0.7191])

L1=df.iloc[:,19].values
L2=df.iloc[:,18].values
x=np.concatenate([L1,L2])
a=df.iloc[:,17]

def loss(x):
    return sum(a*x[0:12]+(1-a)*x[12:24])

def jacobian_const(x):

    L=len(x)
    Lo2=int(L/2)
    def row_i(l,N):
          No2 = int(N/2)
          col_i =[0.0]*N
          col_i[l-1] =-1
          col_i[l-1+No2] = 1
          return col_i
    J = row_i(1,L)
    Jacobian=[]
    Jacobian.append(J)
    type(J)
    for l in range(1,Lo2): 
        Jacobian.append(row_i(2,L))      
    return Jacobian

res = minimize(loss, x, method='trust-constr',jac=jacobian_const,hess=SR1(), 
                constraints=[linear_constraint],
                options={'verbose': 1})

运行此代码后,我收到错误消息

  

ValueError:形状(12,2)和(24,)不对齐:2(dim 1)!= 24(dim 0)

您能建议我为消除此错误而需要做哪些更改?很抱歉,我无法共享数据。这是客户数据

0 个答案:

没有答案