有没有办法用N维数组实现凸优化?
Is there a way to implement convex optimization using N-dimensional arrays?
给定 shape = (t,m,n)
的数据,我需要找到一个形状为 (n,)
的向量变量,使数据和向量的凸函数最小化。我已经使用 cvxopt(和 cvxpy)使用 2D 输入执行凸优化,但它们似乎不支持 3D 数组。有没有办法使用这些或其他类似的包来实现这种凸优化?
给定形状为 (t,m,n)
和 (t,m)
的数据以及形状为 (n,)
的变量,这里是我需要最小化的函数类型的简化:
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 维数组不支持这些函数。有没有办法实现这个?
我想如果你只是暂时将 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, ())
给定 shape = (t,m,n)
的数据,我需要找到一个形状为 (n,)
的向量变量,使数据和向量的凸函数最小化。我已经使用 cvxopt(和 cvxpy)使用 2D 输入执行凸优化,但它们似乎不支持 3D 数组。有没有办法使用这些或其他类似的包来实现这种凸优化?
给定形状为 (t,m,n)
和 (t,m)
的数据以及形状为 (n,)
的变量,这里是我需要最小化的函数类型的简化:
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 维数组不支持这些函数。有没有办法实现这个?
我想如果你只是暂时将 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, ())