Optimization 数组中元素的迭代

Optimization 数组中元素的迭代,optimization,cplex,opl,ilog,cvx,Optimization,Cplex,Opl,Ilog,Cvx,我试图在一个典型的MPC(模型预测控制)问题的例子(来自控制系统)上编写一个CPLEX OPL代码。如前所述,此处: 使用优化变量: 具有以下参数: 我试着写它,但是我被困在变量“x”(状态变量)数组的迭代中,正如优化问题的约束中提到的那样。到目前为止,我在OPL CPLEX上编写的代码如下:(OPL平台上的模型文件扩展名为.mod) 我使用的数据文件如下:(扩展名为.dat的OPL平台数据文件) 因此,我需要善意的帮助来解决这个系统,因为在给定问题的约束下,我无法解决状态变量的变量中的迭

我试图在一个典型的MPC(模型预测控制)问题的例子(来自控制系统)上编写一个CPLEX OPL代码。如前所述,此处:

使用优化变量:

具有以下参数:

我试着写它,但是我被困在变量“x”(状态变量)数组的迭代中,正如优化问题的约束中提到的那样。到目前为止,我在OPL CPLEX上编写的代码如下:(OPL平台上的模型文件扩展名为.mod)

我使用的数据文件如下:(扩展名为.dat的OPL平台数据文件)

因此,我需要善意的帮助来解决这个系统,因为在给定问题的约束下,我无法解决状态变量的变量中的迭代问题

非常感谢您的善意帮助,因为我在这件事上已经坚持了好几个星期。

您可以将ct1变成

forall( s in state, u in input:s !=last( state ))
    ct1: 
      A[s][s]*State[s] + B[s][u]*Input[u] == State[next(state,s)];
国防部

.dat

工作

state = {"x","y","vx","vy"};
input = {"ux","uy"};

A = [[1, 0, 0.2, 0],
     [0, 1, 0, 0.2],
     [0, 0, 1, 0  ],
     [0, 0, 0, 1  ]];
     
B = [[0,   0],
     [0,   0],
     [0.2, 0],
     [0, 0.2]];

Q = [[1, 1, 1, 1],
     [1, 1, 1, 1],
     [1, 1, 1, 1],
     [1, 1, 1, 1]];

R = [[1, 1],
     [1, 1]];
forall( s in state, u in input:s !=last( state ))
    ct1: 
      A[s][s]*State[s] + B[s][u]*Input[u] == State[next(state,s)];
//data

{string} state = ...;
{string} input = ...;

float A[state][state] =...;
float B[state][input] =...;
float Q[state] =...;
float R[input] =...;

//variable

dvar float State[state];
dvar float Input[input];
 
 
minimize
  sum( s in state, u in input ) 
    (State[s]*Q[s]*State[s] + Input[u]*R[u]*Input[u]);
    
subject to {
 
  forall( s in state, u in input:s !=last( state ))
    ct1: 
      A[s][s]*State[s] + B[s][u]*Input[u] == State[next(state,s)];
} 
state = {"x","y","vx","vy"};
input = {"ux","uy"};

A = [[1, 0, 0.2, 0],
     [0, 1, 0, 0.2],
     [0, 0, 1, 0  ],
     [0, 0, 0, 1  ]];
     
B = [[0,   0],
     [0,   0],
     [0.2, 0],
     [0, 0.2]];

Q = [1, 1, 1, 1]
     ;
R = [1, 1];