Skip to content

Commit

Permalink
Merge pull request #7 from gadcam/master
Browse files Browse the repository at this point in the history
 Adds DrugNetwork typology
  • Loading branch information
EdgarLopezPhD committed Jan 12, 2019
2 parents 589efbf + 778e0fc commit 5f11995
Show file tree
Hide file tree
Showing 31 changed files with 503 additions and 122 deletions.
5 changes: 3 additions & 2 deletions PaySim.properties
@@ -1,8 +1,8 @@
#PaySim parameters
seed=time
nbSteps=720
multiplier=0.05
nbClients=600000
multiplier=1
nbClients=20000
nbFraudsters=1000
nbMerchants=34749
nbBanks=5
Expand All @@ -14,6 +14,7 @@ clientsProfiles=./paramFiles/clientsProfiles.csv
initialBalancesDistribution=./paramFiles/initialBalancesDistribution.csv
overdraftLimits=./paramFiles/overdraftLimits.csv
maxOccurrencesPerClient=./paramFiles/maxOccurrencesPerClient.csv
typologiesFolder=./paramFiles/typologies/
outputPath=./outputs/
saveToDB=0
dbUrl=jdbc:mysql://localhost:3306/paysim
Expand Down
2 changes: 1 addition & 1 deletion paramFiles/overdraftLimits.csv
Expand Up @@ -3,4 +3,4 @@ lowerbound,higherbound,overdraftLimit
0,50000,-25000
50000,100000,-75000
100000,200000,-150000
200000,,200000
200000,,-200000
32 changes: 32 additions & 0 deletions paramFiles/typologies/DrugNetworkOne.graphml
@@ -0,0 +1,32 @@
<?xml version="1.0" encoding="UTF-8"?>
<graphml xmlns="http://graphml.graphdrawing.org/xmlns" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://graphml.graphdrawing.org/xmlns http://graphml.graphdrawing.org/xmlns/1.0/graphml.xsd">


<key id="count" for="node" attr.name="count" attr.type="int"/>
<key id="monthlySpending" for="node" attr.name="monthlySpending" attr.type="double"/>
<key id="thresholdForCashOut" for="node" attr.name="thresholdForCashOut" attr.type="double"/>

<key id="action" for="edge" attr.name="action" attr.type="string"/>
<key id="amount" for="edge" attr.name="amount" attr.type="double"/>
<key id="probAmountProfile" for="edge" attr.name="probAmountProfile" attr.type="string"/>

<graph id="DrugNetworkOne" edgedefault="directed">
<node id="DrugDealer">
<data key="thresholdForCashOut">1000</data>
</node>
<node id="DrugConsumers">
<data key="count">60</data>
<data key="monthlySpending">100</data>
</node>
<node id="CashSink"/>
<edge id="BuyDrugs" source="DrugConsumers" target="DrugDealer">
<data key="action">TRANSFER</data>
<data key="probAmountProfile">10:0.25, 20:0.50, 50:0.20, 200:0.05</data>
</edge>
<edge id="CashOutProfit" source="DrugDealer" target="CashSink">
<data key="action">CASH_OUT</data>
<data key="amount">1000</data>
</edge>
</graph>
</graphml>
49 changes: 49 additions & 0 deletions pom.xml
@@ -0,0 +1,49 @@
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<groupId>org.paysim</groupId>
<artifactId>paysim</artifactId>
<version>2.0-SNAPSHOT</version>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<source>8</source>
<target>8</target>
</configuration>
</plugin>
</plugins>
</build>
<repositories>
<repository>
<id>jitpack.io</id>
<url>https://jitpack.io</url>
</repository>
</repositories>
<dependencies>
<dependency>
<groupId>com.github.eclab</groupId>
<artifactId>mason</artifactId>
<version>0663315</version> <!-- Commit corresponding to a Mavenized version of MASON v19 -->
</dependency>

<!-- https://mvnrepository.com/artifact/org.apache.tinkerpop/tinkergraph-gremlin -->
<dependency>
<groupId>org.apache.tinkerpop</groupId>
<artifactId>tinkergraph-gremlin</artifactId>
<version>3.3.4</version>
</dependency>

<!-- https://mvnrepository.com/artifact/org.slf4j/slf4j-simple -->
<dependency>
<groupId>org.slf4j</groupId>
<artifactId>slf4j-simple</artifactId>
<version>1.7.25</version>
</dependency>
</dependencies>
</project>
@@ -1,4 +1,4 @@
package paysim;
package org.paysim.paysim;

import java.io.File;
import java.text.DateFormat;
Expand All @@ -7,21 +7,22 @@

import sim.engine.SimState;

import paysim.parameters.*;
import org.paysim.paysim.parameters.*;

import paysim.actors.Bank;
import paysim.actors.Client;
import paysim.actors.Fraudster;
import paysim.actors.Merchant;
import org.paysim.paysim.actors.Bank;
import org.paysim.paysim.actors.Client;
import org.paysim.paysim.actors.Fraudster;
import org.paysim.paysim.actors.Merchant;
import org.paysim.paysim.actors.networkdrugs.NetworkDrug;

import paysim.base.Transaction;
import paysim.base.ClientActionProfile;
import paysim.base.StepActionProfile;
import org.paysim.paysim.base.Transaction;
import org.paysim.paysim.base.ClientActionProfile;
import org.paysim.paysim.base.StepActionProfile;

import paysim.output.Output;
import org.paysim.paysim.output.Output;

public class PaySim extends SimState {
public static final double PAYSIM_VERSION = 1.0;
public static final double PAYSIM_VERSION = 2.0;
private static final String[] DEFAULT_ARGS = new String[]{"", "-file", "PaySim.properties", "5"};

public final String simulationName;
Expand Down Expand Up @@ -141,22 +142,20 @@ private void initActors() {
//Add the clients
System.out.println("NbClients: " + (int) (Parameters.nbClients * Parameters.multiplier));
for (int i = 0; i < Parameters.nbClients * Parameters.multiplier; i++) {
Client c = new Client(generateId(),
pickRandomBank(),
pickNextClientProfile(),
BalancesClients.pickNextBalance(random),
random,
Parameters.stepsProfiles.getTotalTargetCount());
Client c = new Client(this);
clients.add(c);
}

//Schedule clients to act at each step of the simulation
NetworkDrug.createNetwork(this, Parameters.typologiesFolder + TypologiesFiles.drugNetworkOne);

// Do not write code under this part otherwise clients will not be used in simulation
// Schedule clients to act at each step of the simulation
for (Client c : clients) {
schedule.scheduleRepeating(c);
}
}

private Map<String, ClientActionProfile> pickNextClientProfile() {
public Map<String, ClientActionProfile> pickNextClientProfile() {
Map<String, ClientActionProfile> profile = new HashMap<>();
for (String action : ActionTypes.getActions()) {
ClientActionProfile clientActionProfile = Parameters.clientsProfiles.pickNextActionProfile(action);
Expand Down Expand Up @@ -218,7 +217,7 @@ public Client pickRandomClient(String nameOrig) {
Client clientDest = null;

String nameDest = nameOrig;
while (nameOrig.equals(nameDest)){
while (nameOrig.equals(nameDest)) {
clientDest = clients.get(random.nextInt(clients.size()));
nameDest = clientDest.getName();
}
Expand All @@ -241,15 +240,19 @@ public ArrayList<Client> getClients() {
return clients;
}

public void addClient(Client c) {
clients.add(c);
}

public int getStepTargetCount() {
return Parameters.stepsProfiles.getTargetCount(currentStep);
}

public Map<String, Double> getStepProbabilities(){
public Map<String, Double> getStepProbabilities() {
return Parameters.stepsProfiles.getProbabilitiesPerStep(currentStep);
}

public StepActionProfile getStepAction(String action){
public StepActionProfile getStepAction(String action) {
return Parameters.stepsProfiles.getActionForStep(currentStep, action);
}
}
@@ -1,4 +1,4 @@
package paysim.actors;
package org.paysim.paysim.actors;

public class Bank extends SuperActor {
private static final String BANK_IDENTIFIER = "B";
Expand Down

0 comments on commit 5f11995

Please sign in to comment.