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

AMPL : defining two condition in one constraint

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

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}

我的意思是有什么方法可以直接使用集合中不同元素的值吗?

在 AMPL 中,与在代数符号中一样,"such that" 子句应位于索引表达式的末尾:

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 替换为 1