15 行代码教 AI 开灯关灯:用神经网络做"聪明的节能管家"
不靠规则,不写 if-else,只靠"试错 + 奖励",让 AI 学会智能控制灯光。
这就是强化学习(Reinforcement Learning) 的魅力!
💡 问题:灯,到底该什么时候开?
你家的灯还在手动开关?
或者用"有人就开,没人就关"的简单逻辑?
但现实更复杂:
- 白天有人,但阳光充足 → 不用开灯,省电!
- 深夜有人,房间很暗 → 必须开灯,体验优先!
- 没人的时候 → 灯开着就是浪费!
能不能让系统自己学会在各种情况下做出最优决策?
答案是:能!用强化学习 + 神经网络。
🤖 我们的目标:训练一个"智能灯控 AI"
它要能看懂三个信息(状态,State):
- 是否有人(红外传感器)
- 当前光照(光敏电阻)
- 现在几点(系统时钟)
然后决定一个动作(Action):
- 开灯(1) 或 关灯(0)
而它的"老师",只通过一个数字——奖励(Reward) 来告诉它:
"你刚才做得好,+1 分!" 或 "浪费电了,-0.3 分!"
久而久之,AI 就学会了省电又贴心的策略。
🧠 核心思想:用神经网络代替人工规则
传统做法:写一堆 if-else
if 有人 and 光照 < 阈值:
开灯
else:
关灯
强化学习做法:让神经网络自己学这个"阈值"和"逻辑"!
输入状态 → 神经网络 → 输出每个动作的"预期收益"(Q值) → 选收益最高的动作
这就是 Deep Q-Network(DQN) 的精髓。
💻 极简代码演示(仅 20 行核心)
import torch, torch.nn as nn, random, math
# 【神经网络:Q函数逼近器】
model = nn.Sequential(nn.Linear(3, 16), nn.ReLU(), nn.Linear(16, 2))
optimizer = torch.optim.Adam(model.parameters(), lr=0.01)
hour = random.randint(0, 23)
for step in range(2000):
# 【状态 s】= [是否有人, 光照, 时间]
time_norm = hour / 24.0
daylight = max(0, math.cos(2 * math.pi * (hour - 12) / 24))
light = min(1.0, max(0.0, daylight + random.gauss(0, 0.1)))
occupied = 1 if random.random() < (0.3 if 22<=hour or hour<6 else 0.7) else 0
s = torch.tensor([[float(occupied), light, time_norm]])
# 【动作 a】ε-贪婪策略
action = model(s).argmax().item() if random.random() > 0.1 else random.randint(0, 1)
# 【奖励 r】根据状态+动作计算
dark = light < 0.2
if occupied:
reward = 0.8 if (dark and action==1) else (-1.0 if (dark and action==0) else (-0.3 if (not dark and action==1) else 0.5))
else:
reward = -0.2 if action==1 else 1.0
# 【学习】Q-learning 更新
target_q = model(s).clone().detach()
target_q[0, action] = reward
loss = nn.MSELoss()(model(s), target_q)
optimizer.zero_grad(); loss.backward(); optimizer.step()
hour = (hour + 1) % 24
✅ 全程无标签、无监督,只靠奖励信号自我进化!
🔍 概念与代码一一对应
| RL 概念 | 代码体现 | 作用 |
|---|---|---|
| State(状态) | [occupied, light, time_norm] | 描述当前环境 |
| Action(动作) | action = 0 or 1 | 智能体的决策 |
| Reward(奖励) | reward = ... | 反馈信号,指导学习方向 |
| Policy(策略) | model(s).argmax() + ε-探索 | 如何选动作 |
| Q-Network | model = nn.Sequential(...) | 用神经网络估计 Q(s,a) |
| Learning | loss.backward() + optimizer.step() | 参数更新,越学越聪明 |
✅ 训练后,AI 学到了什么?
我们测试几个典型场景:
| 场景 | AI 决策 |
|---|---|
| 🌙 深夜(3点),有人,房间很暗 | ✅ 开灯 |
| ☀️ 正午(12点),有人,阳光充足 | ✅ 关灯(省电!) |
| 🌃 晚上(22点),无人 | ✅ 关灯 |
| 🌆 傍晚(18点),有人,光线昏暗 | ✅ 开灯 |
它没有被写死规则,却自己总结出了"合理开灯"的智慧!
🌍 这不只是玩具:真实应用场景
- 🏢 智能办公楼:自动调节照明、空调,年省电费 20%+
- 🏠 智能家居:与米家、HomeKit 集成,无感节能
- 🏫 教室/会议室:人走灯灭,人来灯亮,无需改造电路
核心都是同一个 RL 框架——只需换状态、动作、奖励!
🚀 为什么这很重要?
强化学习,是让机器具备自主决策能力的关键技术。
它不依赖人类经验写规则,而是:
- 感知环境(状态)
- 尝试行动(动作)
- 接受反馈(奖励)
- 自我优化(学习)
从一盏灯,到自动驾驶、机器人、金融交易——底层逻辑相通。
💬 结语
你不需要造出 AlphaGo,才能用上强化学习。
从一个灯开始,你就能构建真正"会思考"的智能系统。
代码虽小,思想巨大。
真正的 AI,不是更复杂的模型,而是更聪明的问题建模。
✅ 动手试试?
只需安装 PyTorch,复制上方代码,几分钟就能看到 AI 学会"聪明开灯"!