我在形式A ^ n * b = e = c上有一个等式,其中A是矩阵,b& c是列向量。
n是由常数确定的模型的固定数。它很可能是数百个,并且可以根据不同的解决方案进行更改。
A是变量矩阵,b& c是常数。
如何在gams中制定A ^ n * b = e = c?
可选:引导我的模型是我有一个连接矩阵con(x,x2)的图形,表示x和x2连接时x和x2之间的连通性。我想计算2个任意节点之间的连接,2个节点x到x2之间的连接是从x到x2的所有路径的连通性的总和。路径的连接是路径上所有连接的产物。有没有更聪明的方法来制定这个约束,这样我就不必进行矩阵求幂?
A不是对称的或可逆的,而是半正半球。
答案 0 :(得分:0)
您需要先根据集合和参数定义数据。有关GAMS中数据结构的更多信息,请点击此链接:http://www.gams.com/latest/docs/userguides/userguide/_u_g__data_entry.html
首先定义问题的集合和参数,假设你有100个顶点,你可以像这样声明x
:
Set x /x1*x100/;
alias(x,x2);
由于您需要在矩阵中使用相同的两次,因此您必须定义alias
,以便GAMS将x2
解释为与模型中的x
相同
然后,将n
和b
声明为参数,您可以这样做:
Parameter
n /200/
c /100/;
Parameter b(x)
/
x1 3
x2 43
...
x100 23
/;
请注意,必须在GAMS中先前定义的parameters
上定义具有多个值的variables
和set
(即向量或矩阵)。这就是为b
定义集合x
的原因,将x
视为向量/矩阵的索引。
A
的声明将采用以下形式:
Variable A(x,x2);
现在您可以使用这些集合,参数和变量来定义等式:
eq(x,x2) .. power(A(x,x2),n) * B(x2) =e= c;
当然,你仍然需要选择一个合适的求解器(NLP)并定义一个目标函数,但这就是你想要的方程和变量的模型。