如何在 C/C++ 中从外部库调用函数
How to call function from external library in C/C++
我想找到整数线性规划的对称群。我认为跳过中有一个名为SCIPgetGeneratorsSymmetry的函数。我如何使用这个功能?
您是对的,要访问 SCIP 中的对称信息,您必须通过 C/C++SCIPgetGeneratorsSymmetry()
调用函数。请注意,您需要将 SCIP 与外部软件 bliss(否则(无法计算(混合整数(线性程序的对称性。
如果使用 C/C++ 项目设置(混合整数(线性规划,则有多种计算对称性的选项。
-
如果将"重新计算"参数设置为 FALSE,SCIP 将返回当前可用的对称信息 - 如果尚未计算对称性,SCIP 将计算对称性以允许您访问此信息。
-
如果将"重新计算"设置为 TRUE,SCIP 将丢弃可用的对称信息,并且您可以访问当前对称组的生成器。此外,您可以控制通过参数"symspecrequire"和"symspecrequirefixed"计算的对称性类型,例如,仅计算固定连续变量的二进制变量的对称性。
编辑:
如果您没有使用 C/C++ 编码的经验,并且只对打印对称组的生成器感兴趣,最简单的方法可能是按如下方式修改 SCIP 的源代码presol_symmetry.c
:
- 在
determineSymmetry()
的最开头添加两个整数参数int i
和int p
。 -
在
determineSymmetry()
内搜索调用computeSymmetryGroup()
的线路。 -
在此函数调用之后立即添加以下代码片段:
for (p = 0; p < presoldata->nperms; ++p)
{
printf("permutation %dn", p);
for (i = 0; i < presoldata->npermvars; ++i)
{
if ( TRUE )
printf("%d ", presoldata->perms[p][i]);
else
printf("%s ", SCIPvarGetName(presoldata->permvars[presoldata->perms[p][i]]));
}
printf("n");
}
- 此代码将对称组的生成器打印为变量索引列表,例如,1 2 0 是映射 0 -> 1、1 -> 2 和 2 -> 0 的排列。如果将
TRUE
更改为FALSE
,则会得到相同的列表,但变量索引将替换为它们的名称。 - 不要忘记重新编译 SCIP。
- 如果使用 SCIP 求解实例并启用了对称处理,则每当 SCIP 计算对称组时,SCIP 都会以上述格式打印生成器。如果您对原始问题的对称群感兴趣,则应使用参数设置
presolving/symbreak/addconsstiming = 0
和propagating/orbitalfixing/symcomptiming = 0
。如果您对已解决问题的对称性感到满意,请将 0 更改为 1。
相关文章:
- 如何使用对C函数和类对象的外部调用来处理C++头文件
- 从python调用openMP共享库时,未定义opnMP函数
- 有没有办法简单地从 GPU 调用多个 cpp 输出文件?
- 如何安全地从 DLL 调用返回对象
- C++编程从外部文本文件定义数组大小
- 犰狳的 print() 方法和 cout 在从 Rcpp 调用时顺序不一致
- 在结构外部调用指向函数的指针
- 如何在 C/C++ 中从外部库调用函数
- 从类C++外部调用指向成员方法的成员指针
- 从外部文件C++调用函数
- Qt的GUI线程在从外部对象调用方法时是否会在引擎盖下生成线程?
- C++如何判断static.lib是否有效,是否可从外部代码调用
- 从外部调用静态C函数
- 如何从外部文件调用C++函数
- C++:如何从外部调用父类函数
- 我可以从对象外部调用 VFunc 吗?
- 从外部使用"class::func()"调用非静态函数或构造函数
- 从外部调用封装类成员函数时不加载SFML纹理
- 使用PowerBuilder 10.0错误从DLL调用外部函数
- 通过函数指针从外部文件调用静态函数的不良做法