python - 使用 cvxopt 函数时如何摆脱“ValueError:除连接轴之外的所有输入数组维度必须完全匹配”错误?
问题描述
首先,我以适当的形状定义了一些矩阵和向量。
初始化
I=np.eye(24)
Z=np.zeros((24,24))
a=0.012
b=1.1
gamma1=0.9/80
gamma2=1.1/80
MM=np.eye(24)
for i in range (22):
MM[i+1,i]=-1
MM[0,23]=-1
M=random.randint(200,300, size=(24,1))
max_pch=5
max_pdch=5
ppp=random.randint(150,200, size=(24,))
定义目标函数矩阵
Q 和 C 分别是目标函数 1/2 x^TQ x +C^T x 的矩阵和向量。
Q=np.asarray(np.bmat([[a*I,Z,Z,Z],[Z,a*I,Z,Z],[Z,Z,Z,Z],[Z,Z,Z,Z] ]))
C=np.asarray(np.bmat([[b*np.ones(24),b*np.ones(24),0*np.ones(24),ppp]]))
##创建平等主题
在我的问题中,我只有相等的约束以及定义自爆的上限和下限。
Aeq=np.asarray(np.bmat([[-I,I,Z,I], [-gamma1*I, gamma2*I,MM,Z],[np.zeros((48,96))]]))
beq=np.asarray(np.bmat([[M],[np.zeros((72,1))]]))
##创建形状的上限和下限(1,96)
lb=np.asarray(np.bmat([[0*np.ones(24),0*np.ones(24),[0.1],0.1*np.ones(22),
[0.1],100*np.ones(24)]]))
ub=np.asarray(np.bmat([[max_pch*np.ones(24),max_pdch*np.ones(24),[0.1],0.9*np.ones(22),
[0.9],500*np.ones(24)]]))
x = solve_qp(P=matrix(Q), q=C.T,
G=None,h=None, A=matrix(Aeq), b=beq, lb=lb.T, ub=ub.T,solver='quadprog')
##错误
---------------------------------------------------------------------------
ValueError Traceback (most recent call last)
<ipython-input-48-111d9695d5a8> in <module>
25
26 x = solve_qp(P=matrix(Q), q=C.T,
---> 27 G=None,h=None, A=matrix(Aeq), b=beq, lb=lb.T, ub=ub.T,solver='quadprog')
28
29
~\Anaconda3\lib\site-packages\qpsolvers\__init__.py in solve_qp(P, q, G, h, A, b, lb, ub,
solver, initvals, sym_proj, verbose, **kwargs)
271 kwargs["verbose"] = verbose
272 try:
--> 273 return __solve_function__[solver](*args, **kwargs)
274 except KeyError:
275 raise SolverNotFound(f"solver '{solver}' is not available")
~\Anaconda3\lib\site-packages\qpsolvers\quadprog_.py in quadprog_solve_qp(P, q, G, h, A, b,
initvals, verbose)
85 else:
86 qp_C = -vstack([A, G]).T
---> 87 qp_b = -hstack([b, h])
88 meq = A.shape[0]
89 else: # no equality constraint
~\Anaconda3\lib\site-packages\numpy\core\shape_base.py in hstack(tup)
338 return _nx.concatenate(arrs, 0)
339 else:
--> 340 return _nx.concatenate(arrs, 1)
341
342
ValueError: all the input array dimensions except for the concatenation axis must match
exactly
如果有人可以帮助我,我很高兴。
解决方案
推荐阅读
- javascript - 如何在页面加载时向 Owl-item 添加类?
- api - 编写易于导入的 Wagtail 元素、字段和页面
- c# - C# data type mismatch in criteria expression
- sass - Bootstrap 4 添加额外的表上下文类别名
- stm32 - Issue in using "HAL_UART_Transmit" in FreeRTOS-MPU Usermode (Non-Priviledge) task on STM32F412
- python - 使用熊猫将 GZip csv 读入 python 时出现问题
- python - 由于高优先级事务的高 CPU 利用率,记录在 GCP Spanner 中被丢弃
- jquery - 无法获取最接近的数字输入字段值
- ios - 在 Swift 4.2 中传递给多部分 API 的非拉丁(多语言)文件名
- linux - Linux stdout 在哪里写入日志以及分配给它的内存量