You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在R中使用NLopt的nloptr接口实现内置最大化功能

在R的nloptr中启用NLopt内置最大化功能

要使用NLopt的内置符号翻转实现最大化,无需手动对目标函数取负,只需在nloptr()的opts参数列表中添加"objective" = "maximize"即可。

关键说明:

  • 目标函数直接传入原最大化目标eval_f0,无需包裹取负的匿名函数。
  • 不等式约束eval_g_ineq的要求始终是返回值≤0,与最大化/最小化模式无关,只需确保约束函数的返回值符合这一逻辑即可(无需额外翻转符号,除非原约束方向需要调整)。

修改后的示例代码

library(nloptr)

# 目标函数(直接定义为需要最大化的形式)
eval_f0 <- function( x, a, b ){
  return( - sqrt(x[2]) )
}

# 约束函数:返回值需满足 ≤0(对应原约束 x2 ≥ (a*x1 + b)^3)
eval_g0 <- function( x, a, b ) {
  return( (a*x[1] + b)^3 - x[2] )
}

# 定义参数
a <- c(2,-1)
b <- c(0, 1)

# 使用NLOPT_LN_COBYLA算法,启用内置最大化功能
nloptr(x0 = c(1.234, 5.678),
       eval_f = eval_f0,  # 直接传入原目标函数
       lb = c(-Inf, 0),
       ub = c(Inf, Inf),
       eval_g_ineq = eval_g0,  # 无需手动取负
       opts = list(
         "algorithm" = "NLOPT_LN_COBYLA",
         "objective" = "maximize"  # 启用最大化模式
       ),
       a = a,
       b = b)

内容的提问来源于stack exchange,提问作者Lukas D. Sauer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.22 15:10:08