All Downloads are FREE. Search and download functionalities are using the official Maven repository.

it.unibo.alchemist.model.timedistributions.RandomDiracComb Maven / Gradle / Ivy

Go to download

Abstract, incarnation independent implementations of the Alchemist's interfaces. Provides support for those who want to write incarnations.

There is a newer version: 35.0.1
Show newest version
/*
 * Copyright (C) 2010-2023, Danilo Pianini and contributors
 * listed, for each module, in the respective subproject's build.gradle.kts file.
 *
 * This file is part of Alchemist, and is distributed under the terms of the
 * GNU General Public License, with a linking exception,
 * as described in the file LICENSE in the Alchemist distribution's top directory.
 */
package it.unibo.alchemist.model.timedistributions;

import it.unibo.alchemist.model.times.DoubleTime;
import org.apache.commons.math3.random.RandomGenerator;

import it.unibo.alchemist.model.Time;

/**
 * A {@link DiracComb} whose rate is determined (uniformly) randomly within the provided bounds.
 * 
 * @param  concentration type
 */
public class RandomDiracComb extends DiracComb {

    private static final long serialVersionUID = 1L;

    /**
     * @param rng
     *            the {@link RandomGenerator}
     * @param start
     *            the start {@link Time}
     * @param minRate
     *            the minimum rate
     * @param maxRate
     *            the maximum rate
     */
    public RandomDiracComb(final RandomGenerator rng, final Time start, final double minRate, final double maxRate) {
        super(start, minRate + (maxRate - minRate) * rng.nextDouble());
        if (minRate > maxRate || maxRate <= 0 || minRate <= 0) {
            throw new IllegalArgumentException("Invalid rate values: {min=" + minRate + ", max=" + maxRate + "}.");
        }
    }

    /**
     * @param rng
     *            the {@link RandomGenerator}
     * @param minRate
     *            the minimum rate
     * @param maxRate
     *            the maximum rate
     */
    public RandomDiracComb(final RandomGenerator rng, final double minRate, final double maxRate) {
        this(rng, new DoubleTime(minRate * rng.nextDouble()), minRate, maxRate);
        if (minRate > maxRate || maxRate <= 0) {
            throw new IllegalArgumentException("Invalid rate values: {min=" + minRate + ", max=" + maxRate + "}.");
        }
    }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy