Skip to content

Commit 179af4b

Browse files
committed
feat: Add option to specify mass matrix update frequency
1 parent 359362d commit 179af4b

File tree

1 file changed

+19
-1
lines changed

1 file changed

+19
-1
lines changed

src/adapt_strategy.rs

Lines changed: 19 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ pub struct GlobalStrategy<M: Math, A: MassMatrixAdaptStrategy<M>> {
3232
final_step_size_window: u64,
3333
tuning: bool,
3434
has_initial_mass_matrix: bool,
35+
last_update: u64,
3536
}
3637

3738
#[derive(Debug, Clone, Copy)]
@@ -42,6 +43,7 @@ pub struct AdaptOptions<S: Debug + Default> {
4243
pub step_size_window: f64,
4344
pub mass_matrix_switch_freq: u64,
4445
pub early_mass_matrix_switch_freq: u64,
46+
pub mass_matrix_update_freq: u64,
4547
}
4648

4749
impl<S: Debug + Default> Default for AdaptOptions<S> {
@@ -53,6 +55,7 @@ impl<S: Debug + Default> Default for AdaptOptions<S> {
5355
step_size_window: 0.15,
5456
mass_matrix_switch_freq: 80,
5557
early_mass_matrix_switch_freq: 10,
58+
mass_matrix_update_freq: 1,
5659
}
5760
}
5861
}
@@ -104,6 +107,7 @@ impl<M: Math, A: MassMatrixAdaptStrategy<M>> AdaptStrategy<M> for GlobalStrategy
104107
final_step_size_window: final_second_step_size,
105108
tuning: true,
106109
has_initial_mass_matrix: true,
110+
last_update: 0,
107111
}
108112
}
109113

@@ -150,10 +154,24 @@ impl<M: Math, A: MassMatrixAdaptStrategy<M>> AdaptStrategy<M> for GlobalStrategy
150154
// the switch frequency.
151155
let could_switch = self.mass_matrix.background_count() >= switch_freq;
152156
let is_late = switch_freq + draw > self.final_step_size_window;
157+
158+
let mut force_update = false;
153159
if could_switch && (!is_late) {
154160
self.mass_matrix.switch(math);
161+
force_update = true;
162+
}
163+
164+
let did_change = if force_update
165+
| (draw - self.last_update >= self.options.mass_matrix_update_freq)
166+
{
167+
self.mass_matrix.update_potential(math, potential)
168+
} else {
169+
false
170+
};
171+
172+
if did_change {
173+
self.last_update = draw;
155174
}
156-
let did_change = self.mass_matrix.update_potential(math, potential);
157175
if is_late {
158176
self.step_size.use_mean_sym();
159177
}

0 commit comments

Comments
 (0)