diff --git a/src/main/java/avatartranslator/AvatarRandom.java b/src/main/java/avatartranslator/AvatarRandom.java index 71c60bd60257fa83e9eb2cf9e8a55b4da27da138..3082e3c4dcb957c8c8332203f9ddd757ac0e1b38 100644 --- a/src/main/java/avatartranslator/AvatarRandom.java +++ b/src/main/java/avatartranslator/AvatarRandom.java @@ -57,12 +57,14 @@ public class AvatarRandom extends AvatarStateMachineElement { public final static int RANDOM_TRIANGULAR_LAW = 1; public final static int RANDOM_GAUSSIAN_LAW = 2; public final static int RANDOM_LOG_NORMAL_LAW = 3; - public final static String[] DISTRIBUTION_LAWS = {"Uniform", "Triangular", "Gaussian", "Log normal"}; - public final static String[] DISTRIBUTION_LAWS_SHORT = {"", " ^", "Ä", "ln"}; - - public final static int[] NB_OF_EXTRA_ATTRIBUTES = {0, 1, 1, 2}; - public final static String[] LABELS_OF_EXTRA_ATTRIBUTES_1 = {"", "triangle top", "standard deviation", "standard deviation"}; - public final static String[] LABELS_OF_EXTRA_ATTRIBUTES_2 = {"", "", "", "mean"}; + public final static int RANDOM_EXPONENTIAL_LAW = 4; + public final static int RANDOM_WEIBULL_LAW = 5; + public final static String[] DISTRIBUTION_LAWS = {"Uniform", "Triangular", "Gaussian", "Log normal", "Exponential", "Weibull"}; + public final static String[] DISTRIBUTION_LAWS_SHORT = {"", " ^", "Ä", "ln", "e^", "w"}; + + public final static int[] NB_OF_EXTRA_ATTRIBUTES = {0, 1, 1, 2, 1, 2}; + public final static String[] LABELS_OF_EXTRA_ATTRIBUTES_1 = {"", "triangle top", "standard deviation", "standard deviation", "mean", "shape"}; + public final static String[] LABELS_OF_EXTRA_ATTRIBUTES_2 = {"", "", "", "mean", "", "scale"}; protected int functionId; protected String extraAttribute1; protected String extraAttribute2; diff --git a/src/main/java/avatartranslator/directsimulation/AvatarSimulationBlock.java b/src/main/java/avatartranslator/directsimulation/AvatarSimulationBlock.java index 21f5616d1d3aee34a1856373507d01d58a01e04b..c251c3074ee91ee51ee24dfb9b72ec188accf61d 100644 --- a/src/main/java/avatartranslator/directsimulation/AvatarSimulationBlock.java +++ b/src/main/java/avatartranslator/directsimulation/AvatarSimulationBlock.java @@ -755,6 +755,20 @@ public class AvatarSimulationBlock { TraceManager.addDev("Exception on log normal: " + e.getMessage()); return minV; } + case AvatarRandom.RANDOM_EXPONENTIAL_LAW: + try { + return (int) (Math.floor(MyMath.exponentialDistribution( (double) (minV), (double) (maxV), extra1) )); + } catch (Exception e) { + TraceManager.addDev("Exception on exponential distribution: " + e.getMessage()); + return minV; + } + case AvatarRandom.RANDOM_WEIBULL_LAW: + try { + return (int) (Math.floor(MyMath.weibullDistribution( (double) (minV), (double) (maxV), extra1, extra2) )); + } catch (Exception e) { + TraceManager.addDev("Exception on weibull distribution: " + e.getMessage()); + return minV; + } } return minV; } diff --git a/src/main/java/myutil/GraphicLib.java b/src/main/java/myutil/GraphicLib.java index 71672b7218ac8828bc40baf7f135e7c8a9c73397..12c0165d06e802b6d8e8d6b6830f72234bb1b976 100644 --- a/src/main/java/myutil/GraphicLib.java +++ b/src/main/java/myutil/GraphicLib.java @@ -145,12 +145,12 @@ public final class GraphicLib { g2.drawLine(x1, y1, x2, y2); g2.setStroke(normalStroke); - // extremite 1 + // end 1 if ((type == 0) || (type == 2)) { drawArrow(g, x1, y1, x2, y2, head, length, full); } - // extremite 2 + // end 2 if ((type == 0) || (type == 1)) { drawArrow(g, x2, y2, x1, y1, head, length, full); } diff --git a/src/main/java/myutil/MyMath.java b/src/main/java/myutil/MyMath.java index f780ca1bbf3cf6281f045eb3b0ea335c9332e84e..da0def5cb4ce6d996b2245f8bf4c1a9cd392780f 100644 --- a/src/main/java/myutil/MyMath.java +++ b/src/main/java/myutil/MyMath.java @@ -42,7 +42,7 @@ package myutil; import java.util.Random; -import org.apache.commons.math3.distribution.LogNormalDistribution; +import org.apache.commons.math3.distribution.*; /** * Class MyMath @@ -142,6 +142,27 @@ public class MyMath { return val; } + public static double exponentialDistribution(double a, double b, double mean) { + ExponentialDistribution ed = new ExponentialDistribution(mean); + double val = ed.sample(); + val += a; + if (val > b) { + return exponentialDistribution(a, b, mean); + } + return val; + } + + public static double weibullDistribution(double a, double b, double shape, double scale) { + WeibullDistribution wd = new WeibullDistribution(shape, scale); + double val = wd.sample(); + val += a; + if (val > b) { + return weibullDistribution(a, b, shape, scale); + } + return val; + } + + diff --git a/src/main/java/ui/ucd/TGConnectorUC.java b/src/main/java/ui/ucd/TGConnectorUC.java index 9b100d0c63b61fcb1ce3d9b738ae850d56152b7f..69e81ae21af04a0e4103812a76dd8d9e85bf1ccb 100755 --- a/src/main/java/ui/ucd/TGConnectorUC.java +++ b/src/main/java/ui/ucd/TGConnectorUC.java @@ -68,7 +68,7 @@ public abstract class TGConnectorUC extends TGConnector { @Override protected void drawLastSegment(Graphics g, int x1, int y1, int x2, int y2){ //g.drawLine(x1, y1, x2, y2); - GraphicLib.dashedArrowWithLine(g, 1, 1, 0, x1, y1, x2, y2, false); + GraphicLib.dashedArrowWithLine(g, 1, 1, 12, x1, y1, x2, y2, false); // Indicate semantics w = g.getFontMetrics().stringWidth(value);