Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Welcome To Ask or Share your Answers For Others

Categories

0 votes
766 views
in Technique[技术] by (71.8m points)

python - cvxpy DCPError: Problem does not follow DCP rules

I am trying to create a modified implementation of fused lasso in cvxpy to solve an optimization problem. The following code gives me an error of:

DCPError: Problem does not follow DCP rules. Specifically: The objective is not DCP. Its following subexpressions are not: max(Vstack(var2111[0:190], var2111[190:380], var2111[380:570], var2111[570:760]), 0, False)[1:190] + -max(Vstack(var2111[0:190], var2111[190:380], var2111[380:570], var2111[570:760]), 0, False)[0:189]

def loss_fn(X, Y, beta_A, beta_C, beta_G, beta_T):
    return cp.norm2(Y - [email protected]((beta_A, beta_C, beta_G, beta_T)))**2

def regularizer(beta_A, beta_C, beta_G, beta_T):
    beta_max = cp.max(cp.vstack((beta_A, beta_C, beta_G, beta_T)), axis = 0)
    print (beta_max)
    return cp.sum(cp.abs(cp.diff(beta_max)))


def objective_fn(X, Y, beta_A, beta_C, beta_G, beta_T, lambd):
    return loss_fn(X, Y, beta_A, beta_C, beta_G, beta_T) + lambd * 
                                                regularizer(beta_A, beta_C, beta_G, beta_T)


beta_A = cp.Variable(len(seq))
beta_C = cp.Variable(len(seq))
beta_G = cp.Variable(len(seq))
beta_T = cp.Variable(len(seq))
lambd = cp.Parameter(nonneg=True)
problem = cp.Problem(cp.Minimize(objective_fn(X_diff_xor.values, y_values, 
                                              beta_A, beta_C, beta_G, beta_T, lambd)))

#lambd_values = [3, 5, 7, 9, 11, 13] # regularization parameter
lambd_values = [7]
beta_values = []
for v1 in lambd_values:
    lambd.value = v1
    problem.solve(solver = 'ECOS', verbose = True)
    beta_values.append(beta.value)

Any help/insight will be appreciated. Thanks.

question from:https://stackoverflow.com/questions/65889746/cvxpy-dcperror-problem-does-not-follow-dcp-rules

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
Welcome To Ask or Share your Answers For Others

1 Reply

0 votes
by (71.8m points)
Waitting for answers

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
OGeek|极客中国-欢迎来到极客的世界,一个免费开放的程序员编程交流平台!开放,进步,分享!让技术改变生活,让极客改变未来! Welcome to OGeek Q&A Community for programmer and developer-Open, Learning and Share
Click Here to Ask a Question

...