目标不是DCP。其以下子表达式不是

时间:2019-12-23 08:17:54

标签: cvxpy convex-optimization

在这里,我使用cvxpy求解器来解决问题。但是问题不遵循DCP规则。

目标是

import cvxpy as cp
import numpy as np

def bit_rate(alpha, beta, p, w):

    return alpha * w * cp.log(1 + beta * p / w)

# Create scalar optimization variables.
p_1 = cp.Variable()
p_2 = cp.Variable()
p_3 = cp.Variable()
w_1 = cp.Variable()
w_2 = cp.Variable()
w_3 = cp.Variable()

r_1 = bit_rate(2, 2, p_1, w_1) 
r_2 = bit_rate(2.4, 2.4, p_2, w_2) 
r_3 = bit_rate(2.8, 2.8, p_3, w_3) 

# Create  constraints.
constraints = [p_1 + p_2 + p_3 == 0.5,
               w_1 + w_2 + w_3 == 1,
               p_1 >= 0, p_2 >= 0, p_3 >= 0,
               w_1 >= 0, w_2 >= 0, w_3 >= 0]

# Form objective.
obj = cp.Maximize(r_1 + r_2 + r_3)

# Form and solve problem.
prob = cp.Problem(obj, constraints)
prob.solve()  # Returns the optimal value.
print("status:", prob.status)
print("optimal value", prob.value)
print("p optimal var", p_1.value, p_2.value, p_3.value)
print("W optimal var", w_1.value, w_2.value, w_3.value)

p和w是变量。我想问如何将问题转换为DCP问题?谢谢!

错误是

The objective is not DCP. Its following subexpressions are not:
2.0 * var0 / var3
2.4 * var1 / var4
2.8 * var2 / var5

0 个答案:

没有答案