R Shiny:将函数优化为等值

RShiny: Optimize Function to Equal Value

我正在探索 RShiny 中的优化,并根据我发现的另一个示例制作了以下示例:

library(shiny)
#library(optimx)


fr <- function(x) {   
   x1 <- x[1]
   x2 <- x[2]
   2*(x[1]-1)^2 + 5*(x[2]-3)^2 + 3 
  # 100 * (x2 - x1 * x1)^2 + (1 - x1)^2
  #x*x
}




ui <- fluidPage(
  titlePanel("Values"),
  
  sidebarLayout(
    sidebarPanel(
      sliderInput("range", 
                  label = "Choose two Values:",
                  min = -5, max = 5, value = c(-5, 5))
      
    ),
    mainPanel(
      textOutput("optim_out"),
      textOutput("optim_out_b")
    )
  )
)

# Define server logic required to draw a histogram
server <- function(input, output) {
  out <- reactive(optim(c(input$range[1], input$range[2]), fr))
  output$optim_out_b <- renderText(paste0("Par: ", out()$par[1], ", ", out()$par[2], " Value: ", out()$value, " Convergance: ", out()$convergence))
}

# Run the application 
shinyApp(ui = ui, server = server)

当代码为运行时,x1变成1x2变成3。我的问题是我可以优化 function 中的公式,我可以将公式设置为等于一个值,然后进行优化。例如,有没有办法做到:

2*(x[1]-1)^2 + 5*(x[2]-3)^2 + 3 = 172

并优化函数,使 x1x2 的值尽可能产生 172 或最接近 172 的值?

我厌倦了将 = 172 添加到我的函数中,但它不起作用,这只是我想做的事情的一个例子。

  1. 即使你打算使用 shiny,问题本身与它无关,shiny 应该被排除在问题之外,不应该是满足问题最少的要求的标签。问题中也没有使用 optimx,而是出现在库语句中。

  2. 两个变量和一个方程不会有唯一解,但如果您想要任何解,请尝试最小化 fr 和 172 之间的平方差。不同的起始值可能会产生不同的解。

代码--

optim(c(1, 1), function(x) (fr(x) - 172)^2)

给予:

$par
[1]  4.025171 -2.489776

$value
[1] 7.184557e-05

$counts
function gradient 
      49       NA 

$convergence
[1] 0

$message
NULL