| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 | import numpy as npfrom scipy.optimize import minimize# 系统参数A = 0.8B = 0.5C = 1D = 0.2# 参考轨迹函数def reference_trajectory(t):    return np.sin(0.1 * t)# 生成输入数据def generate_input_data(T):    return np.random.uniform(-1, 1, T)# 系统模拟def simulate_system(u):    x = 0  # 初始状态    y = []    for i in range(len(u)):        x = A * x + B * u[i]        y.append(C * x + D * u[i])    return np.array(y)# DeePC算法实现def deepc_algorithm(T, Tini, N):    # 生成输入数据    ud = generate_input_data(T)    # 模拟系统得到输出数据    yd = simulate_system(ud)    # 划分数据    Up, Yp, Uf, Yf = partition_data(ud, yd, Tini, N)    # 构建优化问题    def objective_function(g):        u = Uf @ g        y = Yf @ g        cost = np.sum((y - reference_trajectory(np.arange(Tini, Tini + N))) ** 2) + 0.1 * np.sum(u ** 2)        return cost    # 等式约束    def equality_constraint(g):        return np.concatenate((Up @ g - ud[:Tini], Yp @ g - yd[:Tini], Uf @ g, Yf @ g))    # 初始猜测    g0 = np.zeros((T - Tini - N + 1, 1))    # 约束条件    constraints = {'type': 'eq', 'fun': equality_constraint}    # 求解优化问题    result = minimize(objective_function, g0, constraints=constraints)    # 最优输入序列    u_opt = Uf @ result.x    return u_opt# 划分数据函数def partition_data(ud, yd, Tini, N):    Up = np.zeros((Tini, T - Tini - N + 1))    Yp = np.zeros((Tini, T - Tini - N + 1))    Uf = np.zeros((N, T - Tini - N + 1))    Yf = np.zeros((N, T - Tini - N + 1))    for i in range(T - Tini - N + 1):        Up[:, i] = ud[i:i + Tini]        Yp[:, i] = yd[i:i + Tini]        Uf[:, i] = ud[i + Tini:i + Tini + N]        Yf[:, i] = yd[i + Tini:i + Tini + N]    return Up, Yp, Uf, Yf# 测试T = 100Tini = 10N = 5u_opt = deepc_algorithm(T, Tini, N)print(u_opt)
 |