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
变成1
,x2
变成3
。我的问题是我可以优化 function
中的公式,我可以将公式设置为等于一个值,然后进行优化。例如,有没有办法做到:
2*(x[1]-1)^2 + 5*(x[2]-3)^2 + 3 = 172
并优化函数,使 x1
和 x2
的值尽可能产生 172 或最接近 172 的值?
我厌倦了将 = 172
添加到我的函数中,但它不起作用,这只是我想做的事情的一个例子。
即使你打算使用 shiny,问题本身与它无关,shiny 应该被排除在问题之外,不应该是满足问题最少的要求的标签。问题中也没有使用 optimx,而是出现在库语句中。
两个变量和一个方程不会有唯一解,但如果您想要任何解,请尝试最小化 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
我正在探索 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
变成1
,x2
变成3
。我的问题是我可以优化 function
中的公式,我可以将公式设置为等于一个值,然后进行优化。例如,有没有办法做到:
2*(x[1]-1)^2 + 5*(x[2]-3)^2 + 3 = 172
并优化函数,使 x1
和 x2
的值尽可能产生 172 或最接近 172 的值?
我厌倦了将 = 172
添加到我的函数中,但它不起作用,这只是我想做的事情的一个例子。
即使你打算使用 shiny,问题本身与它无关,shiny 应该被排除在问题之外,不应该是满足问题最少的要求的标签。问题中也没有使用 optimx,而是出现在库语句中。
两个变量和一个方程不会有唯一解,但如果您想要任何解,请尝试最小化 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