有没有一种方法可以使用n维数组实现凸优化?

2024-04-24 21:14:09 发布

您现在位置:Python中文网/ 问答频道 /正文

给定带有shape = (t,m,n)的数据,我需要找到一个(n,)形状的向量变量,它使数据和向量的凸函数最小化。我已经使用cvxopt(和cvxpy)来使用2D输入执行凸优化,但是它们似乎不支持3D数组。有没有一种方法来实现这个凸优化使用这些或其他类似的软件包?你知道吗

给定具有形状(t,m,n)(t,m)的数据和具有形状(n,)的var,下面是我需要最小化的函数类型的简化:

import numpy as np

obj_func(var,data1,data2):
    #data1.shape = (t,m,n)
    #data2.shape = (t,m)
    #var.shape = (n,)

    score = np.sum(data1*var,axis=2) #dot product along axis 2
    time_series = np.sum(score*data2,axis=1) #weighted sum along axis 1
    return np.sum(time_series)-np.sum(time_series**2) #some function

这似乎应该是一个简单的凸优化,但不幸的是,cvxopt/cvxpy中的N维数组不支持这些函数。有没有办法实现这一点?你知道吗


Tags: 数据timevarnp数组向量series形状
1条回答
网友
1楼 · 发布于 2024-04-24 21:14:09

我想如果你只是把data1暂时改成2d,你会没事的

import numpy as np
import cvxpy as cp
t, m, n = 10, 8, 6
data1 = np.ones((t, m, n))
data2 = np.ones((t, m))
x = cp.Variable(n)
score = cp.reshape(data1.reshape(-1, n) * x, (t, m))
time_series = cp.sum(cp.multiply(score, data2), axis=1)
expr = cp.sum(time_series) - cp.sum(time_series ** 2)
print(repr(expr))

输出:

Expression(CONCAVE, UNKNOWN, ())

相关问题 更多 >