我正在尝试转换一个使用Fico解决程序的线程应用程序,让它与OpenMP同时解决几个问题。我使用的许可方法仅限于一个进程,所以多线程程序应该在理论上起作用。
对于每个线程,我需要程序来:
但是,我仍然会得到如下的分段错误和错误:
Mosel: E-84: File `mem:0x7f5c9a0ca640/2000/0x7f5c9a0ca5c0': model cannot be renamed.
Mosel: E-83: Bim file `mem:0x7f5c9a0ca640/2000/0x7f5c9a0ca5c0' cannot be loaded.
例如,我以此示例代码为例。
for(int i = 0; i < 100; i++)
,它工作,单线程。#pragma omp parallel for
进行Paralelize,就会出现“模型不能重命名”的错误。#pragma omp critical
中添加一个parallel for
(用于测试目的),如下所示,它可以工作。 int main(){
#pragma omp parallel for
for (int i = 0; i < 100; i++){
#pragma omp critical
{
... variables and code ...
} // end critical
} // end for
}
我无法得到任何样本后,使他们多线程,所以这似乎是一个解决程序,许可证或我使用它的方式的限制。我用的是狗牌。
我知道Xpress对多线程MIP搜索单个问题有一定的支持,但我对并发单线程搜索感兴趣。
发布于 2021-12-07 11:03:29
我怀疑这是与讨论的这里相同的问题。在那次讨论中,结果是在一个循环中使用XPRMloadmod()
来加载每个迭代模型。使用错误的参数调用该函数,会导致同名的不同模型,从而导致重命名模型的错误。
为了实现这一点,必须使用内部名称为XPRMloadmod()
的"*"
调用这里,请参阅参考文档这里。
代码应该如下所示(为简洁而省略的错误检查):
XPRMinit();
#pragma omp parallel for
for (int k = 0; k < 20; k++){
XPRMmodel mod;
int result;
mod=XPRMloadmod("burglar4.bim", "*");
XPRMrunmod(mod, &result, NULL);
}
当然,将错误检查添加到代码中,这样您就不会最终使用没有正确加载的模型,等等。
https://stackoverflow.com/questions/70245002
复制相似问题