Minizinc:具有共享索引的部分搜索策略

问题描述

给定 3 个相同长度的向量变量(假设为 A、B 和 C),Minizinc 是否有办法在其中一个(假设为 B)上应用搜索策略,并在 B 的每个变量上实例化,搜索到 A 和 C 中相同位置的变量?

例如:A =[a1,a2,a3],B=[b1,b2,b3],C=[c1,c2,c3]

我想要这样的搜索

  1. 使用某些条件搜索 B(例如:首先失败,以确保我们没有按顺序进行)
  2. 找到下一个要赋值的变量 (b2)
  3. 为 a2 和 c2 赋值(b2 的相同位置/相同索引)
  4. 继续搜索 B 等...

解决方法

一般而言,MiniZinc 不支持复杂的搜索启发式算法。但是,您对搜索的描述可能接近于优先搜索:为 Chuffed 求解器发布的搜索机制。 您可以在以下研讨会论文中找到对优先搜索的描述:https://ozgurakgun.github.io/ModRef2017/files/ModRef2017_PrioritySearchWithMiniZinc.pdf