public QuantumStabilizerAlgorithm(IQuantumStatedItem item, double strength = 1.0, bool importState = true) { Contract.Requires(item != null); Contract.Requires(strength > 0.0); this.item = new ItemStabilizer(item); this.strength = strength; if (importState) ImportState(); }
public ItemStabilizer(IQuantumStatedItem item) { Contract.Requires(item != null); this.item = item; }
private static void Restore(IQuantumStatedItem[] items, List<QuantumState> prevItems) { for (int idx = 0; idx < items.Length; idx++) items[idx].State = prevItems[idx]; }
private static void Tunneling(IQuantumStatedItem[] items, double strength) { double s2 = strength / 2.0; foreach (var item in items) { double noise = (RandomGenerator.Random.NextDouble() * strength) - s2; item.State += noise; } }
private static void Save(List<QuantumState> prevItems, IQuantumStatedItem[] items) { for (int idx = 0; idx < items.Length; idx++) prevItems[idx] = items[idx].State; }