Python实现ai进化

進化學習的基本循環:

  1. 初始化一群模型/參數(種群)

  2. 評估每個個體的適應度(fitness)

  3. 選擇優秀個體

  4. 交叉、變異產生下一代

  5. 重複多代,直到效果滿意

常見方向:

· 遺傳算法 GA:優化超參數、組合問題

· 進化策略 ES:優化連續參數,如神經網絡權重

· 遺傳編程 GP:進化出表達式或程序

· 神經進化 Neuroevolution:進化神經網絡權重/結構

· NEAT:同時進化網絡拓撲結構和權重

Python 常用庫:

· DEAP:通用進化算法

· PyGAD:遺傳算法

· NEAT-Python:神經進化

· EvoTorch:基於 PyTorch 的進化策略

· CMA:CMA-ES 連續優化

一個可運行的簡單例子:進化策略學線性回歸

目標:讓模型學會 y = 2x + 1。

```python

import numpy as np

np.random.seed(42)

數據

X = np.linspace(-1, 1, 100)

y = 2 * X + 1 + 0.1 * np.random.randn(100)

個體是 w, b

def fitness(p):

w, b = p

pred = w * X + b

return -np.mean((pred - y) ** 2) # 負均方誤差,越大越好

pop_size = 50

elite_size = 10

sigma = 0.1

generations = 200

初始化種群

pop = np.random.randn(pop_size, 2)

for gen in range(generations):

scores = np.array(fitness(p) for p in pop)

best_idx = np.argmax(scores)

if gen % 20 == 0:

print(f"Gen {gen:3d} | fitness={scoresbest_idx:.4f} | w,b={popbest_idx}")

選擇精英

elite = popnp.argsort(scores)\[-elite_size:]

變異產生下一代

children = \[\]

for _ in range(pop_size):

parent = elitenp.random.randint(elite_size)

child = parent + sigma * np.random.randn(2)

children.append(child)

pop = np.array(children)

最終結果

best = popnp.argmax(\[fitness(p) for p in pop)]

print("學到的參數:", best)

print("真實參數: 2, 1")

```

運行後會看到 w 接近 2,b 接近 1。

如果你想進化神經網絡

把上面的 w, b 換成神經網絡的所有權重:

· 每個個體 = 一組網絡權重

· fitness = 遊戲得分、準確率、損失的倒數

· 用 EvoTorch 或 NEAT-Python 更方便

注意點

· 適應度函數是關鍵,設計不好進化會跑偏

· 要保留種群多樣性,避免早熟收斂

· 可加入交叉、精英保留、自適應變異

· 計算量大時可並行評估

· 常和梯度下降混合使用:進化調結構/超參數,梯度訓權重

仅供参考用。

相关推荐
南笙北梦2 小时前
从零写一个CAD 02:实体容器、Esc取消与键盘失灵的排查
python
硫酸锌012 小时前
在手机上运行Python增量备份手机数据到PC电脑
android·windows·python
沐欣工作室_lvyiyi2 小时前
家庭水资源节能系统设计(论文+源码)
c++·python·云平台·单片机毕业设计·单片机仿真·电子信息工程毕业设计·机械电子工程
FelixZhang0282 小时前
量化求真10|回测通过以后,策略就能上场吗?
人工智能·python·深度学习·学习·机器学习·金融·lstm
Ticnix2 小时前
你的 Agent 聊到第 20 轮就"失忆"?你管理的是历史,高手管理的是上下文
后端·python·agent
Raspberry_Pi_官方账号3 小时前
Raspberry Pi 官方分享:利用 14MB 的 Function-Calling LLM 实现端侧自然语言硬件控制
python·树莓派·raspberry pi
醇氧3 小时前
CentOS7.9 Yum 安装 Redis6.x(RPM 包,无需编译,推荐 remi 源)
linux·python
VidDown3 小时前
文件没问题但网页播不了:播放器接入实战与那些“环境问题
python·网络协议·音视频·视频编解码·视频
智购科技自动售货机工厂3 小时前
数字人民币硬钱包支付失败,排查发现是NFC读卡器功率不足~YH
python·面试·架构·eclipse·emacs