首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在CVXR中传递目标函数字符串

在CVXR中传递目标函数字符串
EN

Stack Overflow用户
提问于 2020-07-18 10:01:21
回答 1查看 51关注 0票数 0

我试图围绕CVXR编写一个包装器函数,这样'objective‘和'constraint’可以由一个函数传递。我使用以下示例:

示例:

代码语言:javascript
复制
x1 <- Variable(1)      # a scalar
x2 <- Variable(1)      # a scalar

objective   <- Minimize( x1^2 + x2^2 ) 
constraints <- list(x1 <= 0, x1 + x2 == 0)
problem     <- Problem(objective, constraints)

## Checking problem solution

solution <- solve(problem) 

我的尝试到目前为止:

代码语言:javascript
复制
foo <- function(vars, const, obj) {
# for testing these values are passed inside
 vars = c("x1", "x2")
 obj = "x1^2 + x2^2"
 const = "(x1 <= 0, x1 + x2 == 0)"

  for(i in 1:length(vars)) {assign(vars[i], Variable(1, name = vars[i]))}

 objective <- eval(paste("Minimize(", obj, ")"))
}

问题:

目标变量不计算为x1^2 + x2^2,而是用引号计算。我试过了as.formula,eval,代用品等。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-07-18 10:21:45

也许您可以尝试使用parseeval,如下所示

代码语言:javascript
复制
foo <- function(vars, const, obj) {
    # for testing these values are passed inside
    vars <- c("x1", "x2")
    obj <- "x1^2 + x2^2"
    const <- "(x1 <= 0, x1 + x2 == 0)"

    for (i in 1:length(vars)) {
        assign(vars[i], Variable(1, name = vars[i]))
    }

    objective <- eval(parse(text = paste("Minimize(", obj, ")")))
    constraints <- eval(parse(text = paste("list", const)))
    problem <- Problem(objective, constraints)
    solve(problem)
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62967212

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档