cvxpy 关于x*log(x/y)问题出现must be real number, not AddExpression
对于凸优化有专门的编程规则,x 和 y 是要优化的变量,在 matlab 中对于出现 xlog (x/y) 函数可以用 rel_entr (x/y) 来代替,这样才符合凸优化的编程规则,但是在 python 中没有类似的函数,我该怎么去表达关于 xlog (x/y) 的表达式。以下是关于这部分我测试的代码。%%
import math
import cvxpy as cp
import numpy as np
import matplotlib.pyplot as plt
%%
x = np.linspace(0, 10)
y = np.linspace(0, 10)
plt.plot([np.sqrt(y) / np.exp(y) for y in np.linspace(0, 10)])
plt.show()
%%
Create two scalar optimization variables.
在 CVXPY 中变量有标量 (只有数值大小),向量,矩阵。
在 CVXPY 中有常量 (见下文的 Parameter)
alpha1 = 0.5
alpha2 = 0.5
beta1 = 0.8
beta2 = 0.8
h1 = 4
h2 = 2
g1 = 4
g2 = 2
n = 8
sigma = 1
alpha1 = cp.Variable () # 定义变量 x, 定义变量 y。两个都是标量
alpha2 = cp.Variable()
alpha3 = cp.Variable()
constraints = [#alpha1<=1,
#alpha1>=0,
alpha2<=1,
alpha2>=0,
alpha3<=1,
alpha3>=0,
alpha2+alpha3 == 1,
#alpha1*math.log2(1+((beta1*(abs(h1))**2*(abs(g1))**2)/sigma**2))>=2,
alpha2*math.log2(1+((beta2*(abs(h2))**2*(abs(g2))**2)/sigma**2))>=2]
obj = cp.Maximize(alpha3*math.log2(1+(alpha2/alpha3)))
prob = cp.Problem(obj, constraints)
prob.solve() # Returns the optimal value.
print(“status:”, prob.status)
print (“optimal value”, prob.value) # 最优值
print (“optimal var”, alpha1.value, alpha2.value, alpha3.value) # x 与 y 的解
————————————————
原文作者:jiangxiao123
转自链接:https://
版权声明:著作权归作者所有。商业转载请联系作者获得授权,非商业转载请保留以上作者信息和原文链接。