satellite_format/
snapshot.rs1use serde::{Deserialize, Serialize};
4
5#[derive(Debug, Clone, Serialize, Deserialize)]
7pub struct Snapshot {
8 pub problem_hash: String,
10 pub branch_tree: BranchTree,
12 pub learned_clauses: Vec<Vec<i64>>,
14 pub prng_state: PrngState,
16 pub solver_config: SolverConfig,
18}
19
20#[derive(Debug, Clone, Serialize, Deserialize)]
22pub struct BranchTree {
23 pub branches: Vec<BranchInfo>,
25}
26
27#[derive(Debug, Clone, Serialize, Deserialize)]
29pub struct BranchInfo {
30 pub id: String,
32 pub parent_id: Option<String>,
34 pub depth: u32,
36 pub status: BranchStatus,
38}
39
40#[derive(Debug, Clone, Copy, PartialEq, Eq, Serialize, Deserialize)]
42#[serde(rename_all = "lowercase")]
43pub enum BranchStatus {
44 Active,
45 Failed,
46 Solved,
47}
48
49#[derive(Debug, Clone, Serialize, Deserialize)]
51pub struct PrngState {
52 pub xorshift_state: u64,
54}
55
56#[derive(Debug, Clone, Serialize, Deserialize)]
58pub struct SolverConfig {
59 pub cpu_workers: usize,
61 pub gpu_workers: usize,
63 pub heuristic_weights: HeuristicWeights,
65}
66
67#[derive(Debug, Clone, Serialize, Deserialize)]
69pub struct HeuristicWeights {
70 pub vsids: f64,
72 pub evsids: f64,
74 pub lrb: f64,
76}
77
78impl Default for HeuristicWeights {
79 fn default() -> Self {
80 Self {
81 vsids: 0.4,
82 evsids: 0.3,
83 lrb: 0.3,
84 }
85 }
86}
87
88impl Snapshot {
89 pub fn to_json(&self) -> Result<String, serde_json::Error> {
91 serde_json::to_string_pretty(self)
92 }
93
94 pub fn from_json(json: &str) -> Result<Self, serde_json::Error> {
96 serde_json::from_str(json)
97 }
98}