Changeset 119 for branches/XmlTextWriterBranch/HeuristicLab.Random
- Timestamp:
- 04/14/08 17:49:47 (16 years ago)
- Location:
- branches/XmlTextWriterBranch
- Files:
-
- 2 edited
- 1 copied
Legend:
- Unmodified
- Added
- Removed
-
branches/XmlTextWriterBranch/HeuristicLab.Random/MersenneTwister.cs
r2 r119 48 48 49 49 public MersenneTwister() { 50 if 50 if(!init) seed((uint)DateTime.Now.Ticks); 51 51 init = true; 52 52 } … … 70 70 71 71 public void Reset() { 72 lock 72 lock(locker) 73 73 seed((uint)DateTime.Now.Ticks); 74 74 } 75 75 public void Reset(int s) { 76 lock 76 lock(locker) 77 77 seed((uint)s); 78 78 } 79 79 80 80 public int Next() { 81 lock 81 lock(locker) { 82 82 return (int)(rand_int32() >> 1); 83 83 } 84 84 } 85 85 public int Next(int maxVal) { 86 lock 87 if 86 lock(locker) { 87 if(maxVal <= 0) 88 88 throw new ArgumentException("The interval [0, " + maxVal + ") is empty"); 89 89 int limit = (Int32.MaxValue / maxVal) * maxVal; 90 90 int value = Next(); 91 while 91 while(value >= limit) value = Next(); 92 92 return value % maxVal; 93 93 } 94 94 } 95 95 public int Next(int minVal, int maxVal) { 96 lock 97 if 96 lock(locker) { 97 if(maxVal <= minVal) 98 98 throw new ArgumentException("The interval [" + minVal + ", " + maxVal + ") is empty"); 99 99 return Next(maxVal - minVal) + minVal; … … 101 101 } 102 102 public double NextDouble() { 103 lock 103 lock(locker) { 104 104 return rand_double53(); 105 105 } … … 107 107 108 108 #region Persistence Methods 109 public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid,IStorable> persistedObjects) { 110 XmlNode node = base.GetXmlNode(name, document, persistedObjects); 111 109 //public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid,IStorable> persistedObjects) { 110 // XmlNode node = base.GetXmlNode(name, document, persistedObjects); 111 112 // StringBuilder builder = new StringBuilder(); 113 // builder.Append(state[0]); 114 // for (int i = 1; i < state.Length; i++) { 115 // builder.Append(';'); 116 // builder.Append(state[i]); 117 // } 118 // XmlNode stateNode = document.CreateNode(XmlNodeType.Element, "State", null); 119 // stateNode.InnerText = builder.ToString(); 120 // node.AppendChild(stateNode); 121 122 // XmlNode pNode = document.CreateNode(XmlNodeType.Element, "P", null); 123 // pNode.InnerText = p.ToString(); 124 // node.AppendChild(pNode); 125 126 // XmlNode initNode = document.CreateNode(XmlNodeType.Element, "Init", null); 127 // initNode.InnerText = init.ToString(); 128 // node.AppendChild(initNode); 129 130 // return node; 131 //} 132 public override void Persist(string name, XmlWriter writer, IDictionary<Guid, IStorable> persistedObjects) { 133 base.Persist(name, writer, persistedObjects); 112 134 StringBuilder builder = new StringBuilder(); 113 135 builder.Append(state[0]); 114 for 136 for(int i = 1; i < state.Length; i++) { 115 137 builder.Append(';'); 116 138 builder.Append(state[i]); 117 139 } 118 XmlNode stateNode = document.CreateNode(XmlNodeType.Element, "State", null); 119 stateNode.InnerText = builder.ToString(); 120 node.AppendChild(stateNode); 121 122 XmlNode pNode = document.CreateNode(XmlNodeType.Element, "P", null); 123 pNode.InnerText = p.ToString(); 124 node.AppendChild(pNode); 125 126 XmlNode initNode = document.CreateNode(XmlNodeType.Element, "Init", null); 127 initNode.InnerText = init.ToString(); 128 node.AppendChild(initNode); 129 130 return node; 131 } 132 public override void Populate(XmlNode node, IDictionary<Guid,IStorable> restoredObjects) { 140 writer.WriteStartElement("State"); 141 writer.WriteValue(builder.ToString()); 142 writer.WriteEndElement(); // </State> 143 writer.WriteStartElement("P"); 144 writer.WriteValue(p.ToString()); 145 writer.WriteEndElement(); // </P> 146 writer.WriteStartElement("Init"); 147 writer.WriteValue(init.ToString()); 148 writer.WriteEndElement(); // </Init> 149 } 150 public override void Populate(XmlNode node, IDictionary<Guid, IStorable> restoredObjects) { 133 151 base.Populate(node, restoredObjects); 134 152 135 153 string stateString = node.SelectSingleNode("State").InnerText; 136 154 string[] tokens = stateString.Split(';'); 137 for 155 for(int i = 0; i < tokens.Length; i++) 138 156 state[i] = uint.Parse(tokens[i]); 139 157 p = int.Parse(node.SelectSingleNode("P").InnerText); … … 145 163 public void seed(uint s) { 146 164 state[0] = s & 0xFFFFFFFFU; 147 for 165 for(int i = 1; i < n; ++i) { 148 166 state[i] = 1812433253U * (state[i - 1] ^ (state[i - 1] >> 30)) + (uint)i; 149 167 state[i] &= 0xFFFFFFFFU; … … 154 172 seed(19650218U); 155 173 int i = 1, j = 0; 156 for 174 for(int k = ((n > array.Length) ? n : array.Length); k > 0; --k) { 157 175 state[i] = (state[i] ^ ((state[i - 1] ^ (state[i - 1] >> 30)) * 1664525U)) 158 176 + array[j] + (uint)j; … … 160 178 ++j; 161 179 j %= array.Length; 162 if 163 } 164 for 180 if((++i) == n) { state[0] = state[n - 1]; i = 1; } 181 } 182 for(int k = n - 1; k > 0; --k) { 165 183 state[i] = (state[i] ^ ((state[i - 1] ^ (state[i - 1] >> 30)) * 1566083941U)) - (uint)i; 166 184 state[i] &= 0xFFFFFFFFU; 167 if 185 if((++i) == n) { state[0] = state[n - 1]; i = 1; } 168 186 } 169 187 state[0] = 0x80000000U; … … 174 192 #region Random Number Generation Methods 175 193 private uint rand_int32() { 176 if 194 if(p == n) gen_state(); 177 195 uint x = state[p++]; 178 196 x ^= (x >> 11); … … 202 220 } 203 221 private void gen_state() { 204 for 222 for(int i = 0; i < (n - m); ++i) 205 223 state[i] = state[i + m] ^ twiddle(state[i], state[i + 1]); 206 for 224 for(int i = n - m; i < (n - 1); ++i) 207 225 state[i] = state[i + m - n] ^ twiddle(state[i], state[i + 1]); 208 226 state[n - 1] = state[m - 1] ^ twiddle(state[n - 1], state[0]); -
branches/XmlTextWriterBranch/HeuristicLab.Random/NormalDistributedRandom.cs
r2 r119 513 513 514 514 515 public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) { 516 XmlNode node = base.GetXmlNode(name, document, persistedObjects); 517 518 XmlNode muNode = document.CreateNode(XmlNodeType.Element, "Mu", null); 519 muNode.InnerText = mu.ToString(); 520 node.AppendChild(muNode); 521 522 XmlNode sigmaNode = document.CreateNode(XmlNodeType.Element, "Sigma", null); 523 sigmaNode.InnerText = sigma.ToString(); 524 node.AppendChild(sigmaNode); 525 526 node.AppendChild(PersistenceManager.Persist("UniformRandom", uniform, document, persistedObjects)); 527 528 return node; 515 //public override XmlNode GetXmlNode(string name, XmlDocument document, IDictionary<Guid, IStorable> persistedObjects) { 516 // XmlNode node = base.GetXmlNode(name, document, persistedObjects); 517 518 // XmlNode muNode = document.CreateNode(XmlNodeType.Element, "Mu", null); 519 // muNode.InnerText = mu.ToString(); 520 // node.AppendChild(muNode); 521 522 // XmlNode sigmaNode = document.CreateNode(XmlNodeType.Element, "Sigma", null); 523 // sigmaNode.InnerText = sigma.ToString(); 524 // node.AppendChild(sigmaNode); 525 526 // node.AppendChild(PersistenceManager.Persist("UniformRandom", uniform, document, persistedObjects)); 527 528 // return node; 529 //} 530 public override void Persist(string name, XmlWriter writer, IDictionary<Guid, IStorable> persistedObjects) { 531 base.Persist(name, writer, persistedObjects); 532 writer.WriteStartElement("Mu"); 533 writer.WriteValue(mu.ToString()); 534 writer.WriteEndElement(); 535 writer.WriteStartElement("Sigma"); 536 writer.WriteValue(sigma.ToString()); 537 writer.WriteEndElement(); 538 PersistenceManager.Persist("UniformRandom", uniform, writer, persistedObjects); 529 539 } 530 540
Note: See TracChangeset
for help on using the changeset viewer.