Views
No views yet
ac1. Checkpoint saved
after training step 11 (0-indexed). Strict upstream eval parity:
1100s hard kill, verbatim prompts/entrypoints, group 64x8, T=1.0, kl 0.1.1{
2 "step": 11,
3 "progress/batch": 11,
4 "optim/lr": 4e-05,
5 "progress/done_frac": 0.24,
6 "puct/buffer_size": 184,
7 "puct/sampled_size": 8,
8 "puct/T": 5632,
9 "puct/scale_last": 0.5734837763976226,
10 "puct/buffer_value/mean": -1.5626356140350515,
11 "puct/buffer_value/std": 0.1388459230678229,
12 "puct/buffer_value/min": -2.0797874683482562,
13 "puct/buffer_value/max": -1.5063036919506336,
14 "puct/buffer_timestep/mean": 4.739130434782608,
15 "puct/buffer_timestep/std": 3.326015912853092,
16 "puct/buffer_timestep/min": -1.0,
17 "puct/buffer_timestep/max": 10.0,
18 "puct/buffer_construction_len/mean": 1326.0326086956522,
19 "puct/buffer_construction_len/std": 1185.9754053015397,
20 "puct/buffer_construction_len/min": 1000.0,
21 "puct/buffer_construction_len/max": 7850.0,
22 "puct/sampled_value/mean": -1.506303691950634,
23 "puct/sampled_value/std": 2.830524433501838e-16,
24 "puct/sampled_value/min": -1.5063036919506345,
25 "puct/sampled_value/max": -1.5063036919506336,
26 "puct/sampled_timestep/mean": 10.0,
27 "puct/sampled_timestep/std": 0.0,
28 "puct/sampled_timestep/min": 10.0,
29 "puct/sampled_timestep/max": 10.0,
30 "puct/sampled_construction_len/mean": 1000.0,
31 "puct/sampled_construction_len/std": 0.0,
32 "puct/sampled_construction_len/min": 1000.0,
33 "puct/sampled_construction_len/max": 1000.0,
34 "time/sampling": 5195.137467622757,
35 "env/all/ac_tokens_per_turn": 8239.17578125,
36 "env/all/ob_tokens_per_turn": 2631.875,
37 "env/all/turns_per_episode": 1.0,
38 "env/all/total_episodes": 512,
39 "env/all/total_turns": 512,
40 "env/all/total_ac_tokens": 4218458,
41 "env/all/total_ob_tokens": 1347520,
42 "env/all/time/sampling_mean": 273.7584191975184,
43 "env/all/time/sampling_max": 356.1772961616516,
44 "env/all/time/env_step_mean": 2174.0821879776195,
45 "env/all/time/env_step_max": 4835.62459397316,
46 "env/all/reward/mean": 0.4617637836560212,
47 "env/all/reward/max": 0.6638767459078935,
48 "env/all/reward/min": 0.0,
49 "env/all/format": 1.0,
50 "env/all/format/min": 1.0,
51 "env/all/format/max": 1.0,
52 "env/all/reward": 0.4617637836560212,
53 "env/all/correctness": 0.76953125,
54 "env/all/correctness/min": 0.0,
55 "env/all/correctness/max": 1.0,
56 "env/all/raw_score": 2.3430125602401017,
57 "env/all/raw_score/min": 1.5063036919506336,
58 "env/all/raw_score/max": 247.64045512500405,
59 "env/all/initial_raw_score": -1.5063036919506343,
60 "env/all/initial_raw_score/min": -1.5063036919506345,
61 "env/all/initial_raw_score/max": -1.5063036919506336,
62 "env/all/msg": "Success; raw_score=1.5063036919506336",
63 "env/all/parsed_code": "```python\n\"\"\"Enhanced Metaheuristic with Adaptive Perturbation, Dynamic Convolution Constraints, and Multi-Objective Line Search Optimization\"\"\"\n\nimport time\nimport numpy as np\nimport cvxpy as cp\nimport copy\nimport random\n\ndef propose_candidate(seed=42, budget_s=1000, **kwargs):\n np.random.seed(seed)\n deadline = time.time() + budget_s - 10\n\n # Start from known best construction if it exists\n prev = globals().get(\"height_sequence_1\", None)\n if prev is not None and isinstance(prev, (list, np.ndarray)) and len(prev) > 0:\n best_sequence = list(np.asarray(prev, dtype=float))\n else:\n n = 1000\n # Generate multiple initial sequences\n base_uniform = np.random.uniform(0.001, 0.01, size=n)\n sum_uniform = np.sum(base_uniform)\n scale_uniform = 0.1 / sum_uniform\n seq_uniform = [max(0.0, x * scale_uniform) for x in base_uniform]\n\n # Spiked sequence\n base_spiked = np.zeros(n)\n num_spikes = 5\n spike_value = 0.1\n for i in range(num_spikes):\n base_spiked[i] = spike_value\n sum_spiked = np.sum(base_spiked)\n scale_spiked = 0.1 / sum_spiked\n seq_spiked = [max(0.0, x * scale_spiked) for x in base_spiked]\n\n # Evaluate to choose initial\n score_uniform = evaluate_sequence(seq_uniform)\n score_spiked = evaluate_sequence(seq_spiked)\n if score_spiked < score_uniform:\n best_sequence = seq_spiked\n else:\n best_sequence = seq_uniform\n\n current_sequence = best_sequence.copy()\n best_score = float('inf')\n\n def get_good_direction_to_move_into(sequence):\n \"\"\"Computes a better sequence using dynamic constraint selection and adaptive line search.\"\"\"\n n = len(sequence)\n if n == 0:\n return None\n\n sum_sequence = np.sum(sequence)\n if sum_sequence <= 0.0:\n return None\n\n # Remove normalization\n conv = np.convolve(sequence, sequence)\n max_b_val = np.max(conv)\n\n # Dynamic tight position selection with adaptive sensitivity\n tolerance = max_b_val * 0.01 # Reduced sensitivity\n tight_positions = np.where(conv >= max_b_val - tolerance)[0]\n\n if len(tight_positions) < int(len(conv)*0.1):\n # Randomly choose positions for exploration\n tight_positions = np.random.choice(range(len(conv)), size=int(len(conv)*0.1), replace=False)\n \n # Solve LP with extended time limit\n g_fun = solve_convolution_lp(sequence, max_b_val, tight_positions)\n if g_fun is None:\n return None\n\n sum_g = np.sum(g_fun)\n if sum_g <= 0.0:\n return None\n\n # Multi-step line search with adaptive t values\n best_t = 0.005\n best_score = float('inf')\n low, high = 0.001, 0.5\n for _ in range(100): # Increased iteration count for precision\n mid = (low + high) / 2\n new_seq = [(1 - mid)*x + mid*y for x, y in zip(sequence, g_fun)]\n try:\n curr_score = evaluate_sequence(new_seq)\n if curr_score < best_score:\n best_score = curr_score\n best_t = mid\n if curr_score < best_score:\n low = mid\n else:\n high = mid\n except Exception:\n continue\n\n return [(1 - best_t)*x + best_t*y for x, y in zip(sequence, g_fun)]\n\n def solve_convolution_lp(f_sequence, rhs, tight_positions):\n \"\"\"Solves LP with adaptive constraint selection.\"\"\"\n n = len(f_sequence)\n if n == 0:\n return None\n\n # Variables\n g = cp.Variable(n, nonneg=True)\n # Objective: maximize sum(g_j), equivalent to minimize -sum(g_j)\n objective = cp.Minimize(-cp.sum(g))\n\n # Constraints\n constraints = []\n for k in tight_positions:\n # Coefficients for the constraint: sum_{j=0}^{n-1} f[i] * g[j] <= rhs for appropriate i\n coeff = np.zeros(n)\n for j in range(n):\n i = k - j\n if 0 <= i < n:\n coeff[j] = f_sequence[i]\n constraints.append(cp.sum(coeff * g) <= rhs)\n\n # Solve the LP\n problem = cp.Problem(objective, constraints)\n try:\n problem.solve(solver=cp.GLPK, verbose=False)\n if problem.status == cp.OPTIMAL:\n return g.value\n except:\n return None\n return None\n\n def perturb_sequence(seq):\n \"\"\"Perturbation with diverse strategies to explore local minima.\"\"\"\n conv = np.convolve(seq, seq)\n # Select top 10 indices with highest convolution values\n top_indices = np.argsort(conv)[-10:]\n # Randomly choose 10 distinct indices from the top 10 for perturbation\n indices = np.random.choice(top_indices, size=10, replace=False)\n indices = [min(idx, len(seq)-1) for idx in indices]\n for idx in indices:\n # Larger random variation with exponential scaling\n scale = 0.2 * np.std(seq)\n new_val = max(0.0, seq[idx] + np.random.normal(0, scale))\n seq = [new_val if i == idx else seq[i] for i in range(len(seq))]\n return seq\n\n while time.time() < deadline:\n h_function = get_good_direction_to_move_into(current_sequence)\n if h_function is None:\n current_sequence = perturb_sequence(current_sequence)\n else:\n current_sequence = h_function\n\n try:\n curr_score = evaluate_sequence(current_sequence)\n if curr_score < best_score:\n best_score = curr_score\n best_sequence = current_sequence.copy()\n print(f\"New best: {best_score}\")\n except Exception:\n pass\n\n return [float(max(0.0, x)) for x in best_sequence]\n```",
64 "env/all/time/policy": 273.7584191975184,
65 "env/all/time/policy/min": 131.07887268066406,
66 "env/all/time/policy/max": 356.1772961616516,
67 "env/all/time/env_step": 2174.0821879776195,
68 "env/all/time/env_step/min": 0.005859851837158203,
69 "env/all/time/env_step/max": 4835.62459397316,
70 "env/all/time/reward_compute": 6.887130439281464e-07,
71 "env/all/time/reward_compute/min": 2.1979212760925293e-07,
72 "env/all/time/reward_compute/max": 2.775341272354126e-06,
73 "env/all/by_group/frac_mixed": 1.0,
74 "env/all/by_group/frac_all_good": 0.0,
75 "env/all/by_group/frac_all_bad": 0.0,
76 "advantage/mean": 0.019598836079239845,
77 "advantage/min": -1.0,
78 "advantage/max": 2.8821096420288086,
79 "time/assemble_training_data": 8.474912881851196,
80 "time/kl_vs_base": 85.29625272750854,
81 "kl_policy_base": 0.0008106325403787196,
82 "time/train": 513.5066757202148,
83 "time/save_checkpoint": 16.68401527404785,
84 "time/total": 5821.043081998825
85}[2026-07-09T06:24:18+00:00] job=1812630 node=node-14 ngpu=3 ntrain=1 replicas=2 flash_attn=no
[2026-07-09T09:14:17+00:00] job=1813129 node=node-28 ngpu=3 ntrain=1 replicas=2 flash_attn=yes
[2026-07-09T13:46:36+00:00] job=1813130 node=node-22 ngpu=6 ntrain=2 replicas=4 flash_attn=yes