List of usage examples for org.apache.mahout.math.random ChineseRestaurant ChineseRestaurant
public ChineseRestaurant(double alpha)
From source file:com.mapr.franz.Traffic.java
License:Apache License
public static void main(String[] args) throws InterruptedException, IOException, ServiceException { Options options = parseOptions(args); log.warn("Options = {}", options.toString()); double scale = Math.log(options.ratio) / 2; Client client = new Client(Collections.singleton(new PeerInfo(options.host, options.port))); History recorder = new History(1, 10, 30).logTicks(); Random gen = RandomUtils.getRandom(); ChineseRestaurant topicSampler = new ChineseRestaurant(options.alpha); Exponential interval = new Exponential(1, gen); double t = 0; long t0 = System.nanoTime(); long messageId = 0; while (messageId < options.max) { double rate = options.peak * Math.exp(-scale * (Math.cos(2 * Math.PI * t / options.period) + 1)); double dt = interval.nextDouble() / rate; t += dt;/*w w w . j a v a 2 s . c o m*/ double now = (System.nanoTime() - t0) / 1e9; if (t > now + 0.01) { double millis = Math.floor((t - now) * 1000); double nanos = Math.rint((t - now) * 1e9 - millis * 1e6); Thread.sleep((long) millis, (int) nanos); } String topic = "topic-" + topicSampler.sample(); String message = "m-" + (++messageId); client.sendMessage(topic, message); recorder.message(topic); log.debug("Sent {} / {}", topic, message); if ((messageId % 10000) == 0) { log.warn("Sent {} messages", messageId); } } }