【问题标题】:Increasing optimization level results in errors提高优化级别会导致错误
【发布时间】:2019-11-25 08:06:36
【问题描述】:

这是一个简单的模型,它要求一个数组的所有元素都等于另一个数组的元素:

int: n = 3;
set of int: N = 1..n;
array[N, N] of var bool: P1 = [|true, false, false|
                          false, true, false|
                          false, false, false|];
array[N, N] of var bool: P2;

% constraint forall (x, y in N) (if P1[x,y] then P2[x,y] else true endif);

% constraint forall (x, y in N) (P1[x,y] == P2[x,y]);

constraint forall (x, y in N) (P1[x,y] <-> P2[x,y]);

solve satisfy;

当我使用优化级别 -O0 或 -O1 运行它时,一切正常,但是当我切换到更高的优化级别时,我会遇到一些此类错误:

错误:未定义类型 bool X_INTRODUCED_0_ 的标识符在第 1 行。 10

如您所见,我尝试了很多方法。在这样一个简单的程序中,什么可能导致问题?

即使在最简单的情况下也会发生这种情况,数组中只有一个决策变量:

array[1..1] of bool: n = [true];
array[1..1] of var bool: k;

constraint n[1] == k[1];

solve satisfy;

【问题讨论】:

    标签: minizinc


    【解决方案1】:

    这实际上似乎与this one 是同一个问题。它可能看起来不一样,但因为优化阶段似乎正在删除尚未标记为输出一部分的标识符。该问题应该会在下一个 MiniZinc 版本中得到解决。

    【讨论】:

    • 你是否知道这个 bug 是从哪个版本的 Minizinc 引入的?
    • 这个问题是通过引入隐含链折叠引入的,它依赖于知道输出变量。这是在 MiniZinc 版本 2.3.0 中引入的。计划在下周发布包含该修复程序的版本
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-07
    • 2017-07-14
    • 1970-01-01
    • 2014-01-12
    • 2011-06-15
    • 1970-01-01
    • 2022-11-10
    相关资源
    最近更新 更多