2016-03-03 135 views
1

兩個態,當我定義我的約束這樣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} 

我的意思是有沒有辦法用不同的值一套直接的元素?

回答

2

在AMPL,如代數符號中,「這樣」的條款應在索引表達式的末尾:

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} ... 

1替換約束體的p所有出現。

+0

當然。不要忘記接受答案,如果它解決了你的問題=)。 – vitaut

+0

有沒有辦法爲我的問題的第二部分工作?我的意思是現在我定義一個param時間與我的set相同step能夠讀取它作爲時間[p] ...是否有任何方式可以直接讀取Set – Mahraz

+0

我已更新答案,試圖解決你的問題的第二部分也是。 – vitaut