| # 🔬 实验对比分析工具 |
|
|
| 这个目录包含用于对比和分析实验结果的通用工具。 |
|
|
| ## 📂 目录结构 |
|
|
| ``` |
| analyze/ |
| ├── src/ # 分析脚本源代码 |
| │ ├── compare_experiments.py # 通用实验对比工具 |
| │ └── analyze_aux_metrics.py # 辅助指标分析工具 |
| ├── outputs/ # 默认输出目录(分析结果) |
| ├── run.sh # 快速运行实验对比示例 |
| ├── run_aux_analysis.sh # 快速运行辅助指标分析示例 |
| ├── example_usage.sh # 使用示例脚本 |
| └── README.md # 本文件 |
| ``` |
|
|
| ## 🚀 快速开始 |
|
|
| ### 基本用法 |
|
|
| 对比两个实验run(结果会自动保存到 `analyze/outputs/`): |
|
|
| ```bash |
| python analyze/src/compare_experiments.py \ |
| examples/circle_packing/results/exp1_dir \ |
| examples/circle_packing/results/exp2_dir |
| ``` |
|
|
| ### 使用 tag 参数组织输出 |
|
|
| **推荐方式**:使用 `--tag` 参数将结果保存到 `analyze/outputs/TAG/` 子目录: |
|
|
| ```bash |
| python analyze/src/compare_experiments.py \ |
| path/to/exp1 \ |
| path/to/exp2 \ |
| --tag vision_comparison |
| ``` |
|
|
| 输出位置:`analyze/outputs/vision_comparison/` |
|
|
| ### 使用自定义标签 |
|
|
| ```bash |
| python analyze/src/compare_experiments.py \ |
| path/to/exp1 \ |
| path/to/exp2 \ |
| --labels "实验A" "实验B" \ |
| --tag experiment_a_vs_b |
| ``` |
|
|
| ### 完全自定义输出目录 |
|
|
| 如果需要完全自定义输出路径(不在 analyze/outputs 下): |
|
|
| ```bash |
| python analyze/src/compare_experiments.py \ |
| path/to/exp1 \ |
| path/to/exp2 \ |
| --labels "WITH Vision" "WITHOUT Vision" \ |
| --output-dir custom/path/my_comparison |
| ``` |
|
|
| ## 📊 输出内容 |
|
|
| 每次运行会在指定的输出目录生成: |
|
|
| 1. **`comparison_plots.png`** - 包含4个子图的可视化对比: |
| - **分数演化曲线** - 两个实验随代数的最佳分数变化 |
| - **达到分数里程碑所需代数** - 对比达到不同分数阈值(每0.5划分)所需的代数(越低越好) |
| - **分数分布直方图** - 所有代数分数的分布情况 |
| - **累积最优曲线** - 历史最佳分数的演化 |
| |
| 2. **`comparison_results.json`** - 详细的对比数据(JSON格式): |
| - 每个实验的统计信息 |
| - 对比结果和改进百分比 |
| - 实验元信息 |
|
|
| ## 🔧 完整参数 |
|
|
| ```bash |
| python analyze/src/compare_experiments.py [-h] |
| exp1_path exp2_path |
| [--labels LABEL1 LABEL2] |
| [--tag TAG] |
| [--output-dir OUTPUT_DIR] |
| [--threshold THRESHOLD] |
| ``` |
|
|
| | 参数 | 说明 | 默认值 | |
| |------|------|--------| |
| | `exp1_path` | 第一个实验的结果目录 | 必需 | |
| | `exp2_path` | 第二个实验的结果目录 | 必需 | |
| | `--labels` | 两个实验的自定义标签 | 从目录名生成 | |
| | `--tag` | 输出子目录标签(结果保存到 `analyze/outputs/TAG/`) | `None` | |
| | `--output-dir` | 完全自定义输出目录(优先级高于 `--tag`) | `analyze/outputs` 或 `analyze/outputs/TAG` | |
| | `--threshold` | 重大改进的阈值 | `0.05` | |
|
|
| **输出目录优先级**:`--output-dir` > `--tag` > 默认 (`analyze/outputs`) |
|
|
| ## 📝 使用示例 |
|
|
| ### 示例1: 对比有无Vision(使用 tag) |
|
|
| ```bash |
| python analyze/src/compare_experiments.py \ |
| examples/circle_packing/results/results_circle_packing_WITH_vision_20260114_065819 \ |
| examples/circle_packing/results/results_circle_packing_WITHOUT_vision_20260114_070110 \ |
| --labels "WITH Vision" "WITHOUT Vision" \ |
| --tag vision_comparison |
| ``` |
|
|
| 输出: |
| - `analyze/outputs/vision_comparison/comparison_plots.png` |
| - `analyze/outputs/vision_comparison/comparison_results.json` |
|
|
| ### 示例2: 对比不同辅助指标配置 |
|
|
| ```bash |
| python analyze/src/compare_experiments.py \ |
| examples/circle_packing/results/results_circle_packing_NO_vision_WITH_aux_20260118_072141 \ |
| examples/circle_packing/results/results_circle_packing_NO_vision_WITH_refined_aux_20260118_205215 \ |
| --labels "All 7 Metrics" "Refined 4 Metrics" \ |
| --tag aux_7vs4 |
| ``` |
|
|
| 输出: |
| - `analyze/outputs/aux_7vs4/comparison_plots.png` |
| - `analyze/outputs/aux_7vs4/comparison_results.json` |
|
|
| ### 示例3: 快速对比(使用默认设置) |
|
|
| ```bash |
| python analyze/src/compare_experiments.py \ |
| path/to/exp1 \ |
| path/to/exp2 |
| ``` |
|
|
| 输出直接保存到 `analyze/outputs/` |
|
|
| ### 示例4: 使用 uv 运行 |
|
|
| ```bash |
| uv run python analyze/src/compare_experiments.py \ |
| exp1 exp2 \ |
| --labels "A" "B" \ |
| --tag experiment_a_vs_b |
| ``` |
|
|
| ## 🎯 功能特性 |
|
|
| ✅ **灵活** - 接受任意两个实验目录作为输入 |
| ✅ **智能** - 自动在多种目录结构中查找数据库 |
| ✅ **可视化** - 生成4个专业的对比图表,包括创新的里程碑达成对比 |
| ✅ **详细** - 输出完整的统计对比和时序分析 |
| ✅ **导出** - JSON格式方便后续处理 |
|
|
| ### 📈 里程碑图表说明 |
|
|
| **Generations to Reach Score Milestones** 图表特别有用,它显示: |
| - X轴:分数阈值(按0.5递增,如1.0, 1.5, 2.0, 2.5...) |
| - Y轴:达到该阈值所需的代数 |
| - 对比:两个实验并排对比,可以清楚看出哪个实验更快达到特定分数 |
| - **越低越好** - 柱子越短表示越快达到目标分数 |
|
|
| ## 📄 屏幕输出示例 |
|
|
| ``` |
| ================================================================================ |
| 🔬 ANALYZING EXPERIMENTS: WITH Vision vs WITHOUT Vision |
| ================================================================================ |
|
|
| 📁 Experiment 1: examples/circle_packing/results/results_circle_packing_WITH_vision_... |
| 📁 Experiment 2: examples/circle_packing/results/results_circle_packing_WITHOUT_vision_... |
| 📂 Output Dir: analyze/outputs |
|
|
| 🔍 Finding database files... |
| ✅ WITH Vision: evolution_db_circle_packing_WITH_vision_20260114_065819.sqlite |
| ✅ WITHOUT Vision: evolution_db_circle_packing_WITHOUT_vision_20260114_070110.sqlite |
|
|
| 📊 Loading experiment data... |
| ✅ Loaded 1250 programs from WITH Vision |
| ✅ Loaded 1180 programs from WITHOUT Vision |
|
|
| ================================================================================ |
| 📊 EXPERIMENT COMPARISON: WITH Vision vs WITHOUT Vision |
| ================================================================================ |
|
|
| 🎯 FINAL RESULTS: |
| WITH Vision : 2.5786 |
| WITHOUT Vision : 2.5507 |
| Improvement: +1.09% ✅ WITH Vision Better |
|
|
| 📈 STATISTICS: |
| ┌─────────────────────────────────────────────┬──────────────────┬──────────────────┐ |
| │ Metric │ WITH Vision │ WITHOUT Vision │ |
| ├─────────────────────────────────────────────┼──────────────────┼──────────────────┤ |
| │ Total Programs │ 1250 │ 1180 │ |
| │ Correct Programs │ 985 │ 920 │ |
| ... |
| └─────────────────────────────────────────────┴──────────────────┴──────────────────┘ |
|
|
| 🏆 KEY MILESTONES: |
| ... |
|
|
| ⏱️ IMPROVEMENT TIMING ANALYSIS: |
| ... |
|
|
| 🎨 Generating comparison plots... |
| 📊 Plots saved to: analyze/outputs/comparison_plots.png |
| |
| 💾 Saving detailed comparison data... |
| ✅ JSON saved to: analyze/outputs/comparison_results.json |
|
|
| ================================================================================ |
| ✅ ANALYSIS COMPLETE! |
| ================================================================================ |
|
|
| 📊 Output files: |
| • Plots: analyze/outputs/comparison_plots.png |
| • Data: analyze/outputs/comparison_results.json |
|
|
| 🏆 Winner: WITH Vision (by 1.09%) |
| ``` |
| |
| ## 🆘 故障排除 |
| |
| ### 找不到数据库文件 |
| |
| **错误**:`No database file found in: path/to/experiment` |
| |
| **解决**:确保实验目录包含 `evolution_db_*.sqlite` 文件 |
| |
| ### 路径不存在 |
| |
| **错误**:`Results directory not found: path/to/experiment` |
| |
| **解决**:检查路径是否正确,使用绝对路径或从项目根目录的相对路径 |
| |
| ## 📚 相关工具 |
| |
| 在 `my/` 目录下还有其他专用的分析脚本: |
| - `compare_aux_experiments.py` - 专门对比辅助指标实验 |
| - `analyze_vision_results.py` - 专门对比vision实验 |
| - `plot_latest_results.py` - 自动找最新实验对比 |
| |
| 本工具 (`compare_experiments.py`) 是**最通用和灵活**的版本,推荐优先使用。 |
| |
| --- |
| |
| ## 🔍 辅助指标分析工具 |
| |
| ### 工具2: `analyze_aux_metrics.py` |
| |
| 专门分析单个实验中辅助指标(auxiliary metrics)的演化和与主要分数的相关性。 |
| |
| #### 快速开始 |
| |
| ```bash |
| python analyze/src/analyze_aux_metrics.py \ |
| path/to/experiment \ |
| --tag aux_analysis |
| ``` |
| |
| #### 功能特性 |
| |
| 1. **📈 指标演化分析** - 展示每个辅助指标随代数的变化趋势 |
| 2. **🔗 相关性分析** - 计算每个辅助指标与主要分数(combined_score)的Pearson相关系数 |
| 3. **📊 可视化对比** - 自动生成3个详细的分析图表 |
| 4. **📉 统计显著性** - 提供p值和显著性标记(***, **, *, ns) |
| |
| #### 输出内容 |
| |
| 生成3个PNG图表和1个JSON数据文件: |
| |
| 1. **`aux_metrics_evolution.png`** |
| - 所有辅助指标的演化曲线(多子图) |
| - 每个指标包含趋势线 |
| |
| 2. **`aux_metrics_correlation.png`** |
| - 相关性条形图(按绝对值排序) |
| - Top 4指标的散点图和回归线 |
| - 颜色编码表示代数 |
| |
| 3. **`score_and_top_metrics.png`** |
| - 主要分数演化 |
| - Top 3辅助指标演化(归一化) |
| |
| 4. **`aux_metrics_correlation.json`** |
| - 完整的相关性数据 |
| - 分类统计(强正相关、弱正相关等) |
| |
| #### 使用示例 |
| |
| ```bash |
| # 基本用法 |
| python analyze/src/analyze_aux_metrics.py \ |
| examples/circle_packing/results/results_circle_packing_NO_vision_WITH_aux_20260118_072141 |
| |
| # 使用tag组织输出 |
| python analyze/src/analyze_aux_metrics.py \ |
| path/to/experiment \ |
| --tag my_aux_analysis |
| |
| # 指定自定义标签 |
| python analyze/src/analyze_aux_metrics.py \ |
| path/to/experiment \ |
| --label "My Experiment" \ |
| --tag aux_metrics |
| ``` |
| |
| #### 快速运行 |
| |
| ```bash |
| # 运行预配置的示例 |
| bash analyze/run_aux_analysis.sh |
| ``` |
| |
| #### 相关性解读 |
| |
| - **强正相关 (>0.7)**: 该指标与分数高度一致,可能是有效的优化目标 |
| - **弱负相关 (<-0.4)**: 该指标可能与主要目标冲突,建议移除 |
| - **显著性标记**: |
| - `***` p < 0.001 (高度显著) |
| - `**` p < 0.01 (显著) |
| - `*` p < 0.05 (边缘显著) |
| - `ns` 不显著 |
| |