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
。
当我以这种方式定义约束时
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
。