[英]Iterating of elements in array
我正在嘗試在(來自控制系統)典型 MPC(模型預測控制)問題的示例上編寫 CPLEX OPL 代碼。 如上所述,這里:
使用優化變量:
使用以下參數:
我試圖寫它,但我被困在變量“x”(狀態變量)數組的迭代中,如優化問題的約束中所述。 到目前為止,我在 OPL CPLEX 上編寫的代碼如下:(OPL 平台上的 model 文件 as.mod 擴展名)
//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]];
因此,我需要幫助來解決這個系統,因為在給定問題的約束下,我無法解決 state 變量的變量中的迭代問題。
您的幫助將不勝感激,因為我已經堅持了幾個星期。
你可以把 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)];
.mod
//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)];
}
.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]
;
R = [1, 1];
作品
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.