簡體   English   中英

迭代數組中的元素

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM