/// <summary> /// Pick an array element with probability proportional to exp(-cost). /// </summary> public static int sample_by_costs(Floatarray costs) { Doublearray p = new Doublearray(); p.Copy(costs); double mincost = NarrayUtil.Min(costs); p -= mincost; for (int i = 0; i < p.Length(); i++) { p.UnsafePut1d(i, Math.Exp(-p.UnsafeAt1d(i))); } double sump = NarrayUtil.Sum(p); p /= sump; double choice = rnd.NextDouble(); double s = 0; for (int i = 0; i < p.Length(); i++) { s += p[i]; if (choice < s) { return(i); } } // shouldn't happen... return(costs.Length() - 1); }
public override void Save(BinaryWriter writer) { if (lenetWrap.IsEmpty) { BinIO.string_write(writer, "<null/>"); return; } double[] dbuffer; int size; // receive buffer from wrapped lenet lenetWrap.SaveNetworkToBuffer(out size, out dbuffer); lenetparam.Resize(size); for (int i = 0; i < size; i++) { lenetparam.UnsafePut1d(i, dbuffer[i]); } BinIO.string_write(writer, "<object>"); //BinIO.string_write(writer, comp.Name); // write lenet arguments BinIO.scalar_write(writer, lenetWrap.Classes.Length); for (int i = 0; i < lenetWrap.Classes.Length; i++) { BinIO.scalar_write(writer, lenetWrap.Classes[i]); } BinIO.scalar_write(writer, Convert.ToByte(lenetWrap.TanhSigmoid)); BinIO.scalar_write(writer, Convert.ToByte(lenetWrap.NetNorm)); BinIO.scalar_write(writer, Convert.ToByte(lenetWrap.AsciiTarget)); // save Narray to stream BinIO.narray_write(writer, lenetparam); BinIO.string_write(writer, "</object>"); }
/// <summary> /// Pick an array element with probability proportional to exp(-cost). /// </summary> public static int sample_by_costs(Floatarray costs) { Doublearray p = new Doublearray(); p.Copy(costs); double mincost = NarrayUtil.Min(costs); p -= mincost; for (int i = 0; i < p.Length(); i++) p.UnsafePut1d(i, Math.Exp(-p.UnsafeAt1d(i))); double sump = NarrayUtil.Sum(p); p /= sump; double choice = rnd.NextDouble(); double s = 0; for (int i = 0; i < p.Length(); i++) { s += p[i]; if (choice < s) return i; } // shouldn't happen... return costs.Length() - 1; }