注册 登录
编程论坛 Python论坛

cvxpy 关于x*log(x/y)问题出现must be real number, not AddExpression

jiangxiao12 发布于 2020-12-29 14:35, 2055 次点击
对于凸优化有专门的编程规则,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://
版权声明:著作权归作者所有。商业转载请联系作者获得授权,非商业转载请保留以上作者信息和原文链接。
1 回复
#2
april9992023-04-15 23:15
可以问下楼主之后是怎么解决这个问题的嘛?
1