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}

Я имею в виду, есть ли способ напрямую использовать значения различных элементов набора?


person Mahraz    schedule 03.03.2016    source источник


Ответы (1)


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

или замените все вхождения p в теле ограничения на 1.

person vitaut    schedule 03.03.2016
comment
Конечно. Не забудьте принять ответ, если он решит вашу проблему =). - person vitaut; 04.03.2016
comment
есть ли способ поработать над второй частью моего вопроса? Я имею в виду, что теперь я определяю время параметра точно так же, как и мой шаг набора, чтобы иметь возможность читать его как время [p] ... есть ли способ, которым он может читать набор напрямую - person Mahraz; 04.03.2016
comment
Я обновил ответ, пытаясь ответить и на вторую часть вашего вопроса. - person vitaut; 04.03.2016