Python 矿浆终止标准:fracgap(COIN-CMD)

Python 矿浆终止标准:fracgap(COIN-CMD),python,excel,linear-programming,solver,pulp,Python,Excel,Linear Programming,Solver,Pulp,我正在运行一个优化问题,无法找到最佳解决方案(10分钟内)。我认为这是因为不断发现微小的改进。我想缩短这个过程,以免在太少的改进上花费太多时间 我正在使用COIN-CMD类(通过Excel中的SolverStudio): 一种可能是设定一个时间限制,但缺点是我不知道解决方案的改进有多大。因此,这应该是一个最终的战略 是否有其他方法来终止求解过程,例如,当找到足够好的解决方案时?或者,是否有一个地方可以很好地记录参数及其工作情况?我注意到这在这方面有点微不足道 经过一番挖掘,我发现了三种不同的方法

我正在运行一个优化问题,无法找到最佳解决方案(10分钟内)。我认为这是因为不断发现微小的改进。我想缩短这个过程,以免在太少的改进上花费太多时间

我正在使用COIN-CMD类(通过Excel中的SolverStudio):

一种可能是设定一个时间限制,但缺点是我不知道解决方案的改进有多大。因此,这应该是一个最终的战略


是否有其他方法来终止求解过程,例如,当找到足够好的解决方案时?或者,是否有一个地方可以很好地记录参数及其工作情况?我注意到这在这方面有点微不足道

经过一番挖掘,我发现了三种不同的方法来指定CBC中的间隙(用C++编程):

我猜,使用
setAllowableGap
可以设置一个绝对值,只要已知解和可能的最佳解之间的差距小于该值,求解过程就会终止。 使用
setAllowablePercentageGap
时,间隙应小于指定的百分比(例如,5%),而使用
setAllowableFractionGap
时,间隙似乎应小于一个分数(例如,0.05)。不过,我不确定可能的最佳解决方案是什么,或者如何计算。如果有人能在这方面进行扩展,那就太好了


在纸浆中,只能指定
fracgap
参数

经过一番挖掘,我发现了三种不同的方法来指定CBC中的间隙(用C++编程):

我猜,使用
setAllowableGap
可以设置一个绝对值,只要已知解和可能的最佳解之间的差距小于该值,求解过程就会终止。 使用
setAllowablePercentageGap
时,间隙应小于指定的百分比(例如,5%),而使用
setAllowableFractionGap
时,间隙似乎应小于一个分数(例如,0.05)。不过,我不确定可能的最佳解决方案是什么,或者如何计算。如果有人能在这方面进行扩展,那就太好了


在纸浆中,只能指定
fracgap
参数

您提到的替代方案有点可怕,因为一个改进的价值并不能说明总体上的进一步改进(尤其是对于MIPs)。这意味着,在解算器能够轻松找到更好的解决方案之前,您需要停止,或者您需要将其变得更复杂(n_non_改进、运行平均值和co)。我认为大多数解算师(包括商业解算师)都不支持这种行为。恐怕您必须坚持TimeLimit/maxSeconds和MIPGap/fracGap(相对或绝对)。旁注:如果你在做研究:你可以获得Gurobi@sascha,谢谢你的快速回复。你知道我在哪里可以读到关于MIPGaps和fracgaps的内容吗?因为pulp只是将这些选项传递给CBC,你应该从CBC的文档开始。它们不是很好,但有些东西你可以从中学习。也许你也需要通过挖掘纸浆的来源来了解这个映射是如何完成的。@sascha非常感谢你。我一定要看一看。我重新措辞了这个问题,只是要求有时间限制的替代方案。如果你愿意回答,我就接受:)你要做的是什么任务还不太清楚。但我经常结合时间限制和mip差距。当达到mip间隙或达到时间限制时,解算器将结束。当然有必要读出状态。您甚至可以读取获得的mip间隙,以进一步决定如何处理此运行(拒绝、使用不同的种子和co重做)。可悲的是,我不能提供太多关于纸浆和cbc的信息,因为我更像是一个gurobi用户(你可以免费在大学工作中使用)。时间限制和frac差距都应该有效,尽管我不确定如何读取其他状态信息您提到的替代方案有点可怕,因为一项改进的价值并不能说明总体上的进一步改进(尤其是MIPs)。这意味着,在解算器能够轻松找到更好的解决方案之前,您需要停止,或者您需要将其变得更复杂(n_non_改进、运行平均值和co)。我认为大多数解算师(包括商业解算师)都不支持这种行为。恐怕您必须坚持TimeLimit/maxSeconds和MIPGap/fracGap(相对或绝对)。旁注:如果你在做研究:你可以获得Gurobi@sascha,谢谢你的快速回复。你知道我在哪里可以读到关于MIPGaps和fracgaps的内容吗?因为pulp只是将这些选项传递给CBC,你应该从CBC的文档开始。它们不是很好,但有些东西你可以从中学习。也许你也需要通过挖掘纸浆的来源来了解这个映射是如何完成的。@sascha非常感谢你。我一定要看一看。我重新措辞了这个问题,只是要求有时间限制的替代方案。如果你愿意回答,我就接受:)你要做的是什么任务还不太清楚。但我经常结合时间限制和mip差距。当达到mip间隙或达到时间限制时,解算器将结束。当然有必要读出状态。您甚至可以读取获得的mip间隙,以进一步决定如何处理此运行(拒绝、使用不同的种子和co重做)。可悲的是,我不能提供太多关于纸浆和cbc的信息,因为我更像是一个gurobi用户(你可以免费在大学工作中使用)。时间限制和压裂间隙都应该有效,尽管我不确定如何读取CBC内部的其他状态信息。您可能需要一些可以在
plup
中指定的内容。除非你的目标接近于零(在这种情况下,相对g
class pulp.solvers.COIN_CMD(path=None, keepFiles=0, mip=1, msg=0, cuts=None, presolve=None, dual=None, strong=None, options=[], fracGap=None, maxSeconds=None, threads=None)
bool setAllowableGap(double value)
bool setAllowablePercentageGap(double value)
bool setAllowableFractionGap(double value)