2015-07-19 3 views
1

У меня есть модель GAMS, где у меня естьКак фильтровать элементы с одинаковыми индексами в GAMS?

Set i  /1*6 /; 
Alias (i,ip,il) ; 
Variables 
    x(i,ip) ; 

И я хочу, чтобы генерировать уравнения, которые действует на скалярные произведения векторов в х, за исключением продукта одного и того же вектора. Что-то вроде:

scalarProduct(i).. 
    sum(ip,x(i,ip)x(i,il)) =e= someConstant; 

Однако это не исключает продукт идентичных векторов. Как это добавить? Могу ли я сделать это с помощью долларового заявления? В любом случае, вероятно, есть несколько ошибок в этом заявлении, я не пробовал, потому что я думаю, что исключение, которое я хочу, отсутствует.

+0

Я не понимаю, что вы пытаетесь сделать с помощью 'scalarProduct'. Вы хотите умножить такие вещи, как 'x (i1, i2) * x (i1, i3)' и хотите исключить такие вещи, как 'x (i1, i2) * x (i1, i2)'? –

+1

Я почти забыл об этом. Я узнал, как это сделать в среднем, опубликует ответ сейчас – user3917718

ответ

1

так, что я хотел бы сделать это:

Sets 
i  /1*13/
ii(i,i) diagonal elements/#i:#i/
ij(i,i) all elements/#i.#i/
ij_wo_ii(i,i); 

получить все комбинации без диагональных элементов:

ij_wo_ii(i,j) = ij(i,j) - ii(i,j); 

, а затем я использую его в уравнении, как это:

equation(j,k).. 
    sum(i,x(i,j)*x(i,k)$ij_wo_ii(j,k)) =l= 1; 

Это делает нечто похожее на ортогональность, за исключением того, что произведение векторов в матрице должно быть меньше мне значение и не обязательно 0. Не знаю, есть ли для этого термин. Надеюсь, это будет полезно и для кого-то другого.

 Смежные вопросы

  • Нет связанных вопросов^_^