Initial commit

This commit is contained in:
ChuXun
2026-02-16 21:52:26 +08:00
commit 18ce59bec7
334 changed files with 35333 additions and 0 deletions

View File

@@ -0,0 +1,417 @@
Below is a **paper blueprint** that matches COMAPs 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
1. What you built (continuous-time dynamical model + CPL closure).
2. What you predicted (baseline TTE + scenario deltas + uncertainty bands).
3. What drives rapid drain (ranked drivers + mechanism).
4. 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
1. Define “unpredictable battery life” as **deterministic dynamics under varying inputs**, not randomness.
2. State deliverables required by COMAP: SOC(t), TTE under scenarios, sensitivity, recommendations.
3. 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
1. Present the system as state-space: **x(t), u(t), outputs**.
2. Explain *why* each state exists (memory/physics): polarization, thermal, radio-tail, SOH.
3. 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
1. Define termination events **mathematically**: gV, gz, gΔ.
2. Explain why multiple termination modes exist (voltage cutoff vs SOC exhaustion vs deliverability collapse).
3. Define numerical event location (interpolation) and tie-breaking.
### Must include (data/evidence)
* **Event function definitions**:
* gV(t)=V_termV_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** (12 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
1. Split parameters into **(i) physical battery**, **(ii) phone power mapping**, **(iii) thermal**, **(iv) radio tail**.
2. State how each group can be obtained:
* literature/specs, simple experiments, or plausibility constraints.
3. 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
1. Present solver choice: RK4 with nested CPL solve “inside stages.”
2. Show the algorithm pipeline and what is recorded each step (trajectory columns).
3. 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
1. Present baseline scenario definition (6 segments + smooth transitions).
2. Show trajectory plots (SOC, I/P_tot, T_b, Δ).
3. 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):**
1. z(t)
2. I(t) and P_tot(t)
3. T_b(t)
4. Δ(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
1. Define controlled scenario set (one-factor ablations + stress tests).
2. Compare ΔTTE relative to baseline; rank drivers.
3. For top drivers, show “mechanistic signature” metrics (why it happened in your model).
### Must include (data/evidence)
* **Scenario matrix table** (S0S7) with TTE and ΔTTE.
* **Driver ranking** list (largest reductions first).
* **Mechanistic signatures for top 23 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 COMAPs “identify drivers; which conditions reduce battery life most; which change little.”
---
## 9) Sensitivity analysis (assumptions + parameters)
### Logical progression
1. Distinguish **local** (one-at-a-time) from **global** sensitivity.
2. Use Sobol/Saltelli for global ranking of TTE drivers.
3. 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
1. Define the uncertainty source: **stochastic usage paths** around baseline.
2. Explain OU perturbations and why they are appropriate (mean-reverting behavior).
3. 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
1. Convert scenario + sensitivity findings into ranked interventions.
2. Provide user-facing recommendations (actions) and OS-facing (policies).
3. 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 COMAPs recommendation prompt.
---
## 12) Model validation, limitations, and extensions
### Logical progression
1. Validation checks you performed (numerical + physical).
2. Where the model performs well vs poorly (conditions).
3. 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 (doesnt 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/(mol*K)", "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"
}
}