ROI 包没有为不受约束的 QP 提供解决方案(qpoases 求解器)
ROI package doesn't give a solution (qpoases solver) for an unconstrained QP
我正在设置一个简单的 QP 来测试 ROI R 包。但是,该包在不受约束时无法对简单的玩具问题给出错误的解决方案。
示例,
# Maximize -1/2 x^2 + x, no constraints
> x <- OP(Q_objective(as.matrix(-1), 1), maximum = TRUE, bounds = V_bound(lb = -Inf, ub = Inf, nobj = 1))
> x
> ROI Optimization Problem:
Maximize a quadratic objective function of length 1 with
- 1 continuous objective variable,
subject to
- 0 constraints
- 1 lower and 0 upper non-standard variable bounds.
看起来不错。但是当我解决问题时,
> sol <- ROI_solve(x, solver = 'qpoases')
> sol
No optimal solution found.
The solver message was: Initialisation failed! QP could not be solved!
The objective value is: 0.000000e+00
> sol$solution
[1] 0
> sol$objval
[1] 0
> sol$status
$code
[1] 1
$msg
solver qpoases
code 36
symbol RET_INIT_FAILED_HOTSTART
message Initialisation failed! QP could not be solved!
roi_code 1
真奇怪。在相关说明中,当我使用 quadprog 求解器时,我能够获得不受约束的解决方案 (= 1),但是由于其他原因我不得不从使用 quadprog 切换到 qpoases。
非常感谢任何帮助。
编辑:
奇怪的是这有效,
> ROI_solve(OP(Q_objective(as.matrix(-1), 1), maximum = TRUE), solver = 'qpoases')
No optimal solution found.
The solver message was: Initialisation failed! QP could not be solved!
The objective value is: 0.000000e+00
> ROI_solve(OP(Q_objective(as.matrix(1), -1), maximum = FALSE), solver = 'qpoases')
Optimal solution found.
The objective value is: -5.000000e-01
这种不同的结果是由于参数 hessian_type
中设置的不同值造成的,如果参数 hessian_type
不是由 hessian_type
提供的
用户 ROI.plugin.qpoases 选择 hessian_type
。并且由于
在为它选择的第一个示例选择粗麻布类型时出现错误
对于第一个示例 hessian_type = 6
(未知),对于第二个
正确的 hessian_type = 1
身份。
x1 <- OP(Q_objective(as.matrix(-1), 1), maximum = TRUE, bounds = NULL)
s1 <- ROI_solve(x1, solver = 'qpoases', hessian_type = 1L)
solution(s1)
x1 <- OP(Q_objective(as.matrix(-1), 1), maximum = TRUE, bounds = NULL)
s1 <- ROI_solve(x1, solver = 'qpoases', hessian_type = 6L)
solution(s1)
这个在新版本中已经修复,新版本正在去往CRAN的路上。
我正在设置一个简单的 QP 来测试 ROI R 包。但是,该包在不受约束时无法对简单的玩具问题给出错误的解决方案。
示例,
# Maximize -1/2 x^2 + x, no constraints
> x <- OP(Q_objective(as.matrix(-1), 1), maximum = TRUE, bounds = V_bound(lb = -Inf, ub = Inf, nobj = 1))
> x
> ROI Optimization Problem:
Maximize a quadratic objective function of length 1 with
- 1 continuous objective variable,
subject to
- 0 constraints
- 1 lower and 0 upper non-standard variable bounds.
看起来不错。但是当我解决问题时,
> sol <- ROI_solve(x, solver = 'qpoases')
> sol
No optimal solution found.
The solver message was: Initialisation failed! QP could not be solved!
The objective value is: 0.000000e+00
> sol$solution
[1] 0
> sol$objval
[1] 0
> sol$status
$code
[1] 1
$msg
solver qpoases
code 36
symbol RET_INIT_FAILED_HOTSTART
message Initialisation failed! QP could not be solved!
roi_code 1
真奇怪。在相关说明中,当我使用 quadprog 求解器时,我能够获得不受约束的解决方案 (= 1),但是由于其他原因我不得不从使用 quadprog 切换到 qpoases。
非常感谢任何帮助。
编辑:
奇怪的是这有效,
> ROI_solve(OP(Q_objective(as.matrix(-1), 1), maximum = TRUE), solver = 'qpoases')
No optimal solution found.
The solver message was: Initialisation failed! QP could not be solved!
The objective value is: 0.000000e+00
> ROI_solve(OP(Q_objective(as.matrix(1), -1), maximum = FALSE), solver = 'qpoases')
Optimal solution found.
The objective value is: -5.000000e-01
这种不同的结果是由于参数 hessian_type
中设置的不同值造成的,如果参数 hessian_type
不是由 hessian_type
提供的
用户 ROI.plugin.qpoases 选择 hessian_type
。并且由于
在为它选择的第一个示例选择粗麻布类型时出现错误
对于第一个示例 hessian_type = 6
(未知),对于第二个
正确的 hessian_type = 1
身份。
x1 <- OP(Q_objective(as.matrix(-1), 1), maximum = TRUE, bounds = NULL)
s1 <- ROI_solve(x1, solver = 'qpoases', hessian_type = 1L)
solution(s1)
x1 <- OP(Q_objective(as.matrix(-1), 1), maximum = TRUE, bounds = NULL)
s1 <- ROI_solve(x1, solver = 'qpoases', hessian_type = 6L)
solution(s1)
这个在新版本中已经修复,新版本正在去往CRAN的路上。