Skip to content

Commit 8daac82

Browse files
committed
huawei 2017
huawei 2017
1 parent 41bd9a9 commit 8daac82

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

86 files changed

+244256
-16
lines changed

examples/huawei_2017/GUIDE.md

Lines changed: 267 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,267 @@
1+
# Huawei CodeCraft 2017 CDN Optimization with OpenEvolve
2+
3+
## 问题概述
4+
5+
这是华为 CodeCraft 2017 编程大赛的题目 - 一个视频内容分发网络(CDN)服务器部署优化问题。
6+
7+
**目标**: 最小化总成本 = 服务器部署成本 + 带宽租用成本
8+
9+
**约束条件**:
10+
- 满足所有消费节点的视频带宽需求
11+
- 不超过网络链路的带宽容量
12+
- 不超过服务器的输出能力上限
13+
14+
**问题本质**: 这是一个设施选址(Facility Location)和多商品流(Multi-Commodity Flow)的组合优化问题,属于NP-hard问题。
15+
16+
## OpenEvolve 原理
17+
18+
OpenEvolve 使用**进化算法** + **大语言模型**来优化代码:
19+
20+
1. **MAP-Elites算法**: 维护程序多样性,在特征空间中保留精英解
21+
2. **Island-Based Evolution**: 多个独立种群并行演化,定期迁移交流
22+
3. **LLM驱动变异**: 使用Qwen等大模型生成智能代码变异
23+
4. **级联评估**: 多阶段评估策略,快速过滤低质量解
24+
5. **进程池并行**: 并行评估多个程序,加速演化
25+
26+
## 文件说明
27+
28+
- `initial_program.py` - 初始基线解决方案(简单贪心策略)
29+
- `evaluator.py` - 评估器,测试程序在多个案例上的表现
30+
- `config.qwen.yaml` - Qwen模型配置文件
31+
- `case_example/` - 测试用例目录
32+
- `batch1/0Primary/` - 初级测试用例
33+
- `batch1/1Intermediate/` - 中级测试用例
34+
- `batch1/2Advanced/` - 高级测试用例
35+
- `batch2/`, `batch3/` - 更多测试批次
36+
37+
## 快速开始
38+
39+
### 1. 安装依赖
40+
41+
```bash
42+
cd /path/to/openevolve
43+
pip install -e ".[dev]"
44+
```
45+
46+
### 2. 验证初始程序
47+
48+
```bash
49+
cd examples/huawei_2017
50+
51+
# 测试单个案例
52+
python initial_program.py case_example/batch1/0Primary/case0.txt
53+
54+
# 完整评估
55+
python -c "from evaluator import evaluate; result = evaluate('initial_program.py'); print(result.metrics)"
56+
```
57+
58+
预期输出:
59+
```
60+
{'valid_solutions': 1.0, 'avg_cost': 149920.0, 'combined_score': 0.6267, ...}
61+
```
62+
63+
### 3. 运行进化优化
64+
65+
**Linux/Mac**:
66+
```bash
67+
chmod +x run_evolution.sh
68+
./run_evolution.sh --iterations 300
69+
```
70+
71+
**Windows**:
72+
```batch
73+
run_evolution.bat --iterations 300
74+
```
75+
76+
**Python直接调用**:
77+
```bash
78+
python ../../openevolve-run.py initial_program.py evaluator.py \
79+
--config config.qwen.yaml \
80+
--iterations 300
81+
```
82+
83+
### 4. 查看结果
84+
85+
进化过程中会自动保存:
86+
87+
- `openevolve_output/best/best_program.py` - 最优解
88+
- `openevolve_output/best/best_program_info.json` - 最优解的性能指标
89+
- `openevolve_output/checkpoints/checkpoint_N/` - 定期保存的检查点
90+
- `openevolve_output/logs/` - 详细日志
91+
92+
### 5. 从检查点恢复
93+
94+
如果进化中断,可以从检查点恢复:
95+
96+
```bash
97+
python ../../openevolve-run.py initial_program.py evaluator.py \
98+
--config config.qwen.yaml \
99+
--checkpoint openevolve_output/checkpoints/checkpoint_150 \
100+
--iterations 50
101+
```
102+
103+
## 性能指标说明
104+
105+
评估器返回以下指标:
106+
107+
- `valid_solutions` (0.0-1.0): 有效解的比例
108+
- `avg_cost`: 平均总成本(越低越好)
109+
- `cost_score` (0.0-1.0): 成本得分(归一化)
110+
- `time_score` (0.0-1.0): 执行时间得分
111+
- `combined_score` (0.0-1.0): 综合得分
112+
- 公式: `0.5 * valid_rate + 0.4 * cost_score + 0.1 * time_score`
113+
114+
**基线性能** (初始程序):
115+
- Valid Solutions: 100%
116+
- Average Cost: ~150,000
117+
- Combined Score: ~0.63
118+
119+
**优化目标**:
120+
- 降低平均成本到 100,000 以下
121+
- 提高 Combined Score 到 0.75+
122+
123+
## 配置参数说明
124+
125+
`config.qwen.yaml` 中的关键参数:
126+
127+
```yaml
128+
max_iterations: 300 # 进化迭代次数
129+
checkpoint_interval: 30 # 每30次迭代保存检查点
130+
131+
llm:
132+
primary_model: "Qwen/Qwen2.5-Coder-32B-Instruct" # 使用的模型
133+
temperature: 0.8 # 生成的随机性(0-1,越高越随机)
134+
max_tokens: 8192 # 单次生成的最大token数
135+
136+
database:
137+
num_islands: 4 # 岛屿数量(并行演化的种群数)
138+
population_size: 80 # 种群大小
139+
elite_selection_ratio: 0.25 # 精英选择比例
140+
141+
evaluator:
142+
timeout: 90 # 单个程序评估超时(秒)
143+
parallel_evaluations: 3 # 并行评估的程序数量
144+
```
145+
146+
**调优建议**:
147+
- 如果想快速实验: `max_iterations: 100`, `population_size: 40`
148+
- 如果想更好结果: `max_iterations: 500`, `population_size: 120`, `num_islands: 6`
149+
- 如果API调用受限: 降低 `parallel_evaluations` 和 `num_islands`
150+
151+
## 算法优化方向
152+
153+
OpenEvolve 的 LLM 会尝试探索以下优化策略:
154+
155+
1. **贪心启发式**
156+
- 服务器放置策略(靠近高需求区域)
157+
- 服务器类型选择(容量vs成本权衡)
158+
159+
2. **局部搜索**
160+
- 服务器重定位
161+
- 服务器增删
162+
- 需求重分配
163+
164+
3. **流量优化**
165+
- 更好的路由算法
166+
- 带宽成本最小化
167+
- 负载均衡
168+
169+
4. **高级技术**
170+
- 聚类消费节点
171+
- 分层部署策略
172+
- 动态规划组件
173+
- 启发式剪枝
174+
175+
## 常见问题
176+
177+
### Q: 进化过程很慢怎么办?
178+
179+
A: 可以调整以下参数加速:
180+
- 减少 `max_iterations`
181+
- 减少测试用例数量(在evaluator.py中调整`load_test_cases()[:5]`)
182+
- 增加 `parallel_evaluations`(如果有更多CPU核心)
183+
- 使用更快的LLM模型
184+
185+
### Q: 所有解都无效怎么办?
186+
187+
A: 检查:
188+
1. 初始程序能否正常运行
189+
2. 评估器是否配置正确
190+
3. 约束条件是否理解正确
191+
4. LLM生成的代码是否有语法错误(查看日志)
192+
193+
### Q: 成本没有下降怎么办?
194+
195+
A: 尝试:
196+
1. 增加 `temperature` 提高探索性
197+
2. 增加 `population_size` 和 `num_islands`
198+
3. 调整 `elite_selection_ratio` 和 `exploitation_ratio`
199+
4. 修改 prompt 提供更多优化提示
200+
201+
### Q: 如何使用其他模型?
202+
203+
A: 修改 `config.qwen.yaml` 中的 `llm.primary_model`:
204+
205+
```yaml
206+
# 使用 OpenAI GPT-4
207+
llm:
208+
primary_model: "gpt-4"
209+
api_key: "your-openai-api-key"
210+
api_base: "https://api.openai.com/v1"
211+
212+
# 使用本地模型(需要兼容OpenAI API)
213+
llm:
214+
primary_model: "local-model-name"
215+
api_base: "http://localhost:8000/v1"
216+
```
217+
218+
## 进阶使用
219+
220+
### 可视化演化树
221+
222+
```bash
223+
python ../../scripts/visualizer.py \
224+
--path openevolve_output/checkpoints/checkpoint_300/
225+
```
226+
227+
### 分析最佳程序
228+
229+
```python
230+
import json
231+
232+
# 读取最佳程序信息
233+
with open('openevolve_output/best/best_program_info.json') as f:
234+
info = json.load(f)
235+
print(f"Generation: {info['generation']}")
236+
print(f"Found at iteration: {info['iteration']}")
237+
print(f"Metrics: {info['metrics']}")
238+
239+
# 读取并测试最佳程序
240+
with open('openevolve_output/best/best_program.py') as f:
241+
best_code = f.read()
242+
print(best_code)
243+
```
244+
245+
### 批量测试
246+
247+
```python
248+
from evaluator import evaluate
249+
import glob
250+
251+
for checkpoint_dir in sorted(glob.glob('openevolve_output/checkpoints/checkpoint_*')):
252+
program_path = f'{checkpoint_dir}/best_program.py'
253+
if os.path.exists(program_path):
254+
result = evaluate(program_path)
255+
print(f"{checkpoint_dir}: {result.metrics['combined_score']:.4f}")
256+
```
257+
258+
## 参考资料
259+
260+
- [OpenEvolve 文档](../../CLAUDE.md)
261+
- [华为 CodeCraft 2017 题目](README.md)
262+
- [MAP-Elites 算法论文](https://arxiv.org/abs/1504.04909)
263+
- [AlphaEvolve 论文](https://deepmind.google/discover/blog/alphaevolve/)
264+
265+
## 许可证
266+
267+
本示例遵循 OpenEvolve 项目的许可证。
Lines changed: 103 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,103 @@
1+
# 快速开始 - 华为2017 CDN优化
2+
3+
## 5分钟快速运行
4+
5+
### 1. 确认环境
6+
```bash
7+
cd openevolve/examples/huawei_2017
8+
python -c "from evaluator import evaluate; print('OK')"
9+
```
10+
11+
### 2. 测试初始程序
12+
```bash
13+
python initial_program.py case_example/batch1/0Primary/case0.txt
14+
```
15+
16+
应该看到成本输出和路径方案。
17+
18+
### 3. 验证评估
19+
```bash
20+
python -c "from evaluator import evaluate; r = evaluate('initial_program.py'); print(f'Score: {r.metrics[\"combined_score\"]:.4f}')"
21+
```
22+
23+
应该看到 Score: ~0.6267
24+
25+
### 4. 运行进化(短测试)
26+
```bash
27+
python ..\..\openevolve-run.py initial_program.py evaluator.py --config config.qwen.yaml --iterations 100 --checkpoint .\openevolve_output\checkpoints\checkpoint_975
28+
```
29+
30+
### 5. 查看结果
31+
```bash
32+
cat openevolve_output/best/best_program_info.json
33+
```
34+
35+
## 完整运行(300次迭代)
36+
37+
**Windows**:
38+
```batch
39+
run_evolution.bat
40+
```
41+
42+
**Linux/Mac**:
43+
```bash
44+
chmod +x run_evolution.sh
45+
./run_evolution.sh
46+
```
47+
48+
预计时间: 3-5小时(取决于API速度)
49+
50+
## 关键文件
51+
52+
-`initial_program.py` - 基线程序(成本~150,000)
53+
-`evaluator.py` - 评估器(测试5个案例)
54+
-`config.qwen.yaml` - Qwen模型配置
55+
- 📁 `case_example/` - 测试用例(80个)
56+
- 📊 `openevolve_output/` - 进化结果(运行后生成)
57+
58+
## 预期效果
59+
60+
| 指标 | 初始值 | 目标 |
61+
|------|--------|------|
62+
| 有效率 | 100% | 100% |
63+
| 平均成本 | 150,000 | < 100,000 |
64+
| 综合得分 | 0.63 | > 0.75 |
65+
66+
## 常见问题
67+
68+
### API Key配置
69+
70+
编辑 `config.qwen.yaml`:
71+
```yaml
72+
llm:
73+
api_key: "your-api-key-here"
74+
api_base: "https://your-api-endpoint"
75+
```
76+
77+
### 加速测试
78+
79+
减少迭代次数和测试用例:
80+
```bash
81+
python ../../openevolve-run.py initial_program.py evaluator.py \
82+
--config config.qwen.yaml --iterations 50
83+
```
84+
85+
`evaluator.py` 中修改:
86+
```python
87+
test_cases = load_test_cases(case_dir)[:2] # 只测试2个案例
88+
```
89+
90+
### 查看详细日志
91+
92+
```bash
93+
tail -f openevolve_output/logs/openevolve_*.log
94+
```
95+
96+
## 下一步
97+
98+
详细文档请查看:
99+
- `GUIDE.md` - 完整使用指南
100+
- `README.md` - 问题描述
101+
- `../../CLAUDE.md` - OpenEvolve架构
102+
103+
祝优化顺利! 🚀

0 commit comments

Comments
 (0)