Example usage for org.apache.mahout.math.random ChineseRestaurant ChineseRestaurant

List of usage examples for org.apache.mahout.math.random ChineseRestaurant ChineseRestaurant

Introduction

In this page you can find the example usage for org.apache.mahout.math.random ChineseRestaurant ChineseRestaurant.

Prototype

public ChineseRestaurant(double alpha) 

Source Link

Document

Constructs a Dirichlet process sampler.

Usage

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);
        }
    }
}