【问题标题】:How is it possible that in the same version of Julia, an optimizing problem has different solutions?在同一个版本的 Julia 中,一个优化问题怎么可能有不同的解决方案?
【发布时间】:2019-08-05 12:26:03
【问题描述】:

在两台不同的计算机上运行相同版本的 Julia 中的优化代码是否有可能给出不同的解决方案? 例如在笔记本电脑上运行了一段代码,得到了这两种解决方案

[712.0, 645.0], [1515.39, 322.625], "R", "V")
 ([1515.4, 322.5], [1683.3, 0.0], "R", "V")

代码在更强大的 PC 上运行,但解决方案如下:


 ([712.0, 645.0], [NaN, 322.625], "R", "V")
([1515.4, 322.5], [1683.3, 0.0], "R", "V")

请你帮我看看这怎么可能,以及如何解决这个问题。在这段代码中,NaN 是如何发生的?有什么方法可以让第一个解决方案在 pc 中也获得收益? 感谢您的热心帮助。

【问题讨论】:

  • 这里有很多可能的答案,如果不了解更多有关您在做什么的信息,就不可能知道是哪种情况。一些优化库每次都从随机位置开始。其他人在每次迭代时使用数据的随机子集。您的停止条件可能是基于时间的,因此较快的 PC 能够使其步数小到除以零。或者更多...
  • 代码太长了,我不能放在这里。但是库是相同的JuMP,CPLEX,CPUTime,Plots。请你帮我如何删除它?是否可以类似地设置两台计算机的精度?
  • 确实应该有可能,但是这里没有足够的信息来形成任何有用的答案。鉴于您使用的是 CPLEX,您可以调查手动设置其众多基于时间和/或热启动标志之一。 discourse.julialang.org/t/…

标签: julia cplex julia-jump


【解决方案1】:

是的,使用 CPLEX 可以在不同的计算机上获得不同的解决方案。

具体来说,在determinism and the timing interface 的文档中,它说:

系统时间(例如以秒为单位的 CPU 时间或挂钟时间 以秒为单位)不是确定性的;换句话说,它可能会有所不同 从一个运行到另一个。例如,其他应用程序的负载 在系统上可能会影响性能,从而影响系统时间。 因此,即使在相同的时间限制下,连续两次运行也可能 产生不确定的结果。

如果您想提高获得确定性结果的机会,可以设置deterministic time limit。但是,鉴于您在两台不同的计算机上运行(具有不同的规格?使用不同的操作系统?),这可能还不够。

编辑:

cmets 中的链接显示了如何使用 JuMP 设置 CPLEX 参数。例如,可以设置确定性时间限制,如下所示:

m = Model(with_optimizer(CPLEX.Optimizer, CPX_PARAM_DETTILIM=1000))

【讨论】:

  • 但我找不到任何可以在 Julia 中使用的东西。你能帮我在哪里为朱莉娅找到它吗?谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-13
  • 1970-01-01
  • 2017-07-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多