3、仿真环境搭建:MATLAB/Simulink环境配置、Python与TensorFlow/PyTorch环境配置、联合仿真接口设置

好,咱们进入第三章。说实话,仿真环境搭建这事儿,看着简单,但坑是真不少。我见过太多人花了一周调环境,最后发现是版本不兼容。所以这一章,我把自己踩过的坑、积累的经验,一次性倒给你们。

3.1 MATLAB/Simulink环境配置

MATLAB/Simulink,做多能协同控制的老本行。我个人习惯用2021b以后的版本,主要是对Python接口支持得更好。

3.1.1 安装与版本选择

  • 版本建议:R2021b 或 R2023a。太老的版本,联合仿真时容易出幺蛾子。
  • 必备工具箱:Simulink、Stateflow、Simscape Electrical、Optimization Toolbox、Parallel Computing Toolbox。
  • 避坑:我曾经装了个R2019b,结果发现跟Python 3.9死活连不上。后来换了R2021b,问题迎刃而解。

3.1.2 环境变量与路径设置

装完MATLAB,第一件事是配环境变量。不然你写代码时,MATLAB找不到Python,那叫一个抓狂。

% 在MATLAB命令行中执行
setenv('PATH', [getenv('PATH') ';C:\Python39\']);
pyversion('C:\Python39\python.exe');
% 验证是否成功
py.print('Hello from Python!');

嗯,这里要注意:路径里的反斜杠要写双份,或者用正斜杠。我刚开始就因为这个折腾了半小时。

3.1.3 Simulink模型参数配置

做多能协同仿真,模型参数配置是关键。我一般这样设置:

参数项推荐值说明
Solverode45 / ode23t连续系统用ode45,刚性系统用ode23t
步长auto / 固定0.01s多能协同建议固定步长,方便联合仿真
Stop Time根据场景定一般设24h或48h,看你的调度周期

你想想看,如果步长不统一,Python那边算完了,Simulink这边还没跑完,数据就对不上了。

3.2 Python与TensorFlow/PyTorch环境配置

Python环境,说白了就是版本管理。我建议用Anaconda,省心。

3.2.1 创建虚拟环境

# 创建环境
conda create -n energy_control python=3.9
conda activate energy_control

# 安装核心库
pip install numpy pandas matplotlib scipy
pip install tensorflow==2.10.0  # 或者 pytorch
pip install gym  # 强化学习环境

为什么用Python 3.9?因为TensorFlow 2.10是最后一个支持GPU的版本,再往上就得折腾了。我有个项目,就因为用了Python 3.11,TensorFlow死活装不上,最后回退到3.9才搞定。

3.2.2 TensorFlow vs PyTorch 选择

我个人习惯:做强化学习用PyTorch,做时序预测用TensorFlow。但这不是绝对的。

  • TensorFlow:部署方便,工业界用得多。如果你要做模型导出到Simulink,TF更友好。
  • PyTorch:调试方便,学术界偏爱。我写论文时基本用PyTorch。
小技巧:两个都装也没问题。我电脑上就同时装了TF和PyTorch,用conda环境隔离,互不干扰。

3.2.3 GPU加速配置

做深度学习仿真,没GPU真不行。我建议至少配个RTX 3060以上。

# 检查GPU是否可用
import tensorflow as tf
print(tf.config.list_physical_devices('GPU'))

# PyTorch
import torch
print(torch.cuda.is_available())

如果返回False,别慌。先检查CUDA版本对不对。我曾经因为CUDA 11.8配了TF 2.12,结果不兼容,换成CUDA 11.2就好了。

3.3 联合仿真接口设置

这才是重头戏。多能协同控制,说白了就是让MATLAB和Python互相喊话。

3.3.1 MATLAB调用Python

MATLAB里直接调Python函数,非常方便。

% MATLAB代码
% 调用Python的强化学习模型
py_model = py.importlib.import_module('my_rl_model');
action = py_model.predict(state);
% 把Python的numpy数组转成MATLAB矩阵
action_mat = double(py.array.array('d', action));

嗯,这里要注意数据类型转换。Python的list和MATLAB的矩阵不是一回事,我刚开始经常忘记转换,结果报错。

3.3.2 Python调用MATLAB引擎

# Python代码
import matlab.engine
eng = matlab.engine.start_matlab()
# 调用Simulink模型
result = eng.sim('energy_system_model', 24.0)
# 获取仿真结果
power = result['power'][0]
eng.quit()

你想想看,这样就能在Python里控制Simulink跑仿真了。我做过一个项目,用Python的强化学习算法,每步都调用Simulink算一次潮流,效果很好。

3.3.3 基于文件的联合仿真

如果实时调用太慢,可以用文件交换数据。

  1. MATLAB把仿真结果写入CSV或.mat文件
  2. Python读取文件,进行计算
  3. Python把结果写回文件
  4. MATLAB读取,继续仿真
核心要点:文件读写要加锁,防止同时读写造成数据损坏。我一般用Python的filelock库。

3.3.4 基于TCP/IP的实时通信

对实时性要求高的场景,用Socket通信。

# Python服务端
import socket
s = socket.socket()
s.bind(('localhost', 12345))
s.listen(1)
conn, addr = s.accept()
while True:
    data = conn.recv(1024)
    # 处理数据
    conn.send(response)
% MATLAB客户端
t = tcpclient('localhost', 12345);
write(t, data);
response = read(t);

我曾经用这种方式,实现了Simulink和Python的实时协同仿真,延迟控制在10ms以内。

3.4 知识体系总览

下面这张图,是我自己总结的仿真环境搭建框架。你照着这个思路走,基本不会迷路。

多能协同仿真环境搭建框架 MATLAB/Simulink Python环境 联合仿真接口 版本选择:R2021b+ 工具箱:Simscape等 求解器:ode45/ode23t Python 3.9 + Anaconda TensorFlow / PyTorch GPU加速:CUDA 11.x MATLAB调用Python Python调用MATLAB引擎 文件交换 / TCP/IP通信 核心原则:版本兼容 + 数据类型转换 + 通信时序控制 避坑:先验证单点通信,再跑完整仿真
重要提醒:联合仿真最怕版本不兼容。我建议先写个简单的Hello World测试,确认MATLAB和Python能正常通信,再上复杂模型。不然出了问题,你都不知道是模型错了还是接口错了。

好了,环境搭建这块就这些。说白了就是三件事:MATLAB配好、Python配好、接口打通。你按这个流程走,基本不会出大问题。如果遇到奇怪的问题,先检查版本,再检查路径,八成能解决。

专注资料整理