You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何声明索引关联特定定义域的MiniZinc变量数组?

解决方案

在MiniZinc中,直接在数组类型声明里引用i是无效的,因为此时i未绑定到数组索引。你可以通过以下两种方式将数组索引与变量定义域关联:

方法1:数组推导式(推荐)

在数组声明时通过推导式为每个元素指定对应定义域:

int: n;
array[1..2*n+1] of var int: x = [var min(i-n, 0)..max(i-n, 0) | i in 1..2*n+1];

这里的| i in 1..2*n+1会遍历数组的每个索引i,为x[i]生成匹配的定义域区间。

方法2:forall约束

先声明数组,再用约束逐个限制元素范围:

int: n;
array[1..2*n+1] of var int: x;
constraint forall(i in 1..2*n+1) (
    x[i] in min(i-n, 0)..max(i-n, 0)
);

这种方式更直观,适合需要额外添加其他约束的场景。

验证示例(n=3)

当n=3时,两种写法都会生成你需要的变量定义域:

  • x[1] ∈ -3..0
  • x[2] ∈ -2..0
  • x[3] ∈ -1..0
  • x[4] ∈ 0..0
  • x[5] ∈ 0..1
  • x[6] ∈ 0..2
  • x[7] ∈ 0..3

内容的提问来源于stack exchange,提问作者Nicolas Beldiceanu

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.15 22:45:57