【问题标题】:Display time differs from actual solving time taken in Minizinc model显示时间与 Minizinc 模型中的实际求解时间不同
【发布时间】:2018-02-22 04:30:41
【问题描述】:

我编写了一个大型 minizinc 模型,其中包括带有 int_search 语句的 var 变量,以便正确排序。它包含输出语句,其中我使用 fix(var variables) 语句来输出变量值,它包含一些使用内置函数 sum、bool2int 等的函数。 现在,当我运行模型时,它会在很长一段时间后(例如 5-6 分钟)显示在屏幕上,但运行时/求解时间(默认情况下求解器的打印信息)仅显示 20 秒。 为什么会发生这种奇怪的事情?是不是因为输出语句也很耗时?但是那个时候变数就固定了,那为什么呢?

【问题讨论】:

    标签: minizinc gecode


    【解决方案1】:

    额外的时间可能是由于过程中的第一步:即将 MiniZinc (.mzn) 文件转换为 FlatZinc (.fzn);这是“扁平化步骤”。求解器显示的时间是从它开始读取 FlatZinc 文件开始。

    如您在此处所见,大型模型可能需要相当长的时间才能展平。

    【讨论】:

    • 谢谢,但有什么特别的方法可以减少这种情况吗?因为我在那里浪费了很多时间,几乎解决了 15 次。我的模型还包含大量注释,这也有助于在展平时花费大量时间?
    • @RajatGupta,展平时间很大程度上取决于您的模型和目标求解器库。通常是使用 linear 库的求解器需要花费大量时间,例如 Gurobi、CBC 或 CPLEX。
    • @RajatGupta,为了减少展平时间,注释不会产生影响。它是变量、约束和具体化水平的数量。您可以尝试减少这种情况或尝试使用--no-optimise 标志。这可能会导致更差的 Flatzinc,但应该会缩短展平时间。如果您多次运行同一个实例,您可以单独运行mzn2fzn 并保护平面模型。
    • 嘿!我已经单独尝试了这些命令,mzn2fzn 但它需要将近 2-3 秒才能完成。但是当我尝试使用 fzn-gecode 传递 .ozn 文件或不传递 .ozn 文件时。使用传递的 .ozn 文件运行需要很长时间。所以罪魁祸首是 .ozn 文件。这怎么可能发生?我认为输出参数变量(解决后得到修复的 var 变量)永远不会成为问题。它内部也有函数重载,以及内置的 sum 函数。我仍然无法找到导致输出以如此巨大的速度减慢的原因。
    • 传递 .ozn 文件意味着我正在使用 solns2out,这是主要时间。但无法弄清楚原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多