|
@@ -20,7 +20,6 @@ import warnings
|
|
warnings.simplefilter(action='ignore', category=FutureWarning)
|
|
warnings.simplefilter(action='ignore', category=FutureWarning)
|
|
warnings.simplefilter(action='ignore', category=UserWarning)
|
|
warnings.simplefilter(action='ignore', category=UserWarning)
|
|
|
|
|
|
-#
|
|
|
|
|
|
|
|
# Define the loss function for DeePC
|
|
# Define the loss function for DeePC
|
|
def loss_callback(u: cp.Variable, y: cp.Variable) -> Expression:
|
|
def loss_callback(u: cp.Variable, y: cp.Variable) -> Expression:
|
|
@@ -86,15 +85,15 @@ for T in T_list:
|
|
i=i+1
|
|
i=i+1
|
|
print(f'Simulating with {T} initial samples...count={i}')
|
|
print(f'Simulating with {T} initial samples...count={i}')
|
|
sys.reset()
|
|
sys.reset()
|
|
- # Generate initial data and initialize DeePC
|
|
|
|
|
|
+ # Generate initial data and initialize DeePC data : u->1000*1 y-> 1000*1
|
|
data = sys.apply_input(u = np.random.normal(size=T).reshape((T, 1)))
|
|
data = sys.apply_input(u = np.random.normal(size=T).reshape((T, 1)))
|
|
data_train = data
|
|
data_train = data
|
|
|
|
|
|
-
|
|
|
|
|
|
+ #Uf 10*987 Up 4*987 Yf 10*987 Yp 4*987 Tini=4 horizon=10
|
|
deepc = DeePC(data, Tini = T_INI, horizon = HORIZON)
|
|
deepc = DeePC(data, Tini = T_INI, horizon = HORIZON)
|
|
# deepc = DeePC(data, Tini=T_INI, horizon=HORIZON, explained_variance=.9999)
|
|
# deepc = DeePC(data, Tini=T_INI, horizon=HORIZON, explained_variance=.9999)
|
|
|
|
|
|
- # Create initial data
|
|
|
|
|
|
+ # Create initial data u:4*1 y:4*1
|
|
data_ini = Data(u = np.zeros((T_INI, 1)), y = np.zeros((T_INI, 1)))
|
|
data_ini = Data(u = np.zeros((T_INI, 1)), y = np.zeros((T_INI, 1)))
|
|
sys.reset(data_ini = data_ini)
|
|
sys.reset(data_ini = data_ini)
|
|
|
|
|
|
@@ -106,14 +105,14 @@ for T in T_list:
|
|
lambda_u = LAMBDA_U_REGULARIZER)
|
|
lambda_u = LAMBDA_U_REGULARIZER)
|
|
|
|
|
|
for idx in range(EXPERIMENT_HORIZON // s): #整除
|
|
for idx in range(EXPERIMENT_HORIZON // s): #整除
|
|
- # Solve DeePC
|
|
|
|
|
|
+ # Solve DeePC u_optimal:10*1
|
|
u_optimal, info = deepc.solve(data_ini = data_ini, warm_start=True, solver=cp.ECOS)
|
|
u_optimal, info = deepc.solve(data_ini = data_ini, warm_start=True, solver=cp.ECOS)
|
|
|
|
|
|
|
|
|
|
- # Apply optimal control input
|
|
|
|
|
|
+ # Apply optimal control input 计算出来控制量u 取第1:s行,所有列数据
|
|
_ = sys.apply_input(u = u_optimal[:s, :])
|
|
_ = sys.apply_input(u = u_optimal[:s, :])
|
|
|
|
|
|
- # Fetch last T_INI samples
|
|
|
|
|
|
+ # Fetch last T_INI samples 计算出来的u:4*1 y4*1
|
|
data_ini = sys.get_last_n_samples(T_INI)
|
|
data_ini = sys.get_last_n_samples(T_INI)
|
|
|
|
|
|
if idx % 10 == 1 :
|
|
if idx % 10 == 1 :
|