gpt4 book ai didi

precision - CPLEX 中没有输入变化很小的解

转载 作者:行者123 更新时间:2023-12-01 05:30:20 26 4
gpt4 key购买 nike

我在 C++ 中使用 CPLEX 来解决集线器位置问题,即 MIP,并且我最近发现了一组非常精确的输入,CPLEX 认为这些输入是不可行的(即 CPXMIP_INFEASIBLE),即使该问题确实可行。在 MIP 预求解期间,该问题似乎在 CPLEX 中出现分歧;通常在这一点上,问题被简化为空问题,但不在不可行输入集中。

我发现对输入数据进行几乎任何轻微的调整都可以切换 CPLEX 找到解决方案的能力。例如,将 250.242566 更改为 250.242567,或者甚至只是将每个输入值四舍五入到最接近的整数,都会给我一个完全有效的解决方案。

软化我拥有的两个松弛约束也将允许解决方案,但鉴于输入数据,不应打破这些约束。解决方案后这些约束变量的值大约为 0 但略为负,例如-0.7e-10。 (这是可疑的,因为值应该大于 0。)

到底是怎么回事?我一窍不通。我尝试调整一些与精度相关的 CPLEX 变量(即 CPX_PARAM_NUMERICALEMPHASIS、CPX_PARAM_EPOPT、CPX_PARAM_EPMRK、CPX_PARAM_EPRHS),但没有任何帮助。输入数据本身不需要太高的精度——输入中的最小值是 1.412,最大值是 1520.984907。

我很感激任何建议或建议!

更新:

我注意到在 MIP 的预求解过程中,不可行的问题与可行的问题背道而驰。

检查两个问题的 CPXgetprestat,我可以看到两个问题之间的一个显着区别是在 pcstat 向量中,一个变量无法在不可行集合中聚合(即,不可行问题中的值为 0,而可行问题中的值为 -4) .

此外,CPXgetprestat 的 ocstat 和 orstat 向量在不可行问题中各有一个非零值(可行问题没有,因为它已被简化为空问题),但我不确定如何处理这两个值。如果 orstat[0] == 7 和 ocstat[0] == 1,这是否意味着在 Presolve 之前问题的第 7 行和第 1 个变量中有些值得注意?我将如何检查这个?

我已经比较了两个问题中 CPXwriteprob 的输出,除了我将输入值更改了 0.0001 以使问题不可行之外,没有什么不同。

最佳答案

也许尝试设置 EpInt=0?所以一个整数真的是整数。

从手册复制:

值(value)观

0.0 到 0.5 之间的任何数字;默认值:1e-05。

关于precision - CPLEX 中没有输入变化很小的解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11573068/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com