Я пытаюсь написать код CPLEX OPL на примере (из систем управления) типичной проблемы MPC (Model Predictive Control). Как описано здесь:
С переменными оптимизации:
Со следующими параметрами:
Я попытался написать это, но я застрял на итерации массива переменной x (переменная состояния), как указано в ограничении задачи оптимизации. Код, который я до сих пор написал для OPL CPLEX, имеет следующий вид: (Файл модели имеет расширение .mod на платформе OPL)
//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 )
ct1:
A[s][s]*State[s] + B[s][u]*Input[u] == State[s+1];
}
И файл данных, который я использую, имеет вид: (файл данных платформы OPL с расширением .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]];
Поэтому мне нужна любезная помощь для решения этой системы, так как я не могу решить вопрос итерации в переменной переменной состояния в ограничении данной задачи.
Мы будем очень признательны за вашу помощь, так как я застрял на этом на несколько недель.