如何使用java choco3 API获取IntVar中元素的索引?

如何使用java choco3 API获取IntVar中元素的索引?,java,constraint-programming,Java,Constraint Programming,我正在努力解决会议安排问题。我已经定义了一个矩阵IntVar[][]agent\u cal,它是安排会议的每个代理的日历。我的初始化如下所示: agent_cal=VF.boundedMatrix( "agents' calendar", mAgents, timeslots,

我正在努力解决会议安排问题。我已经定义了一个矩阵
IntVar[][]agent\u cal
,它是安排会议的每个代理的日历。我的初始化如下所示:

agent_cal=VF.boundedMatrix( "agents' calendar",
                                       mAgents,
                                     timeslots,
                                            -1,
                                   nMeetings-1,
                                       solver); 
其中给出了mAgents、时隙和nMeeting,而solver是solver的一个实例。我想对每次会议都施加限制;所有参加会议的代理必须在同一时间段将其列入其日历中。例如,如果
agent0
agent1
参加会议
m
,则出现m的
agent\u cal[agent0]
的索引必须等于出现m的
agent\u cal[agent1]
的索引

为了用choco表达这一点,我编写了以下代码:

for (int m = 0; m < nMeetings; m++) {
    ArrayList<Integer> as = meet_attend.get(m);
    for (int a = 0; a < as.size() - 2; a++) {
        solver.post(ICF.arithm(
                    (Arrays.asList(agent_cal[a])).indexOf(m),
                                "=",
                    (Arrays.asList(agent_cal[a+1])).indexOf(m)));
    }
}
如果您有任何关于如何解决此问题的想法,我们将不胜感激。谢谢

算术约束可以将一个变量和一个整数、两个变量连接在一起,或者将两个变量和一个整数连接在一起。 在您的例子中,
(Arrays.asList(agent_-cal[a])).indexOf(m)
返回一个整数,
(Arrays.asList(agent_-cal[a+1]).indexOf(m)
,并且没有API来表示两个整数必须相等,因为它们不是变量。 我相信您希望获得
agent\u cal
变量矩阵的第m列,并将变量
a
a+1
链接到同一列中。 如果是,您可以这样做:

import org.chocosolver.util.tools.ArrayUtils;
//....
对于(int m=0;m
  • [passwords]相关文章推荐