scip - 如何在每个节点收集scip提供的分支规则的分支过程数据
问题描述
我想做的事:
我想观察scip提供的每个节点的分支规则(即strang branch和relpscost)的过程数据,包括LPSolution、分支深度、分支分数、下界等。因此,我需要收集由 scip 提供的规则创建的分支数据。
我做了什么并尝试过:
我想我可以使用如何添加分支规则中描述的方法,我已阅读此页面并尝试使用 c++ 进行编码,过程见下文。当我调试这个程序时,我发现我可以找到 relpscost 规则,并且
Exception: EXC_BAD_ACCESS (code=1, address=0x28)
在执行该函数后显示的错误branchexeclp(scip, relpscostRule, true, result);
static
SCIP_DECL_BRANCHEXECLP(collectBranchProcessData)
{
SCIP_BRANCHRULE* relpscostRule = SCIPfindBranchrule(scip, "relpscost");
SCIP_RETCODE (*branchexeclp)(SCIP* scip, SCIP_BRANCHRULE* branchrule, SCIP_Bool allowaddcons, SCIP_RESULT* result);
branchexeclp(scip, relpscostRule, true, result);
// TODO: get the data that I want to observe by calling the SCIP APIs.
*result = SCIP_BRANCHED;
return SCIP_OKAY;
}
- 如何收集我想观察的数据?
解决方案
对于可靠性分支,您实际上可以SCIPexecRelpscostBranching
在不执行分支的情况下调用甚至运行它(这样就可以计算出您想要的所有东西)。
然后你可以通过调用不同的方法得到你想要的统计数据(比如SCIPvarGetLPSol
得到一个变量的LP解SCIPgetVarPseudocostScore
,等等)
如果有具体的方法找不到,请说明。
推荐阅读
- java - 基于基础的 LDAP Active Directory 组搜索不向下钻取以包含多个 OU
- excel - 调整命名范围的大小会删除范围的名称结构
- apache-nifi - 在 Apache NiFi 处理器中有没有办法获取主机的 fqdn 和 IP 地址?
- php - 复选框 htmlentities() 期望参数 1 是字符串,给定数组
- ruby-on-rails - Rails 凭证返回 nil
- php - 如何在变量中使用“if”和“else”
- c# - 如何使我的控制台应用程序在不同的数据库中更可重用?
- android - 学习适用于 android 的 MVx 架构的资源
- sql - SQL Server - 每季度不同客户的运行计数
- python - Keras 从 (None,None,None,512) 重塑为 (None,None,None,None,512)?