0

我有一个形式为 A^n*b =e= c 的方程,其中 A 是矩阵,b & c 是列向量。

n 是我的模型的固定数字,由常数确定。它很可能有数百个,并且会针对不同的解决方案进行更改。

A 是变量矩阵,b & c 是常数。

如何在游戏中制定 A^n*b =e= c?

可选:导致我这样做的模型是,我有一个带有连接矩阵 con(x,x2) 的图,表示当 x 和 x2 连接时 x 和 x2 之间的连接性。我想计算2个任意节点之间的连接,2个节点x到x2之间的连接是从x到x2的所有路径的连接之和。一条路径的连通性是该路径上所有连接的乘积。有没有更聪明的方法来制定这个约束,这样我就不必做矩阵求幂了?

A 不是对称的或可逆的,而是半正定的。

4

1 回答 1

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所以您必须定义一个x2GAMS 将其解释为与x您的模型中相同的集合。

然后,声明nb作为参数,你可以这样做:

Parameter 
 n /200/
 c /100/;
Parameter b(x)
/
x1 3
x2 43
...
x100 23
/;

注意parametersvariables具有多个值(即向量或矩阵)必须在先前set在 GAMS 中定义的值上定义。这就是为什么b在 set 上定义的原因x,想想x你的向量/矩阵的类似索引。

遗嘱声明A的形式为:

Variable A(x,x2);

现在您可以使用这些集合、参数和变量来定义您的方程:

eq(x,x2) .. power(A(x,x2),n) * B(x2) =e=  c;

当然,您仍然需要选择一个合适的求解器 (NLP) 并定义一个目标函数,但这就是您为想要的方程和变量建模的方式。

于 2017-01-22T13:48:14.590 回答