我觉得我错过了一些非常简单和直接的东西。 我试图在解决 LP 后添加一个约束(使用最佳 LP 解决方案作为设计此约束的机制)。 我通过这段代码添加它

432 SCIP_CONS * cons = nullptr;
433 namebuf.str("");
434 namebuf<<"cut_3_OR1";
435  SCIP_CALL(SCIPcreateConsLinear(scip, &cons, namebuf.str().c_str(), 0, nullptr, nullptr, -SCIPinfinity(scip), 1.0,   /* <= 1.0 constraint */
436                                    true,  /* initial  <= 0 */
437                                    false, /* separate */
438                                    true,  /* enforce */
439                                    true,  /* check */
440                                    true,  /* propagate */
441                                    false, /* local */
442                                    true,  /* modifiable */
443                                    false, /* dynamic */
444                                    false, /* removable */
445                                    false  /* stickingatnode */));

代码编译良好,但在运行代码时,我收到此错误消息

[src/scip/scip_cons.c:991] ERROR: invalid SCIP stage <10>
[src/scip/cons_linear.c:17695] ERROR: Error <-8> in function call
[src/Solver.h:445] ERROR: Error <-8> in function call
make: *** [run] Error 1

当我删除此约束添加时,代码将编译并运行。

有人能告诉我出了什么问题吗?

#1楼 票数:1 已采纳

第 10 阶段是SCIP_STAGE_SOLVED 在您的问题得到最优解决后,您尝试添加约束。 您要添加的约束是否必要? 然后您可能需要实现一个约束处理程序并在处理程序的 sepalp 回调中添加您的约束。 例如,您可以查看 SCIP 文档中的 TSP 示例(它有一个 subtour-elimination 约束处理程序)

  ask by Morpheus translate from so

未解决问题?本站智能推荐:

2回复

SCIP:如何在捕获“节点不可行”事件后解决LP,

我在SCIP中有一个有效的列生成算法。 由于我在生成列时所包含的特定限制,可能会发生最后一轮定价确定根节点不可行的情况(当然是Farkas定价器)。 万一发生这种情况,我想1)放宽那些特定的限制,2)解决价格限制,3)再次开始定价列。 因此,我创建了自己的EventHandler类
1回复

使用定价器在根节点播放后,如何在 SCIP 中使用约束处理程序添加分隔符?

我最初试图实现一个分支和价格算法,并且我在实现它时基本上是成功的。 我实现了一个价格插件,一切似乎都有效。 但我想通过添加一些削减来加强这个模型。 而不是通常的分支削减价格方案,我只想在根节点添加削减(在所有列添加到根节点之后,在分支开始之前并添加更多列),而不是在分支开始后进一步削减(至少这是目前
1回复

如何在 SCIP C++ 接口中获取 MILP 约束矩阵中系数的值

我正在尝试获取 SCIP 中 MILP 约束矩阵中变量的系数。 我一直在想的是遍历变量出现的所有约束并以某种方式获得系数(我不确定如何)。 但是有没有办法通过使用任何内置函数来获取std::vector中的所有系数。
1回复

SCIP中的LP放松

我正在尝试使用SCIP命令行来解决MIP,并以CPLEX LP格式输入问题。 但是,由于存在大量变量,优化需要大量时间。 有什么方法可以计算SCIP中相同MIP的LP Relaxation解决方案? 还是以其他方式获得近似的,次优的解决方案?
1回复

在 SCIP 优化软件中释放 SCIP_SOL* 和 SCIP*

我初始化了 scip 环境如下: 我创建了一个小问题来学习 SCIP,并将解决方案存储在 我试图通过sol和scip释放内存,但我scip了分段错误。 这会导致段错误: 如果我在释放scip之前没有释放sol ,它可以正常工作并且不会发生段错误,但我确定它不正确。 我检查了 SCIP
1回复

如何使用 C++ 中的 conshdlr 获取切割次数和已添加到 SCIP 的实际切割次数

我的 scip 解决方案日志显示已添加的切割次数为 10,但是当我尝试使用SCIPgetNCuts(scip)获取数量时,我总是得到 0。 除此之外,有没有办法将所有已添加到向量中的切割?
1回复

有没有办法在 SCIP 中设置分支定界的时间限制?

我想知道是否有办法设置解决 MILP 问题所需的时间上限,但仅限于分支和边界时间。 我能够找到总运行时间的参数,但我无法找到限制分支定界时间的参数。
1回复

SCIP中的一般参数表(.zpl格式)

我正尝试使用SCIP和.zpl格式解决以下线性程序: 其中c,p和A的定义如下: 我已经想出了一种解决方法: 对于矩阵AI,将三个情况(参数a,b和g)细分为3种情况(上三角为0,对角线为i,下三角为1)。 我想知道是否只有一个参数同时包含这三种情况,是否有