Python线性规划函数optimize.linprog求出来的解,为什么部分都是整数啊?谢谢!
def makeA(alpha,K,X,Y,v):
M = np.zeros((len(X)+len(Y),len(X)+len(Y)+len(X)*n+1))
B = np.zeros((len(X)+len(Y))*2+len(X)*n)
for i in range(len(X)):
M[i][i] = -1
for k in range(n):
u = 0
for j in range(len(X)+len(Y)):
if j < len(X):
for l in range(n):
u += alpha[j]*v[j][l]*K[i*n+k][j*n+l]
else:u -= alpha[j]*K[i*n+k][j+(n-1)*len(X)]
M[i][len(X)+len(Y)+i*n+k] = (-1)*u
# print(len(X)+len(Y)+i*n+k)
M[i][-1] = -1
B[len(X)+len(Y)+len(X)*n+i] = -1
for i in range(len(X),len(X)+len(Y)):
M[i][i] = -1
M[i][-1] = 1
u = 0
for j in range(len(X)+len(Y)):
if j < len(X):
for l in range(n):u+= alpha[j]*v[j][l]*K[i+len(X)*(n-1)][j*n+l]
else:u -= alpha[j]*K[i+len(X)*(n-1)][j+(n-1)*len(X)]
B[len(X)+len(Y)+len(X)*n+i] = -1+(-1)*u
A = np.append(-np.eye(len(X)+len(Y)+len(X)*n+1)[:-1,:],M,axis=0)
return A,B
def makeAeq(X,Y):
Aeq = np.zeros((len(X),len(X)+len(Y)+len(X)*n+1))
for i in range(len(X)):
for k in range(n): Aeq[i][len(X)+len(Y)+i*n+k] = 1
return Aeq
A_ub,B_ub = makeA(alpha,K,MX_POS,MX_NEG_all,v)
Aeq = makeAeq(MX_POS,MX_NEG_all)
Beq = np.ones(len(MX_POS))
res=op.linprog(c,A_ub,B_ub,Aeq,Beq)