17 KiB
Below is a paper blueprint that matches COMAP’s required elements (continuous-time model, TTE, sensitivity, uncertainty, recommendations, validation) and is logically aligned with your mechanistic narrative + CPL/ODE structure and your simulation/robustness→sensitivity→UQ workflow .
0) One-page Summary Sheet (executive-style)
Logical progression
- What you built (continuous-time dynamical model + CPL closure).
- What you predicted (baseline TTE + scenario deltas + uncertainty bands).
- What drives rapid drain (ranked drivers + mechanism).
- What users/OS should do (actionable recommendations, prioritized).
Must include (data/evidence)
- Headline baseline TTE: 4.60 h (z0=1.0), plus 10/50/90% or CI summary.
- Biggest drain drivers with quantified impact: e.g., Poor signal −1.82 h; Cold −1.45 h; show ranking table.
- Global sensitivity ranking (total-order Sobol ST): k_L, k_C, κ, … with values.
- UQ statement: mean/std/CI + survival curve milestone (e.g., S(t)=1 until ~4.25h, then drop).
- One sentence on validation: step-halving passes + feasibility handling (Δ≥0).
1) Introduction and problem framing
Logical progression
- Define “unpredictable battery life” as deterministic dynamics under varying inputs, not randomness.
- State deliverables required by COMAP: SOC(t), TTE under scenarios, sensitivity, recommendations.
- Preview your modeling philosophy: explicit continuous-time + interpretable mechanisms (screen/CPU/network/temp/aging).
Must include (arguments/evidence)
- A short “causal chain” narrative: inputs → power → current → states → voltage → TTE (you already have this).
- Clear statement that the model is continuous-time ODE + algebraic closure, not curve fitting/black box.
- Define key terms: SOC, TTE, drivers of drain (align with problem glossary).
2) Model overview: states, inputs, outputs, and assumptions
Logical progression
- Present the system as state-space: x(t), u(t), outputs.
- Explain why each state exists (memory/physics): polarization, thermal, radio-tail, SOH.
- List assumptions from strongest to weakest (and what they buy you).
Must include (specific content)
-
Table: variables with units and bounds
- States: z, v_p, T_b, S, w
- Inputs: L, C, N, Ψ, T_a
- Outputs: V_term(t), SOC(t), TTE
-
Assumptions (must be explicit):
- Smartphone ≈ constant-power-load at short timescale (CPL).
- 1st-order Thevenin ECM adequate for transient voltage memory.
- Lumped thermal model; SOH constant over a single discharge (but model-ready for multi-cycle).
3) Governing equations (core contribution)
Logical progression (recommended subsection order)
3.1 Power mapping (usage → demand): P_tot(L,C,N,Ψ,w). 3.2 Electro-thermal-aging constitutive laws: V_oc(z), R0(T_b,S), Q_eff(T_b,S). 3.3 CPL closure: solve current algebraically each instant. 3.4 ODE system: dz/dt, dv_p/dt, dT_b/dt, dw/dt (+ optional dS/dt). 3.5 Guards/constraints: z_min, Q_eff_floor, clamping, feasibility Δ≥0.
Must include (equations + interpretive evidence)
-
Explicit equations (as you already froze):
- P_scr, P_cpu, P_net (include Ψ penalty + radio tail term).
- V_term = V_oc − v_p − I R0 and ODEs for z, v_p, T_b, w.
- CPL quadratic and chosen root + discriminant Δ.
-
Physical interpretation paragraph per block
- Why weak signal increases power (Ψ^{−κ} factor).
- Why cold reduces deliverable power (R0↑, Q_eff↓).
- Why CPL creates “end-of-discharge acceleration” (feedback loop).
-
Non-negotiable rigor items
- Define z_eff = max(z, z_min) to avoid 1/z singularity (show where it enters).
- Define Q_eff floor and clamping rules.
- State feasibility: if Δ<0, requested power exceeds deliverable → shutdown/collapse mechanism.
4) Time-to-empty (TTE) definition and event logic
Logical progression
- Define termination events mathematically: gV, gz, gΔ.
- Explain why multiple termination modes exist (voltage cutoff vs SOC exhaustion vs deliverability collapse).
- Define numerical event location (interpolation) and tie-breaking.
Must include (data/evidence)
-
Event function definitions:
- gV(t)=V_term−V_cut, gz(t)=z, gΔ(t)=Δ
- Terminate at earliest crossing (min t*).
-
Interpolation formula for t* between samples (include exact linear formula).
-
Unit-consistent TTE: TTE = t* − t0.
-
Worked micro-example (1–2 sentences) illustrating interpolation (optional but strengthens clarity).
This directly satisfies “compute/approximate TTE under various initial charges and scenarios.”
5) Parameterization and data support (credibility section)
Logical progression
-
Split parameters into (i) physical battery, (ii) phone power mapping, (iii) thermal, (iv) radio tail.
-
State how each group can be obtained:
- literature/specs, simple experiments, or plausibility constraints.
-
Include a “plausibility check” pipeline (energy, ranges, signs).
Must include (specific evidence)
-
Full parameter table with units + baseline values (your BASELINE_CONFIG_v1).
-
Justification strategy (even if you used synthetic values):
- Which parameters are “tuned” vs “known.”
- Show at least one sanity anchor: nominal energy ≈ 14.8 Wh for 4 Ah @ 3.7 V (you used this as an energy check).
-
Validation constraints:
- P_tot in plausible W-range; V_term stays finite; Δ≥0 except at collapse; SOC monotone when I≥0.
6) Numerical method and reproducibility
Logical progression
- Present solver choice: RK4 with nested CPL solve “inside stages.”
- Show the algorithm pipeline and what is recorded each step (trajectory columns).
- State robustness checks: step-halving + event-location stability.
Must include (data/evidence)
-
Algorithm box (pseudo-code is fine):
- compute P_tot → constitutive → Δ → I → RHS → RK4 step → clamp → event check.
-
Step-halving table (you already have): z_diff_inf and relative TTE error, all passing.
-
Event bracket report (previous/curr g values + interpolated t*), proving event detection is stable.
-
Reproducibility controls: dt, t_max, seed, scenario definition.
7) Baseline results: SOC curves and TTE vs initial charge
Logical progression
- Present baseline scenario definition (6 segments + smooth transitions).
- Show trajectory plots (SOC, I/P_tot, T_b, Δ).
- Summarize TTE across z0 options; connect to mechanism.
Must include (data/evidence)
-
TTE table for z0={1,0.75,0.5,0.25}: TTE_hours, reason, avg power, max current, max temperature.
-
Figures (minimum set):
- z(t)
- I(t) and P_tot(t)
- T_b(t)
- Δ(t)
-
Energy plausibility check: integrate P_tot over [0,t*] and compare to nominal battery energy.
8) Scenario analysis: “drivers of rapid drain”
Logical progression
- Define controlled scenario set (one-factor ablations + stress tests).
- Compare ΔTTE relative to baseline; rank drivers.
- For top drivers, show “mechanistic signature” metrics (why it happened in your model).
Must include (data/evidence)
-
Scenario matrix table (S0–S7) with TTE and ΔTTE.
-
Driver ranking list (largest reductions first).
-
Mechanistic signatures for top 2–3 drain cases:
- avg(P_tot), max(I), min(Δ), avg(R0), avg(Q_eff).
-
Mechanistic explanation paragraphs:
- Poor signal: Ψ penalty increases P_net → Δ decreases → higher I → faster SOC decline.
- Cold: Arrhenius R0↑ + Q_eff↓ → earlier V_cut termination (switching reason matters).
This directly answers COMAP’s “identify drivers; which conditions reduce battery life most; which change little.”
9) Sensitivity analysis (assumptions + parameters)
Logical progression
- Distinguish local (one-at-a-time) from global sensitivity.
- Use Sobol/Saltelli for global ranking of TTE drivers.
- Interpret what high ST means operationally (what the OS/user can influence).
Must include (data/evidence)
- Sobol results table: S_i and ST_i for exactly the selected parameters (k_L, k_C, κ, …).
- Sampling details: N_base, seed, ranges (±20%), failure count = 0.
- Interpretation: e.g., k_L dominating suggests brightness policy is powerful; κ indicates signal-quality management is critical.
This fulfills “examine how predictions vary with assumptions/parameters/usage fluctuations.”
10) Uncertainty quantification (usage variability) + survival curve
Logical progression
- Define the uncertainty source: stochastic usage paths around baseline.
- Explain OU perturbations and why they are appropriate (mean-reverting behavior).
- Convert Monte Carlo TTE samples into decision-friendly outputs (CI, percentiles, survival curve).
Must include (data/evidence)
- UQ summary: mean/std/p10/p50/p90 and CI95 for mean.
- Survival curve table/plot: S(t)=P(TTE>t) on fixed grid.
- Reproducibility: M, seed, θ, σ, dt.
- Discussion: what uncertainty means for “unpredictability” (bounded variability, not arbitrary).
11) Recommendations (user + operating system)
Logical progression
- Convert scenario + sensitivity findings into ranked interventions.
- Provide user-facing recommendations (actions) and OS-facing (policies).
- Tie each recommendation to a model mechanism and quantified benefit.
Must include (data/evidence)
-
Ranked recommendation table:
- Action, mechanism, expected ΔTTE (hours/%), tradeoff.
-
Examples you can justify directly from your tables:
- Improve signal conditions / switch network modes in poor signal (largest loss case).
- Reduce brightness and CPU load (largest gains in ablations; aligns with Sobol ranking).
- Cold-weather mitigation: thermal management / conservative power mode to avoid V_cut early.
-
Explicitly connect to COMAP’s recommendation prompt.
12) Model validation, limitations, and extensions
Logical progression
- Validation checks you performed (numerical + physical).
- Where the model performs well vs poorly (conditions).
- Extensions that preserve continuous-time, mechanistic nature.
Must include (data/evidence)
-
Validation evidence
- Dimensional consistency checklist (units).
- Monotonicity dz/dt ≤ 0 for I ≥ 0.
- Step-halving pass + event stability report.
-
Limitations
- Parameter realism (if synthetic) and what data would tighten it.
- Single-node thermal; simplified CPU/network power mapping; SOH dynamics negligible in single discharge.
-
Extensions
- Multi-cycle SOH (SEI-inspired) already proposed in your model narrative as an upgrade path.
- Multi-node thermal / OS control loops / adaptive power caps (still continuous-time).
13) References + AI Use Report
Must include
- Proper citations for any literature/specs used for parameters and for OCV/ECM modeling (your BibTeX draft is a good start).
- COMAP-required AI Use Report appended (doesn’t count toward 25 pages).
If you want a “no-miss” checklist
I can turn the above into a page-by-page outline (25-page cap aware) with:
- exact figure placements,
- exact table placements,
- and paragraph-level “claim → evidence → implication” bullets for each subsection.
{ "model_name": "MODEL_SPEC", "version": "1.0", "status": "frozen", "states": [ { "name": "z", "unit": "dimensionless", "bounds": [0, 1], "description": "State of Charge" }, { "name": "v_p", "unit": "V", "bounds": [null, null], "description": "Polarization voltage" }, { "name": "T_b", "unit": "K", "bounds": [0, null], "description": "Battery temperature" }, { "name": "S", "unit": "dimensionless", "bounds": [0, 1], "description": "State of Health" }, { "name": "w", "unit": "dimensionless", "bounds": [0, 1], "description": "Radio tail activation level" } ], "inputs": [ { "name": "L", "unit": "dimensionless", "bounds": [0, 1], "description": "Screen brightness" }, { "name": "C", "unit": "dimensionless", "bounds": [0, 1], "description": "Processor load" }, { "name": "N", "unit": "dimensionless", "bounds": [0, 1], "description": "Network activity" }, { "name": "Ψ", "unit": "dimensionless", "bounds": [0, 1], "description": "Signal quality" }, { "name": "T_a", "unit": "K", "bounds": [null, null], "description": "Ambient temperature" } ], "parameters": [ { "name": "P_bg", "unit": "W", "description": "Background power" }, { "name": "P_scr0", "unit": "W", "description": "Screen baseline power" }, { "name": "k_L", "unit": "W", "description": "Screen scaling coefficient" }, { "name": "gamma", "unit": "dimensionless", "description": "Screen power exponent" }, { "name": "P_cpu0", "unit": "W", "description": "CPU baseline power" }, { "name": "k_C", "unit": "W", "description": "CPU scaling coefficient" }, { "name": "eta", "unit": "dimensionless", "description": "CPU power exponent" }, { "name": "P_net0", "unit": "W", "description": "Network baseline power" }, { "name": "k_N", "unit": "W", "description": "Network scaling coefficient" }, { "name": "epsilon", "unit": "dimensionless", "description": "Signal guard constant" }, { "name": "kappa", "unit": "dimensionless", "description": "Signal penalty exponent" }, { "name": "k_tail", "unit": "W", "description": "Radio tail power coefficient" }, { "name": "tau_up", "unit": "s", "description": "Radio activation time constant" }, { "name": "tau_down", "unit": "s", "description": "Radio decay time constant" }, { "name": "C1", "unit": "F", "description": "Polarization capacitance" }, { "name": "R1", "unit": "Ohm", "description": "Polarization resistance" }, { "name": "hA", "unit": "W/K", "description": "Convective heat transfer coefficient" }, { "name": "C_th", "unit": "J/K", "description": "Thermal capacitance" }, { "name": "E0", "unit": "V", "description": "Standard potential" }, { "name": "K", "unit": "V", "description": "Polarization constant" }, { "name": "A", "unit": "V", "description": "Exponential zone amplitude" }, { "name": "B", "unit": "dimensionless", "description": "Exponential zone time constant" }, { "name": "R_ref", "unit": "Ohm", "description": "Reference internal resistance" }, { "name": "E_a", "unit": "J/mol", "description": "Activation energy" }, { "name": "R_g", "unit": "J/(molK)", "description": "Gas constant" }, { "name": "T_ref", "unit": "K", "description": "Reference temperature" }, { "name": "eta_R", "unit": "dimensionless", "description": "Aging resistance factor" }, { "name": "Q_nom", "unit": "Ah", "description": "Nominal capacity" }, { "name": "alpha_Q", "unit": "1/K", "description": "Temperature capacity coefficient" }, { "name": "V_cut", "unit": "V", "description": "Cutoff voltage" }, { "name": "z_min", "unit": "dimensionless", "description": "SOC singularity guard" }, { "name": "Q_eff_floor", "unit": "Ah", "description": "Minimum capacity floor" } ], "equations": [ "P_scr = P_scr0 + k_L * L^gamma", "P_cpu = P_cpu0 + k_C * C^eta", "P_net = P_net0 + k_N * N / (Ψ + epsilon)^kappa + k_tail * w", "P_tot = P_bg + P_scr + P_cpu + P_net", "z_eff = max(z, z_min)", "V_oc = E0 - K * (1/z_eff - 1) + A * exp(-B * (1 - z))", "R0 = R_ref * exp((E_a / R_g) * (1/T_b - 1/T_ref)) * (1 + eta_R * (1 - S))", "Q_eff = max(Q_nom * S * (1 - alpha_Q * (T_ref - T_b)), Q_eff_floor)", "Delta = (V_oc - v_p)^2 - 4 * R0 * P_tot", "I = (V_oc - v_p - sqrt(Delta)) / (2 * R0)", "V_term = V_oc - v_p - I * R0", "dz/dt = -I / (3600 * Q_eff)", "dv_p/dt = I/C1 - v_p / (R1 * C1)", "dT_b/dt = (I^2 * R0 + I * v_p - hA * (T_b - T_a)) / C_th", "sigma_N = min(1, N)", "tau_N = (sigma_N >= w) ? tau_up : tau_down", "dw/dt = (sigma_N - w) / tau_N" ], "guards": { "z_min": "z_eff = max(z, z_min)", "Q_eff_floor": "Q_eff = max(Q_calc, Q_eff_floor)", "clamp_rules": [ "z = clamp(z, 0, 1)", "S = clamp(S, 0, 1)", "w = clamp(w, 0, 1)" ] }, "events": { "gV": "V_term(t) - V_cut", "gz": "z(t)", "gDelta": "Delta(t)", "termination_logic": "Terminate at t = min(t | gV(t) <= 0 OR gz(t) <= 0 OR gDelta(t) <= 0)", "termination_reasons": [ "V_CUTOFF", "SOC_ZERO", "DELTA_ZERO" ] }, "tte_definition": { "formula": "TTE = t* - t0", "interpolation": "t* = t_{n-1} + (t_n - t_{n-1}) * (0 - g(t_{n-1})) / (g(t_n) - g(t_{n-1}))", "tie_breaking": "Earliest t* across all event functions; if identical, priority: DELTA_ZERO > V_CUTOFF > SOC_ZERO" }, "numerics": { "method": "RK4_nested_CPL", "dt_symbol": "dt", "stage_recompute_current": true }, "validation": { "dimension_check": [ "P_tot [W]", "V_term [V]", "I [A]", "dz/dt [1/s]", "dT_b/dt [K/s]" ], "monotonicity_check": "If I >= 0, then dz/dt must be <= 0", "feasibility_check": "Delta must be >= 0; if Delta < 0 at any evaluation, trigger DELTA_ZERO event" } }