查询R中适用于通用目标函数F_objective与二元变量的ROI求解器
适配通用非线性目标+二元变量的ROI求解器说明
是存在的,目前ROI(R优化基础设施框架)生态下有两类成熟的求解器插件可满足需求:
1. 开源选项:ROI.plugin.bonmin
- 底层对接Bonmin开源混合整数非线性规划(MINLP)求解器,原生支持任意自定义通用非线性目标函数、非线性约束,同时兼容二元、整数、连续三类变量类型
- 前置依赖:需要先在操作系统中安装Bonmin运行库,再安装R端的ROI插件包
- 基础调用示例:
# 加载ROI核心包与对应求解器插件 library(ROI) library(ROI.plugin.bonmin) # 自定义非线性目标函数,可替换为你自己的F_objective custom_F <- function(x) { x[1]^2 + 2*x[1]*x[2] + x[3]^3 # 示例函数,x1、x2为二元变量,x3为连续变量 } # 构造优化问题 op <- OP( objective = F_objective(F = custom_F, n = 3), # n为变量总数 types = c("B", "B", "C"), # B代表二元变量,C代表连续变量 bounds = V_bound(lb = c(0, 0, 0), ub = c(1, 1, 5)), # 变量上下界 maximum = FALSE # 最小化目标,求最大值则设为TRUE ) # 调用求解器求解 solve_res <- ROI_solve(op, solver = "bonmin") # 提取最优解 solution(solve_res)
2. 商业选项:ROI.plugin.gurobi
- 底层对接Gurobi商业求解器,MINLP问题求解效率远高于开源求解器,同样支持通用非线性目标、非线性约束以及二元/整数变量
- 注意:Gurobi为商业软件,学术用途可申请免费许可
- 调用逻辑和上述开源选项完全一致,仅需将
ROI_solve的solver参数改为"gurobi"即可
常见使用说明
- 如果自定义目标函数为凸函数,两款求解器都可保证输出全局最优解;如果为非凸目标,开源的Bonmin默认返回局部最优解,Gurobi可通过开启非凸全局搜索参数得到全局最优解
- 自定义的
F_objective需要支持向量化输入,无法直接对接非向量化的自定义运算逻辑 - ROI框架已经做了统一接口封装,不同求解器切换仅需修改求解器标识参数,无需调整问题定义代码
内容的提问来源于stack exchange,提问作者Alex
相关产品推荐
相关产品推荐

