AMPL:在一个约束中定义两个条件

时间:2016-03-03 20:45:55

标签: constraints ampl

当我以这种方式定义约束时

subject to p_inj {p in Step,  k in Dest : type[k] == 2 || type[k] == 3}

它有效但我使用时:

subject to p_inj {p in Step : time[p] == 1 ,k in Dest : type[k] == 2 || type[k] == 3}

它不再起作用了。

任何人都可以解释为什么它不起作用,是否有任何方法可以以这种方式使这项工作?

还假设我的步骤是这样的:

Set Step : = 1 2 ;

有什么方法可以用这种方式告诉AMPL:

subject to p_inj {p in Step : Step[p] == 1 ,k in BUS : bus_type[k] == 2 || bus_type[k] == 3}

我的意思是有没有办法直接使用集合中不同元素的值?

1 个答案:

答案 0 :(得分:2)

在AMPL中,与代数表示法一样,“this that”子句应位于索引表达式的末尾:

self.menuButton.hidden = true

关于第二个问题,如果我理解正确,你可以做类似

的事情
subject to p_inj {p in Step, k in Dest:
                    time[p] == 1 && (type[k] == 2 || type[k] == 3)} ...

或用subject to p_inj {p in {1}, k in BUS: bus_type[k] == 2 || bus_type[k] == 3} ... 替换约束主体中出现的所有p