标题:cvxpy 关于x*log(x/y)问题出现must be real number, not AddExpression
只看楼主
jiangxiao12
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2020-12-29
 问题点数:0 回复次数:1 
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://
版权声明:著作权归作者所有。商业转载请联系作者获得授权,非商业转载请保留以上作者信息和原文链接。
搜索更多相关主题的帖子: 作者 出现 abs import value 
2020-12-29 14:35
april999
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2023-4-15
得分:0 
可以问下楼主之后是怎么解决这个问题的嘛?
2023-04-15 23:15



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-504435-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.060698 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved