File size: 4,988 Bytes
1556404
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
#!/usr/bin/env python3
"""
Example: Using WandB Logging with ShinkaEvolve

This example demonstrates how to enable WandB logging to track evolution progress.

Prerequisites:
    pip install wandb
    wandb login  # Login to your WandB account

Usage:
    python examples/wandb_logging_example.py
"""

import sys
from pathlib import Path

# Add parent directory to path
sys.path.insert(0, str(Path(__file__).parent.parent))

from shinka.core import EvolutionRunner, EvolutionConfig
from shinka.database import DatabaseConfig
from shinka.launch import LocalJobConfig


def main():
    """Run circle packing with WandB logging enabled."""
    
    # Configure job
    job_config = LocalJobConfig(
        eval_program_path="examples/circle_packing/evaluate_ori.py"
    )
    
    # Database configuration
    db_config = DatabaseConfig(
        db_path="examples/circle_packing/results/wandb_test/evolution_db.sqlite",
        num_islands=2,  # Using 2 islands to demonstrate per-island tracking
        archive_size=40,
        elite_selection_ratio=0.3,
        num_archive_inspirations=4,
        num_top_k_inspirations=2,
        migration_interval=10,
        migration_rate=0.1,
        island_elitism=True,
        parent_selection_strategy="weighted",
        parent_selection_lambda=10.0,
    )
    
    # Task description
    search_task_sys_msg = """You are an expert mathematician specializing in circle packing problems.
Your task is to maximize the sum of radii when packing 26 circles in a unit square [0,1] x [0,1].
"""
    
    # Evolution configuration with WandB enabled
    evo_config = EvolutionConfig(
        task_sys_msg=search_task_sys_msg,
        patch_types=["diff", "full", "cross"],
        patch_type_probs=[0.6, 0.3, 0.1],
        num_generations=20,  # Small test run
        max_parallel_jobs=4,
        max_patch_resamples=3,
        max_patch_attempts=3,
        job_type="local",
        language="python",
        llm_models=[
            "native-gemini-2.5-flash",
            "native-gemini-2.5-pro",
        ],
        llm_kwargs=dict(
            temperatures=[0.5, 0.7, 1.0],
            max_tokens=32768,
        ),
        meta_rec_interval=10,
        meta_llm_models=["native-gemini-2.5-flash"],
        meta_llm_kwargs=dict(temperatures=[0.7], max_tokens=16384),
        meta_max_recommendations=5,
        embedding_model="text-embedding-3-small",
        code_embed_sim_threshold=0.995,
        novelty_llm_models=["native-gemini-2.5-flash"],
        novelty_llm_kwargs=dict(temperatures=[0.7], max_tokens=16384),
        llm_dynamic_selection="ucb1",
        llm_dynamic_selection_kwargs=dict(exploration_coef=1.0),
        init_program_path="examples/circle_packing/initial.py",
        results_dir="examples/circle_packing/results/wandb_test",
        use_text_feedback=False,
        
        # ===== WandB Configuration =====
        enable_wandb=True,
        wandb_project="shinka-evolve-demo",  # Your WandB project name
        wandb_entity=None,  # Optional: your WandB username/team
        wandb_run_name="circle-packing-test",  # Optional: custom run name
        wandb_tags=["circle-packing", "test", "2-islands"],  # Optional: tags
    )
    
    print("=" * 80)
    print("πŸš€ Starting Evolution with WandB Logging")
    print("=" * 80)
    print(f"πŸ“Š WandB Project: {evo_config.wandb_project}")
    print(f"πŸƒ Run Name: {evo_config.wandb_run_name}")
    print(f"🏝️  Islands: {db_config.num_islands}")
    print(f"πŸ“ˆ Generations: {evo_config.num_generations}")
    print("=" * 80)
    print()
    print("Metrics being tracked:")
    print("  β€’ generation/score - Best score in each generation")
    print("  β€’ generation/best_score_so_far - Global best score")
    print("  β€’ generation/avg_score - Average score per generation")
    print("  β€’ generation/num_correct - Number of correct programs")
    print()
    print("Per-island metrics:")
    print("  β€’ island_0/score, island_0/best_score")
    print("  β€’ island_1/score, island_1/best_score")
    print()
    print("View results at: https://wandb.ai/")
    print("=" * 80)
    print()
    
    # Create and run evolution
    evo_runner = EvolutionRunner(
        evo_config=evo_config,
        job_config=job_config,
        db_config=db_config,
        verbose=True,
    )
    
    try:
        evo_runner.run()
        print()
        print("=" * 80)
        print("βœ… Evolution completed successfully!")
        print("=" * 80)
        print()
        print(f"πŸ“Š View results on WandB:")
        if evo_runner.wandb_run:
            print(f"   {evo_runner.wandb_run.url}")
        print()
    except KeyboardInterrupt:
        print()
        print("=" * 80)
        print("⚠️  Evolution interrupted by user")
        print("=" * 80)
    except Exception as e:
        print()
        print("=" * 80)
        print(f"❌ Evolution failed with error: {e}")
        print("=" * 80)
        raise


if __name__ == "__main__":
    main()