Crate iterative_methods[−][src]
Expand description
Iterative methods
Implements iterative methods and utilities for using and developing them as StreamingIterators. A series of blog posts provide a gentle introduction.
… but ok fine, here is a really quick example:
// Problem: minimize the convex parabola f(x) = x^2 + x let function = |x| x * x + x; // An iterative solution by gradient descent let derivative = |x| 2.0 * x + 1.0; let step_size = 0.2; let x_0 = 2.0; // Au naturale: let mut x = x_0; for i in 0..10 { x -= step_size * derivative(x); println!("x_{} = {:.2}; f(x_{}) = {:.4}", i, x, i, x * x + x); } // Using replaceable components: let dd = DerivativeDescent::new(function, derivative, step_size, x_0); let dd = enumerate(dd); let mut dd = dd.take(10); while let Some(&Numbered{item: Some(ref curr), count}) = dd.next() { println!("x_{} = {:.2}; f(x_{}) = {:.4}", count, curr.x, count, curr.value()); }
Both produce the exact same output (below), and the first common approach is much easier to look at, the descent step is right there. The second separates the algorithm and every other concern into an easily reusable and composable components. If that sounds useful, have fun exploring.
x_0 = 1.00; f(x_0) = 2.0000 x_1 = 0.40; f(x_1) = 0.5600 x_2 = 0.04; f(x_2) = 0.0416 x_3 = -0.18; f(x_3) = -0.1450 x_4 = -0.31; f(x_4) = -0.2122 x_5 = -0.38; f(x_5) = -0.2364 x_6 = -0.43; f(x_6) = -0.2451 x_7 = -0.46; f(x_7) = -0.2482 x_8 = -0.47; f(x_8) = -0.2494 x_9 = -0.48; f(x_9) = -0.2498
Modules
algorithms | |
conjugate_gradient | Implementation of conjugate gradient following lecture notes by Shen. Thanks Shen! |
derivative_descent | Library code for example from crate top-level documentation |
utils |
Structs
Annotate | An adaptor that annotates every underlying item |
AnnotatedResult | Store a generic annotation next to the state. |
Enumerate | An adaptor that enumerates items. |
ExtractValue | An adaptor that converts items from |
Numbered | A struct that wraps an |
ReservoirSample | Adaptor to reservoir sample. |
StepBy | An iterator for stepping iterators by a custom amount. |
TakeUntil | An adaptor that returns initial elements until and including the first satisfying a predicate. |
Time | Adaptor that times every call to |
TimedResult | Wrapper for Time. |
Weight | Adaptor wrapping items with a computed weight. |
WeightedDatum | Wrapper for Weight. |
WeightedReservoirSample | Adaptor that reservoir samples with weights |
WriteYamlDocuments | Write items of StreamingIterator to a Yaml file. |
Enums
UntilState |
Traits
YamlDataType | Define a trait object for converting to YAML objects. |
Functions
assess | Annotate every underlying item with its score, as defined by |
enumerate | A constructor for Enumerate. |
extract_value | The constructor for ExtractValue. Apply it to a StreamingIterator with
|
inspect | Apply |
last | Get the item before the first None, assuming any exist. |
new_datum | Constructor for WeightedDatum. |
reservoir_sample | An adaptor for which the items are random samples of the underlying iterator up to the item processed. The constructor for ReservoirSample. |
step_by | Creates an iterator starting at the same point, but stepping by the given amount at each iteration. |
take_until | Creates an iterator which returns initial elements until and including the first satisfying a predicate. |
time | Wrap each value of a streaming iterator with the durations: |
wd_iterable | Annotates items of an iterable with a weight using a function |
weighted_reservoir_sample | Create a random sample of the underlying weighted stream. |
write_yaml_documents | Adaptor that writes each item to a YAML document. |
write_yaml_object | Function used by WriteYamlDocuments to specify how to write each item to file. |