From 3a0cdd218f75c771917c077b300ee1da6aee5754 Mon Sep 17 00:00:00 2001 From: TheColdIce Date: Thu, 23 Nov 2023 15:22:14 +0000 Subject: [PATCH] TCI --- AMLsim/Dockerfile | 2 +- AMLsim/paramFiles/10K_accts.zip | Bin 0 -> 23582 bytes AMLsim/paramFiles/10K_accts/accounts.csv | 24 ++-- AMLsim/paramFiles/10K_accts/alertPatterns.csv | 38 +++--- AMLsim/paramFiles/10K_accts/conf.json | 74 ++---------- AMLsim/paramFiles/10K_accts/conf_old.json | 113 ++++++++++++++++++ AMLsim/paramFiles/10K_accts/normalModels.csv | 20 +++- AMLsim/scripts/generate_scalefree.py | 2 +- AMLsim/src/main/java/amlsim/AMLSim.java | 19 +-- AMLsim/src/main/java/amlsim/Account.java | 2 +- AMLsim/src/main/java/amlsim/AccountGroup.java | 5 + .../src/main/java/amlsim/SimProperties.java | 10 +- .../model/normal/MutualTransactionModel.java | 1 + .../target/classes/amlsim/SimProperties.class | Bin 9487 -> 9503 bytes .../amlsim/TargetedTransactionAmount.class | Bin 1640 -> 1644 bytes .../classes/amlsim/dists/NormalDist.class | Bin 4267 -> 4601 bytes .../amlsim/dists/NormalDistQuick.class | Bin 39147 -> 42080 bytes AMLsim/target/classes/amlsim/dists/Num.class | Bin 2015 -> 2121 bytes .../amlsim/dists/TruncatedNormal.class | Bin 3664 -> 3695 bytes .../amlsim/dists/TruncatedNormalQuick.class | Bin 1140 -> 1136 bytes .../amlsim/model/aml/BipartiteTypology.class | Bin 3758 -> 3750 bytes .../amlsim/model/aml/CycleTypology.class | Bin 3508 -> 3504 bytes .../amlsim/model/aml/FanInTypology.class | Bin 4116 -> 4144 bytes .../amlsim/model/aml/FanOutTypology.class | Bin 4098 -> 4126 bytes .../model/aml/GatherScatterTypology.class | Bin 4738 -> 4764 bytes .../amlsim/model/aml/RandomTypology.class | Bin 3282 -> 3296 bytes .../model/aml/ScatterGatherTypology.class | Bin 3958 -> 3994 bytes .../amlsim/model/aml/StackTypology.class | Bin 4904 -> 4900 bytes .../model/normal/FanInTransactionModel.class | Bin 3251 -> 3277 bytes .../model/normal/FanOutTransactionModel.class | Bin 3275 -> 3301 bytes .../normal/ForwardTransactionModel.class | Bin 4132 -> 4185 bytes .../model/normal/MutualTransactionModel.class | Bin 3054 -> 3105 bytes .../normal/PeriodicalTransactionModel.class | Bin 3215 -> 3214 bytes .../model/normal/SingleTransactionModel.class | Bin 2217 -> 2229 bytes .../TargetedTransactionAmountTests.class | Bin 4111 -> 4172 bytes gnn/.gitignore | 2 + gnn/README.md | 9 ++ gnn/__pycache__/data.cpython-311.pyc | Bin 0 -> 4995 bytes gnn/__pycache__/modules.cpython-311.pyc | Bin 0 -> 7337 bytes gnn/data.py | 63 ++++++++++ gnn/main.py | 109 +++++++++++++++++ gnn/modules.py | 74 ++++++++++++ .../TransactionNetwork.py | 3 +- .../TransactionNetwork.cpython-310.pyc | Bin 12740 -> 12740 bytes transaction-network-explorer/tne-cpu.ipynb | 4 +- 45 files changed, 456 insertions(+), 118 deletions(-) create mode 100644 AMLsim/paramFiles/10K_accts.zip create mode 100644 AMLsim/paramFiles/10K_accts/conf_old.json create mode 100644 gnn/.gitignore create mode 100644 gnn/README.md create mode 100644 gnn/__pycache__/data.cpython-311.pyc create mode 100644 gnn/__pycache__/modules.cpython-311.pyc create mode 100644 gnn/data.py create mode 100644 gnn/main.py create mode 100644 gnn/modules.py diff --git a/AMLsim/Dockerfile b/AMLsim/Dockerfile index 5fa4a809..77f05cad 100644 --- a/AMLsim/Dockerfile +++ b/AMLsim/Dockerfile @@ -37,4 +37,4 @@ COPY index.html index.html COPY pom.xml pom.xml COPY target target -ENTRYPOINT ["sh", "scripts/run.sh"] \ No newline at end of file +ENTRYPOINT ["sh", "scripts/run.sh"] diff --git a/AMLsim/paramFiles/10K_accts.zip b/AMLsim/paramFiles/10K_accts.zip new file mode 100644 index 0000000000000000000000000000000000000000..9b5a9d4aead17da565907f00af31ff3dad7346f8 GIT binary patch literal 23582 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 OiL~@^VXzzh{`G&((wJ%h literal 0 HcmV?d00001 diff --git a/AMLsim/paramFiles/10K_accts/accounts.csv b/AMLsim/paramFiles/10K_accts/accounts.csv index 13f17163..30f2ae9b 100644 --- a/AMLsim/paramFiles/10K_accts/accounts.csv +++ b/AMLsim/paramFiles/10K_accts/accounts.csv @@ -1,13 +1,13 @@ count,min_balance,max_balance,country,business_type,bank_id -2768,10000,50000,SWE,I,swedbank -1347,10000,50000,SWE,I,handelsbanken -371,10000,50000,SWE,I,seb -2694,10000,50000,SWE,I,nordea -104,10000,50000,SWE,I,danske -458,10000,50000,SWE,I,länsförsäkringar -748,10000,50000,SWE,I,ica -362,10000,50000,SWE,I,sparbanken -23,10000,50000,SWE,I,ålandsbanken -224,10000,50000,SWE,I,marginalen -625,10000,50000,SWE,I,svea -276,10000,50000,SWE,I,skandia +2768,10000,20000,SWE,I,swedbank +1347,5000,10000,SWE,I,handelsbanken +371,5000,10000,SWE,I,seb +2694,5000,10000,SWE,I,nordea +104,5000,10000,SWE,I,danske +458,5000,10000,SWE,I,länsförsäkringar +748,5000,10000,SWE,I,ica +362,5000,10000,SWE,I,sparbanken +23,5000,10000,SWE,I,ålandsbanken +224,5000,10000,SWE,I,marginalen +625,5000,10000,SWE,I,svea +276,5000,10000,SWE,I,skandia \ No newline at end of file diff --git a/AMLsim/paramFiles/10K_accts/alertPatterns.csv b/AMLsim/paramFiles/10K_accts/alertPatterns.csv index 6ef8ebfb..bf6832fa 100755 --- a/AMLsim/paramFiles/10K_accts/alertPatterns.csv +++ b/AMLsim/paramFiles/10K_accts/alertPatterns.csv @@ -1,20 +1,20 @@ count,type,schedule_id,min_accounts,max_accounts,min_amount,max_amount,min_period,max_period,bank_id,is_sar,source_type -1,fan_out,2,7,7,100,1000,1,365,,True,CASH -1,fan_in,2,7,7,100,1000,1,365,,True,CASH -1,cycle,2,7,7,100,1000,1,365,,True,CASH -1,bipartite,2,7,7,100,1000,1,365,,True,CASH -1,stack,2,7,7,100,1000,1,365,,True,CASH -1,scatter_gather,2,7,7,100,1000,1,365,,True,CASH -1,gather_scatter,2,7,7,100,1000,1,365,,True,CASH -1,fan_in,2,4,4,100,1000,1,365,swedbank,True,CASH -1,fan_in,2,4,4,100,1000,1,365,handelsbanken,True,CASH -1,fan_in,2,4,4,100,1000,1,365,seb,True,CASH -1,fan_in,2,4,4,100,1000,1,365,nordea,True,CASH -1,fan_in,2,4,4,100,1000,1,365,danske,True,CASH -1,fan_in,2,4,4,100,1000,1,365,länsförsäkringar,True,CASH -1,fan_in,2,4,4,100,1000,1,365,ica,True,CASH -1,fan_in,2,4,4,100,1000,1,365,sparbanken,True,CASH -1,fan_in,2,4,4,100,1000,1,365,ålandsbanken,True,CASH -1,fan_in,2,4,4,100,1000,1,365,marginalen,True,CASH -1,fan_in,2,4,4,100,1000,1,365,svea,True,CASH -1,fan_in,2,4,4,100,1000,1,365,skandia,True,CASH +1,fan_out,2,7,7,100,1000,1,168,,True,CASH +1,fan_in,2,7,7,100,1000,1,168,,True,CASH +1,cycle,2,7,7,100,1000,1,168,,True,CASH +1,bipartite,2,7,7,100,1000,1,168,,True,CASH +1,stack,2,7,7,100,1000,1,168,,True,CASH +1,scatter_gather,2,7,7,100,1000,1,168,,True,CASH +1,gather_scatter,2,7,7,100,1000,1,168,,True,CASH +1,fan_in,2,4,4,100,1000,1,168,swedbank,True,CASH +1,fan_in,2,4,4,100,1000,1,168,handelsbanken,True,CASH +1,fan_in,2,4,4,100,1000,1,168,seb,True,CASH +1,fan_in,2,4,4,100,1000,1,168,nordea,True,CASH +1,fan_in,2,4,4,100,1000,1,168,danske,True,CASH +1,fan_in,2,4,4,100,1000,1,168,länsförsäkringar,True,CASH +1,fan_in,2,4,4,100,1000,1,168,ica,True,CASH +1,fan_in,2,4,4,100,1000,1,168,sparbanken,True,CASH +1,fan_in,2,4,4,100,1000,1,168,ålandsbanken,True,CASH +1,fan_in,2,4,4,100,1000,1,168,marginalen,True,CASH +1,fan_in,2,4,4,100,1000,1,168,svea,True,CASH +1,fan_in,2,4,4,100,1000,1,168,skandia,True,CASH diff --git a/AMLsim/paramFiles/10K_accts/conf.json b/AMLsim/paramFiles/10K_accts/conf.json index e6e5d409..e04d019e 100644 --- a/AMLsim/paramFiles/10K_accts/conf.json +++ b/AMLsim/paramFiles/10K_accts/conf.json @@ -2,26 +2,25 @@ "general": { "random_seed": 0, "simulation_name": "10K_accts", - "total_steps": 367, - "base_date": "2023-01-01" + "total_steps": 170 }, "default": { "min_amount": 1, "max_amount": 150000, "mean_amount": 637, - "std_amount": 300, - "mean_amount_sar": 1000, - "std_amount_sar": 300, + "std_amount": 3000, + "mean_amount_sar": 2000, + "std_amount_sar": 3000, "prob_income": 0.0, "mean_income": 0.0, "std_income": 0.0, "prob_income_sar": 0.0, "mean_income_sar": 0.0, "std_income_sar": 0.0, - "mean_outcome": 1000, - "std_outcome": 500, - "mean_outcome_sar": 1000, - "std_outcome_sar": 500, + "mean_outcome": 200.0, + "std_outcome": 500.0, + "mean_outcome_sar": 0.0, + "std_outcome_sar": 0.0, "mean_phone_change_frequency": 1460, "std_phone_change_frequency": 365, "mean_phone_change_frequency_sar": 365, @@ -30,31 +29,7 @@ "std_bank_change_frequency": 1, "mean_bank_change_frequency_sar": 1460, "std_bank_change_frequency_sar": 1, - "min_balance": 100000, - "max_balance": 200000, - "start_step": -1, - "end_step": -1, - "start_range": -1, - "end_range": -1, - "transaction_model": 1, - "margin_ratio": 0.1, - "bank_id": "default", - "cash_in": { - "normal_interval": 100, - "fraud_interval": 50, - "normal_min_amount": 50, - "normal_max_amount": 100, - "fraud_min_amount": 500, - "fraud_max_amount": 1000 - }, - "cash_out": { - "normal_interval": 10, - "fraud_interval": 100, - "normal_min_amount": 10, - "normal_max_amount": 100, - "fraud_min_amount": 1000, - "fraud_max_amount": 2000 - } + "margin_ratio": 0.1 }, "input": { "directory": "paramFiles/10K_accts", @@ -75,39 +50,14 @@ }, "output": { "directory": "outputs", - "accounts": "accounts.csv", - "transactions": "transactions.csv", - "cash_transactions": "cash_tx.csv", - "alert_members": "alert_accounts.csv", - "alert_transactions": "alert_transactions.csv", - "sar_accounts": "sar_accounts.csv", - "party_individuals": "individuals-bulkload.csv", - "party_organizations": "organizations-bulkload.csv", - "account_mapping": "accountMapping.csv", - "resolved_entities": "resolvedentities.csv", - "transaction_log": "tx_log.csv", - "counter_log": "tx_count.csv", - "diameter_log": "diameter.csv" + "transaction_log": "tx_log.csv" }, "graph_generator": { - "degree_threshold": 1, - "high_risk_countries": "", - "high_risk_business": "" + "degree_threshold": 1 }, "simulator": { - "compute_diameter": false, "transaction_limit": 100000, "transaction_interval": 7, - "sar_interval": 7, - "sar_balance_ratio": 1.0, - "numBranches": 1000 - }, - "visualizer": { - "degree": "deg.png", - "wcc": "wcc.png", - "alert": "alert.png", - "count": "count.png", - "clustering": "cc.png", - "diameter": "diameter.png" + "sar_interval": 7 } } \ No newline at end of file diff --git a/AMLsim/paramFiles/10K_accts/conf_old.json b/AMLsim/paramFiles/10K_accts/conf_old.json new file mode 100644 index 00000000..af68193d --- /dev/null +++ b/AMLsim/paramFiles/10K_accts/conf_old.json @@ -0,0 +1,113 @@ +{ + "general": { + "random_seed": 0, + "simulation_name": "10K_accts", + "total_steps": 732, + "base_date": "2023-01-01" + }, + "default": { + "min_amount": 1, + "max_amount": 150000, + "mean_amount": 637, + "std_amount": 1800, + "mean_amount_sar": 2000, + "std_amount_sar": 1800, + "prob_income": 0.0, + "mean_income": 0.0, + "std_income": 0.0, + "prob_income_sar": 0.0, + "mean_income_sar": 0.0, + "std_income_sar": 0.0, + "mean_outcome": 1000, + "std_outcome": 500, + "mean_outcome_sar": 1000, + "std_outcome_sar": 500, + "mean_phone_change_frequency": 1460, + "std_phone_change_frequency": 365, + "mean_phone_change_frequency_sar": 365, + "std_phone_change_frequency_sar": 182, + "mean_bank_change_frequency": 1460, + "std_bank_change_frequency": 1, + "mean_bank_change_frequency_sar": 1460, + "std_bank_change_frequency_sar": 1, + "min_balance": 100000, + "max_balance": 200000, + "start_step": -1, + "end_step": -1, + "start_range": -1, + "end_range": -1, + "transaction_model": 1, + "margin_ratio": 0.1, + "bank_id": "default", + "cash_in": { + "normal_interval": 100, + "fraud_interval": 50, + "normal_min_amount": 50, + "normal_max_amount": 100, + "fraud_min_amount": 500, + "fraud_max_amount": 1000 + }, + "cash_out": { + "normal_interval": 10, + "fraud_interval": 100, + "normal_min_amount": 10, + "normal_max_amount": 100, + "fraud_min_amount": 1000, + "fraud_max_amount": 2000 + } + }, + "input": { + "directory": "paramFiles/10K_accts", + "schema": "schema.json", + "accounts": "accounts.csv", + "alert_patterns": "alertPatterns.csv", + "normal_models": "normalModels.csv", + "degree": "degree.csv", + "transaction_type": "transactionType.csv", + "is_aggregated_accounts": true + }, + "temporal": { + "directory": "tmp", + "transactions": "transactions.csv", + "accounts": "accounts.csv", + "alert_members": "alert_members.csv", + "normal_models": "normal_models.csv" + }, + "output": { + "directory": "outputs", + "accounts": "accounts.csv", + "transactions": "transactions.csv", + "cash_transactions": "cash_tx.csv", + "alert_members": "alert_accounts.csv", + "alert_transactions": "alert_transactions.csv", + "sar_accounts": "sar_accounts.csv", + "party_individuals": "individuals-bulkload.csv", + "party_organizations": "organizations-bulkload.csv", + "account_mapping": "accountMapping.csv", + "resolved_entities": "resolvedentities.csv", + "transaction_log": "tx_log.csv", + "counter_log": "tx_count.csv", + "diameter_log": "diameter.csv" + }, + "graph_generator": { + "degree_threshold": 1, + "high_risk_countries": "", + "high_risk_business": "" + }, + "simulator": { + "compute_diameter": false, + "transaction_limit": 100000, + "transaction_interval": 7, + "sar_interval": 7, + "sar_balance_ratio": 1.0, + "numBranches": 1000 + }, + "visualizer": { + "degree": "deg.png", + "wcc": "wcc.png", + "alert": "alert.png", + "count": "count.png", + "clustering": "cc.png", + "diameter": "diameter.png" + } +} \ No newline at end of file diff --git a/AMLsim/paramFiles/10K_accts/normalModels.csv b/AMLsim/paramFiles/10K_accts/normalModels.csv index 1b25c615..7bd85ad2 100644 --- a/AMLsim/paramFiles/10K_accts/normalModels.csv +++ b/AMLsim/paramFiles/10K_accts/normalModels.csv @@ -1,7 +1,15 @@ count,type,schedule_id,min_accounts,max_accounts,min_period,max_period,bank_id -5000,single,2,1,1,1,365, -5000,fan_out,2,4,4,1,365, -5000,fan_in,2,4,4,1,365, -5000,forward,2,3,3,1,365, -5000,mutual,2,2,2,1,365, -5000,periodical,2,2,2,1,365, \ No newline at end of file +3000,single,2,1,1,1,168, +3000,fan_out,2,4,4,1,168, +3000,fan_in,2,4,4,1,168, +3000,forward,2,3,3,1,168, +3000,mutual,2,2,2,1,168, +3000,periodical,2,2,2,1,168, +1000,single,0,1,1,1,168,handelsbanken +3000,fan_out,1,4,4,1,168,handelsbanken +3000,fan_in,2,4,4,1,168,handelsbanken +3000,forward,3,3,3,1,168,handelsbanken +3000,mutual,2,2,2,1,168,handelsbanken +3000,periodical,2,2,2,1,168,handelsbanken +30,fan_out,3,40,40,1,168, +30,fan_in,3,40,40,1,168, diff --git a/AMLsim/scripts/generate_scalefree.py b/AMLsim/scripts/generate_scalefree.py index 6c3fdc46..811c9344 100644 --- a/AMLsim/scripts/generate_scalefree.py +++ b/AMLsim/scripts/generate_scalefree.py @@ -92,7 +92,7 @@ def powerlaw_cluster_generator(_n, _edge_factor): print("Number of vertices: %d" % g.number_of_nodes()) # Number of vertices (accounts) print("Number of edges: %d" % g.number_of_edges()) # Number of edges (transactions) - #out_deg = Counter(g.out_degree().values()) + #out_deg = Counter(g.out_degree().values()) # TODO: fix so degree.csv has aggretgates #in_deg = Counter(g.in_degree().values()) #keys = set(sorted(list(in_deg.keys()) + list(out_deg.keys()))) diff --git a/AMLsim/src/main/java/amlsim/AMLSim.java b/AMLsim/src/main/java/amlsim/AMLSim.java index b103d6e8..7043377c 100755 --- a/AMLsim/src/main/java/amlsim/AMLSim.java +++ b/AMLsim/src/main/java/amlsim/AMLSim.java @@ -173,6 +173,7 @@ public void loadParametersFromFile() { } // Parameters of Cash Transactions + /* TODO: remove? int norm_in_int = simProp.getCashTxInterval(true, false); // Interval of cash-in transactions for normal account int suspicious_in_int = simProp.getCashTxInterval(true, true); // Interval of cash-in transactions for // suspicious account @@ -201,7 +202,7 @@ public void loadParametersFromFile() { // for suspicious account CashOutModel.setParam(norm_out_int, suspicious_out_int, norm_out_min, norm_out_max, suspicious_out_min, suspicious_out_max); - + // Create branches (for cash transactions) this.numBranches = simProp.getNumBranches(); if (this.numBranches <= 0) { @@ -210,15 +211,16 @@ public void loadParametersFromFile() { for (int i = 0; i < this.numBranches; i++) { this.branches.add(new Branch(i)); } + */ this.accountFile = simProp.getInputAcctFile(); this.transactionFile = simProp.getInputTxFile(); this.normalModelsFile = simProp.getNormalModelsFile(); this.alertMemberFile = simProp.getInputAlertMemberFile(); - this.counterFile = simProp.getCounterLogFile(); - this.diameterFile = simProp.getDiameterLogFile(); - this.computeDiameter = simProp.isComputeDiameter(); - + //this.counterFile = simProp.getCounterLogFile(); + //this.diameterFile = simProp.getDiameterLogFile(); + //this.computeDiameter = simProp.isComputeDiameter(); + /* if (computeDiameter && diameterFile != null) { try { BufferedWriter writer = new BufferedWriter(new FileWriter(diameterFile)); @@ -233,6 +235,7 @@ public void loadParametersFromFile() { logger.info("Transaction graph diameter computation is disabled"); } } + */ } private static Map getColumnIndices(String header) { @@ -272,7 +275,7 @@ private void loadAccountFile(String accountFile) throws IOException { simProp.getMeanOutcomeSar(), simProp.getStdOutcomeSar()); int index = this.getAccounts().size(); - account.setBranch(this.branches.get(index % this.numBranches)); + //account.setBranch(this.branches.get(index % this.numBranches)); this.getAccounts().add(account); this.idMap.put(accountID, index); this.schedule.scheduleRepeating(account); @@ -509,7 +512,7 @@ public void executeSimulation() { } } txs.flushLog(); - txs.writeCounterLog(numOfSteps, counterFile); + //txs.writeCounterLog(numOfSteps, counterFile); System.out.println(" - Finished running " + step + " steps "); // Finishing the simulation @@ -631,7 +634,7 @@ public static void main(String[] args) { */ // Loading configuration JSON file instead of parsing command line arguments - //String confFile = args[0]; + // String confFile = args[0]; String paramFiles = "10K_accts"; String confFile = "paramFiles/" + paramFiles + "/conf.json"; // debug diff --git a/AMLsim/src/main/java/amlsim/Account.java b/AMLsim/src/main/java/amlsim/Account.java index 19b52eeb..9f916315 100755 --- a/AMLsim/src/main/java/amlsim/Account.java +++ b/AMLsim/src/main/java/amlsim/Account.java @@ -356,7 +356,7 @@ public void step(SimState state) { meanBalance += balance / 28; } meanBalance = meanBalance <= 100.0 ? 1000.0 : meanBalance; - double x = (this.balance - meanBalance) / meanBalance; + double x = (this.balance + cashBalance - meanBalance) / meanBalance; double sigmoid = 1 / (1 + Math.exp(-x)); if (this.random.nextDouble() < sigmoid) { double probSpendCash = -1.0; diff --git a/AMLsim/src/main/java/amlsim/AccountGroup.java b/AMLsim/src/main/java/amlsim/AccountGroup.java index 761bd7b1..a0315e8f 100644 --- a/AMLsim/src/main/java/amlsim/AccountGroup.java +++ b/AMLsim/src/main/java/amlsim/AccountGroup.java @@ -33,6 +33,11 @@ public class AccountGroup { this.endStep = endStep; } + if (scheduleID == 2) { + this.startStep = startStep; + this.endStep = endStep; + } + this.scheduleID = scheduleID; this.interval = interval; this.members = new ArrayList<>(); diff --git a/AMLsim/src/main/java/amlsim/SimProperties.java b/AMLsim/src/main/java/amlsim/SimProperties.java index a363df06..21565ebe 100644 --- a/AMLsim/src/main/java/amlsim/SimProperties.java +++ b/AMLsim/src/main/java/amlsim/SimProperties.java @@ -86,9 +86,9 @@ public class SimProperties { probIncome = defaultProp.getDouble("prob_income"); meanIncome = defaultProp.getDouble("mean_income"); stdIncome = defaultProp.getDouble("std_income"); - probIncome = defaultProp.getDouble("prob_income_sar"); - meanIncome = defaultProp.getDouble("mean_income_sar"); - stdIncome = defaultProp.getDouble("std_income_sar"); + probIncomeSAR = defaultProp.getDouble("prob_income_sar"); + meanIncomeSAR = defaultProp.getDouble("mean_income_sar"); + stdIncomeSAR = defaultProp.getDouble("std_income_sar"); meanOutcome = defaultProp.getDouble("mean_outcome"); stdOutcome = defaultProp.getDouble("std_outcome"); meanOutcomeSar = defaultProp.getDouble("mean_outcome_sar"); @@ -97,8 +97,8 @@ public class SimProperties { System.out.printf("General transaction interval: %d\n", normalTxInterval); System.out.printf("Base transaction amount: Normal = %f, Suspicious= %f\n", minTxAmount, maxTxAmount); - cashInProp = defaultProp.getJSONObject("cash_in"); - cashOutProp = defaultProp.getJSONObject("cash_out"); + //cashInProp = defaultProp.getJSONObject("cash_in"); // TODO: remove? + //cashOutProp = defaultProp.getJSONObject("cash_out"); // TODO: remove? marginRatio = defaultProp.getDouble("margin_ratio"); String envSeed = System.getenv("RANDOM_SEED"); diff --git a/AMLsim/src/main/java/amlsim/model/normal/MutualTransactionModel.java b/AMLsim/src/main/java/amlsim/model/normal/MutualTransactionModel.java index 0e267a9d..a98c6d02 100755 --- a/AMLsim/src/main/java/amlsim/model/normal/MutualTransactionModel.java +++ b/AMLsim/src/main/java/amlsim/model/normal/MutualTransactionModel.java @@ -46,6 +46,7 @@ public void setParameters() { if (scheduleID == FIXED_INTERVAL) { ; } else if (scheduleID == RANDOM_INTERVAL || scheduleID == UNORDERED) { + this.startStep = generateFromInterval(range) + (int) this.startStep; this.interval = generateFromInterval(range) + (int) this.startStep; } else if (scheduleID == SIMULTANEOUS || range < 2) { this.interval = 1; diff --git a/AMLsim/target/classes/amlsim/SimProperties.class b/AMLsim/target/classes/amlsim/SimProperties.class index 75e9cbb841e25d94a8ee2471d1571692d5176e8f..e0fdd486e62293e0a6019ecde7f56f5fe480902a 100644 GIT binary patch literal 9503 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 O)@lbGSvi7VSd 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 literal 4267 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 delta 19030 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 KRlcZaI{XiaI}f4& diff --git a/AMLsim/target/classes/amlsim/dists/Num.class b/AMLsim/target/classes/amlsim/dists/Num.class index 6a1c92f0f476258b739db9deff17e7ea10abdb04..7b7f93524377008702c6b3dfa6512fd5608bd848 100644 GIT binary patch delta 1257 zcmY+@-*1yu9LMqZ>C?4c*L59y_nR@cF}7}Om5mK114Ix*a11(sq%p*l(adh$s;tv2 z##CbrF~lfV#2<)1Q0H$PARrRGFwy9p*IsyI{3lGr&&ma{$#Y)koaa2>=RDtj&!08F z#zubo_r?#vR=yA7bHvhfxrOXp;&^tUu#h;kI2XjP*_rfH=|nC)Kb@F3Hj|kulybhU z^`Wt;Ty{QN*yZqg;txCgd-KOLEA99CLXKA>gsCcB@x^NcW93z0JkCTYQC<4OH+V42 zJG>j@oFjTC`gpqVc!cx3r;zDm3kun@FTSsm54aHI!~bn$a%rKEnTzldAD5c_>%9=m zrRThn&M=?xMUc-OYs+!7`NZK9+4;g`;Y22_^5#u8;&5qQ^STa{TD|6?n{iZ6 z7SdC*b%elljFHQH53Zpie3K+$;$yCs&OQu3bLoyZ9T$9jTi_m1N zs5II{*k~73MyH4vU836P7EvQEYK%S+Gx|lXkq~Q)En=-PB+M8Vb;h=2su-&`Mm20O zc8Eq}r)V;Ei)LewXfgJRb;f<7)wo}*Hx7t4T=r^XtfRPmmV^-W{%!w^VUJM#fiXme`Y&90e zu<^7QF_y$O;~BBtcvg%m_2TZL@x0t&ydcJm7sXEFq}XM=Bz7C8#68B#$;-U5QvSnF ztDT`)ZN18%fjEskpd!d??i4L7vyPjz@;mGKn>PMogNxDby6A92bh|#&Drx*UE=*UpIqfrm1xiGs6RRyh>nJ$ zqv4j3$TF>^SVePPUF6)YzZwIL;b|?(UsOzw)1{pioyBg(>En<#HNh_BVn0X9J4k9L zdI?{bkH>27BHxsEb(j_9&Zo?6=aPDUIIawL9WP+E9?|&hu(L&(mi&De`x^>*L0Mzg6ZD literal 2015 zcmZvb>u*za7{|Y7EvH@SwlbbUxrhZ3y9u-#7b%<2v9SOSs2!P9)aoz4*$9ukno;=WFL@#sexLm8eQwC808)QdF5#nNpcnnNgWl znNyipSy+_LDq(g8GzqChRpKfMl>wEa%B0Ga%CyRi%B;$q%Dl?LqU@^@=DvU?A(f~~ zTqU70pi)$sRGCtlR+&+mRhd(nS6Nt;t}0=61vCk%L{;J{36%krqROPol*+WqjLNLa zoXWh)LRD(LI=6UMUteLYl+N^Ios)UF-_{Xp-11`z zuXu3Pk8AkWgYW#fjvEHHRSuCJ&WwkOh1{8ZVKi&yLeA;NEITt4vh2`As4!-ivqPEC zi7l<0L#>Z`aMO?Pam$aFoUH@@y&ofI$4Jh~pNbqE9Lc0@1NHwzhb?=UCA9`w9e22L z^M6g~J5#nZqkNw!l?*iXR_0|3kwht*xBKi;#&Qa{{C{GWvgi!Tv2;!0>cq+!I4he! z)!y8X_52>r@zbcmDm;hhVc>;I??v``8M=!ZE5-Iz_9CP~E@`;|<4R@dYi!L*=*8=F ze{}%fz?gCFWvqLcPc9+aG`Q}o)zyhbFQ4g zdn`~5*W87RG&fh?f%j=9*Kfl#&C6XP_<-iahn%w#u4T8;2(Jep87}9?mHy-)FFw|q z8oyx)hr;+d(D|b$}N7M^KM1x=h5fE%7mI*cyje;<-T+l*@U^CGq*h;JrM2VGxHXcgaqBhdO;7dL2!V$OK^zTDCi~b791fq z2@=FTf+P_Z93z?q{X~o4IB~DwVPdo35n_wrF=DG=fQSeNiKt+RXce3!+62SIHo*w7 zU63Po2=c^EL6NvmP$G5-Y$7HYCw2=ah<3r_M2FxB;(o!C#2&#Uu~+ak5f_|IUc)oa Uzrv_|jn#j}3idu>R)bIf2Jiq^yZ`_I diff --git a/AMLsim/target/classes/amlsim/dists/TruncatedNormal.class b/AMLsim/target/classes/amlsim/dists/TruncatedNormal.class index 1fac88370c453fe2c0393af65268b7615a4b32b5..be504d7e9a4b31cdd1297059a5e44d554c586368 100644 GIT binary patch literal 3695 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 delta 683 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 EKWwIklK=n! literal 3758 zcmb7HYjjlA75+}Bj_^Ydb+O_(tYq|PM*6MOm?YHl}Lk41hbXM-( z`|PvNK6~%;oqccK{@}GY0Ib0u!-(KO7zdH9$7mCwn*g$9L8rv zni6tE$o)b-E93zopVRR9F!>k4_#%#q=0Oc#@zm>IE;CCM97yz_=?y( zDvlr1@KqT+9>No0Jc+M`(TS%*cslT*_mfzk5tFaW7S9H6fA>%F`?DCHkSM<)I#PHOn3f|fIL<7Tm>(2_V{95#B(ww3KoSS7npp+0G4@`hb5nhHy+Mga3gx`rw~-4%g`$-iOi$5W-JU^?$IZOyjzjr!ZiKU(QZmEgCQfn~q&Ox^0wvp= zbe0Y=Fe4{!o#6nDibg(N$SFi>;uv*w+&8$v%3JnEg@v(!fkFOUqpXq7^d{}1mCy8b z?@;h>E~J@CbHd7-+scynm@%HECXy(mjO-4hXvx@9`t1pe+b^pon&aYZFSG95WK9}H z+p^8EBa?+}A#+4(m9z5wPRLA<0oUh@sp?qcT#~s-xs54T3YSt7X1bg;2WcF#^0rw# zY-AO}r9!!w63Fr(jzwImmf)j;2Q{ zsAB-%((r8^-@z#zo3L5OY3$VTypZka)A30mXYgGOFX(s?-_vmm)@V4Z+lI3w+h*a+Z7gh!OlXYe>hPEhmIfMhZ@f5_z`}r;|}yIba@N@=Rs)riH?`? ziiV#G|Cwa)s*Vb#d9-tq)Nx)CnZX5xrmG95V-!giYjb~ctA^KfypD@HevUVYy0Ovz zZOJWnj_UXY-qi6+By{`=zt-^^OzZe9ey8L2_=AqO@HQL3oE+zbq0sK!zqtsIlWnX9 zHk?RWyvg-Mj(dY^VB@qOS1XsQWb>kVSBD64rGSw&i#++JD;SY6&GqUI?tECFS;cRp z3e4ID*K~EulM7_sPZ;@P-Rx0q83L|o*yfgEAvbvChRS{8Y|HH0{$kNMA~$irmE{!< z#`X*iNye?Sw^x>D%p$KBZ+Y1q*-xy}Pfevf3#L)CY*V3-HI2L&@2)lW^fX={tMTDB zwLVuQV`?Azdi5;q8!+oUD24o27@0nknnBxuu*>Gc6zMs1Ut6+>!AEW=e|g z)}f|Fu>j_wvXSM=Xl-!bitgRAuQ^#LS@ve5G{LgP1|%4Lg6*9BFrO+&CyBE^%+}BA z;saNX+{qXyd@k!F>cl9jIZ-?rGCbrOZ(W0S$iQ`|0Km6H9VP7%DR zenFA+L85^TwK-=TG;12BLM%2k$L~kRhsAu~M)=~b=fk!Fg^yFJ!&*LUC63H);&65v zhqKu@oc+e(Y%~sM|8O{)7`dOm25=|o7LKM7LYTZKzOp+Shz8s1&qKv$P*;I39t|9? zz#oqW$pZ1HRzWZx4OO7M;`qCZ^ag08i=k7x4ok5B%Q#w&l~{qB5W`l^j&cv~fI$qA zi*z><++U<&N-g`HX6t!jb7EB##&D0DL*09{roDPT9)A^~ zY1CH`rWC$_28G+=ivrmS^!OsG^mGM{Vx{wGoT#8l22B^k6*OOwT6`NjM0*A+$eKH3 z(3l+|ZE@vEiu%5hV?K5E!@p1t@bQ~rCtR~cN;p=h@ZPxP0*Wpuy zc%HJ&H|bH%Jj%D{Q-t*?z7${LTe(6=zeWBI0sU73`k!2R30qY??ots9sRg)Otw2Jp zBfkUN)G$WWE^Jrh7*ko?qo%M!J&t?TNy?|O+kxvOqZ-7G*g?qoaE_oB$&YudlIlR0 ztD~=a+>4#?(~FK>^bk-5tnyY6l2y=C+CwjFaOyGKN2v}+RTuMs@kJKBOjhUAIOwSMIyvd? zv=@znfpKcs0My?Yw=|hcojk9OXHFtrbFw?B3-f7?`g<Rl&q%>z0+9bMDoBaAcvf8n_?-_ z1f+>L_7ip)cFGBU?OD{OaR52~Z0>o_OR&@B@NgA6gmJZBUUDEN=X;3}r9Hr`KuDl) f8S6B35*qI#AfWjGX^#2l`!^O+$77ywAYuI%yu^jG diff --git a/AMLsim/target/classes/amlsim/model/aml/CycleTypology.class b/AMLsim/target/classes/amlsim/model/aml/CycleTypology.class index 659d404c8b31fe3e8fe2cc52b9caf5977eb32141..4200b35600fa9aa4aa85b37dce7288f127dafed4 100644 GIT binary patch literal 3504 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 diff --git a/AMLsim/target/classes/amlsim/model/aml/FanInTypology.class b/AMLsim/target/classes/amlsim/model/aml/FanInTypology.class index e9cf1b16374af1c309419cbef95fcdbd16873ac2..6874f4b5828bb77eb37965dfb068d7ec82951cc7 100644 GIT binary patch literal 4144 zcmai1Yjj*y75+|UGIwTj(?^;K4TYvpI+;=;ps6IKZQ3MsLNX0W8faQAH#4`%rSoWK z?ovFK8&Z`^}`OFrz)M))bAVvPrv9!JA531MODEmepH~okm^Ow&Han;i|9O z8b}&;HqFfoCM~a+Y-}Yr=-uIt4edQmk(Tuvx)oGdp?qyBnX!$e-D||Nri%wt3e#G{ zH?=fx2}gQbx_X=1Maq-vT}_eZ^&MOIxvoWIE``#JZEnvflx%8K(2Rt{?M#~$JZU2t zOC=O4iel?>WQ@hL!b)29N`>lRb8|SHQ;8eNfx2!xZ6ya9YkP^zTB7QQ3zzDs#>E66EKqO-YkPfASfoRP*N@8()UbpnEuh=c-fbmx)FMO(2TVH` zl0s#$c50wv>2e(xVYb5bb}MN{vWb2(-DC8}iF!qQDr&@gjkG26ywGhATEt*pAp`$| z8Ir(+m27e_V={=CFJatTm=jqe&AhwJWK6-INoCVflbmt9IuI0t#p7j6yVFP;3DY*y zbngy^b2v2WSb=MqDkE-+!D)rKnq=PS$0{^wSk3$v01~;5HCRi(#HYiQ6VqhH1b`e8 z%I+2&t+lTQNXS z8S6IYmEy1*$kK5Ows8Yf-_80WIod={(k4ajbEqLJer!it!;S)+PKX_bJ*XoCArA?~ z%m>5a+OVG%cIx;LD5)G^$00&yYdVz(CyB~VBc9`o6TxjdW}#Ac+@a&c_z3BBp-^%W zG1fLecH=G$A7yhI2hpj?jE;|C4-Ia$;wXFu%y1`|*%;n*$0B#c9v=hQ_H~q=*^? zBelI^=3yNNaY&&omddh&I8E3g0=t2pi4K~vY@E$7%&C?r)L~hoxXRpeM-b3tHnE-~ z)~U}<*+x8T9me+jT$dgpH)Vv4YI1Gm8^0G%kZ%)iQ8FyUVkja5k69UPE5uf~F$L6B z7}hZ&oR#L~G`VoIh(~ptkUA{2GTlvG!n>z+oRor^E|7GYQER8!noY(svi7WwdMx+i zIkI?dQ};SQzK<6)JYOJtQTNsH1L*@Eb4S*QXZ(oZhdO?QA4^)z?Wv4quQf7+*BxxG z?e*d(OjZvs(eBokuF|pmkK9u)>-af-!Nd>pl8l?-WHcopg?P?!mghlgo_zGaLWTWO z$FFb|eJ5B#R*= z@8d|0StB&%Q5D{gYjQ!kHZr6#zT|EXJ&A@9tnA2rn3g!0Q>C$O#r&ml65 z&dX1ri=C`=2#cyqPk`?(${XC(Zf@&*1k?FhSnWQ6%_X=|6mC{HFm_s`ClFJp7rjCL z#!bJmufCKpxa00or0PAPfM*ohy~Buy0`8M#!`L;)eHekz2yS1lamTJIZ4`G7;lP~I z!^loBqXpan?I^Ae1vrWiW3Q{;JA{j6Q@|_E_`5gY9o%bl?(wRCH{d=p_Qnu8Wm|mj za<8l2KZMzix?j`-{=HS+1eN_N;1}h$hOlss=P>5F>a`)vbTl=ItaFd1#OaZ-zf08G zF!nhr!Kbl*W5p*&@hR#q9ILwGkFhgy_5faTsj{zLz$jui^CB95OH?qouuQ-(4%@`hWD0z?- z_b9fJk|$wch%yZ?ljM(aSKl5-)aSq}VRJbT zufn(S9ZI-Wy~ZQ4Lh%mS!wP+JxzrE`$Ll>c96fda0mK~Ab#k^apcSgsq1!VR-yOmC z9>UCJTqO6d9KnkuGbhhfyyUE0R8#R%ey!T;s>CVZD1PRUQ_MM4dt~e}$H8Vwb_KM$ z8oHD|G1-~emk#jCz_x3Aq1iqm`mYaQS|xrf!{3RtM#R+V40x*CmH6WbUYqRfVJQfg zQxFk0R$vP=bu+tRKkA2B+0g79n0ZH43Z>K+<^q{;;Z*wq;QCj-DB9nOFWGi zVB<8`-sXE&y60B-1JtP=YEE4`QC G?f(MKt=yXc literal 4116 zcmZ`+d3;n?75?sQZ)Wn?LM9Lbgwg`Tu%s=Uy5q=rw)Vt){y#=|1{j66Q8;So2~ zeTRbh91a9=5T6fXD!w3(NB#JsSpJec4vF@c<#E`LuLSW`90{TVkNMH(y*T_Qu76Eb zj*6wP`)>NzN%?z86u+V2n_k8&e=gbnmV&3p%$N$}+l+K7Z>8&-;_+-DV=qu&03>0B36P*H_3 zE3=urZDj2AMyg=C>6KC#+Zw&KrFl!Vqr0VReN&rAT|C{@)Y078zJD^!;G*5%0Pi?7kjSoSi7ns9S-G+ICub3JawIlM-Z;VLByYrRD?8%Q%##1z zMlQ)q6Wy2VNGkL3UNcch5veEx(9))$L-Q4BgRvDEL;__B=}tPrjewoCja1BWXI#SE zY7|m-G((?v87YP8(SS1CVNl1!Y$LwC-Pqx*H9W52+cZzd+6CSY#;s5lo_l2i$=N(H zEc2dTRE5`+!Yk2S(DD_jL%fW5oZxFl%FNjknb*q4n!1SIMkXWXB%{@GC@?Ci3neo; zZbqBJ#7mXZl*<`=q+Dd{2^}|LiH0Y2dsobsWbDmcZy* z)Ug=v*6}?&qvQK{R>u$ULmkiIc^yB(3p##`%{qR9%^H5H<3;>T$4R`TqXn%B(}%Bm z2RiEbIZkQ#g^pk1S2});Wja=2HF-RI?j32M;bk4K;8hL3k?}Q&@wYmDhu@QxqtMau z2b|Jji|2n7S8u_sQe924)f)b!1KJyT3fnwypA_?yos2Ozv6E?{w~)} zy&{&T_O?=C>G%iUB6OGFFSf4AOM)o*X4u&r%PTB-A5((4y)9<3RRqYZVv8svmDBTz zQZnD`P=jVhcqCMjk|^CJYm!AMTB?f55<$!R=UCAwuNKiNT{6;x-PBSDv8u}`-r2Lw zj5{6L8i}ZSl#NoPbWH0t@*U=G=_%p4q_HRCEJhd2$c=6z!M+m;Uun%bo44*{!SNzC zZ;jH*7W=H@h2g3rC}Js4B^~4U=HD=CbKa4M5r!cgKt*pm-S# zv2~5VltHJWq|I%$QtTVP@TN6uB$Iw?q?b%^v>gZJ{-nutYwR)wvvVsu&1fWtH3(DL zu@%{D$}}>fys;eiVL6qTl;cx;H7qS6R?e0(3`--Ge+*vSE+^a~KJF*L*qKHWsmD56>m7Oqape0#jn;>8X_{y`ZYXSDX`ONB}DgdKjm9bKO+7UcvRs zvUM}hvk^MFY;4ZR*2~euA3HX0YUk{JTJ&?Qi_DoD@`ijh+A*leakw@dgS#J|$RND^ z@I6Tt7drT?bS{_y9aVIB8m80rPRf_TC)Z#t-pf&DU5L?$%(^*~Z<;)nWa} z3AROO)ZBoLMW@`2bg6f;IqudvOeOL>9aNZ9yN#%y$nV=)$w8=!ZUk2xCZ2 zPmN~?V-*fyj?Bg>*@j@4_v87hjR(5GE)zcsQ-(Z=xAA9%%3q z22aW}h^hu(B;*@JXkR}jMnawwv{hZ}IfPJT0FxJMJW*Y(4WgzG2W!2DP#ATM7V?C& z!&npvahB@G6nBF^T*uLED85G3Ez)vIG@dw%)xksIh%`SM97|bOxb+A z5A{gmS`=^{Kh>|tgZ$TGKi-8$(11tD<;Te8$I0arWb<=m^GP(~RdV?Z$A4ov{)Z;z z#R@fv<21CWS$uuhW0hLMaXG&%R-;{Yp+oheQ`wx~NrDOC4%3@vgs_SCdub^^Pd1ZC zr%1@#NG?AvkY+Lq(#A||;jW)v7`UA>O@%Sp+0}TnPH7MP>So3wCo~~niOQVCDPy-) zc_bKx3**&xn6&FgQdMCqcReU5A8`BupT;`&Td*=|;kcymz>jKeG>O5vCbrv&R=MnU%|6sc79HTjlNmS&pkml0J z6e|e}I7$t=D`!5zp;*E`N3_vFQM}{!aI6Yh?4X35L7k@OEJBee?IcEUj1DLRYn`GH_1DH$daxuG-ROQa3y2{A# zUX9;fg?WKNEO2Oeg#A-y29ngqJZ)J>;wQRN;mJG&sf%2T#0Y5Kqo6LT6ET7T$CG WfATy!xpw~-6DeS#cTw4eJN^$8N8M8Z diff --git a/AMLsim/target/classes/amlsim/model/aml/FanOutTypology.class b/AMLsim/target/classes/amlsim/model/aml/FanOutTypology.class index bf28e15129e4bb6a56443fabd35cfb451d0bf9cb..b71e4247ecee918d3be0f3ad48a7c56657877d19 100644 GIT binary patch literal 4126 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 K{M%mjpZ^07_<;-n literal 4738 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 f_aJx;J5=yLIHXb~S3^H)D(V^%aAIi4 zeqMCGDmn}DI4+mxMf*M#UkgJyaazOuct9jy*YF^|p`jBG$@bwGzNz66JSvhC8m_~) zVt6e2k^iURaXcZ?CpA2UZ;N~1QSn`od{4vo@dFh@B3Ziw#oU1G7XgMsH4o~6*Yt}ZLM$J^PW%cQ>w=Em?>_EP1 z&kl`HKW3W?&cT{Bt6**3sFdqgWni>etTt@1)?PQA+l`u0F&(o;yhtY3Kh4*kYKitc z@|JBLXjEp*+LSRQL|+43l&R&lH)Dsh(#M)0+-ft{X+is@jaNGcz8L6XZZ5Sm&&01)gsW z6sL?D-7#A&c{-#qVib#vI%?Gmqmx9X1FBIrYmP7*n=x%OZ`G-=wxv)+;?_l@vYQI@ zDr}V&XiL-;bgj-XN%C{C^)eg7frCLLBSR{FOxWRK+0R-yBhhIEm+yU+6wp;(i3g={ zgRrmTS)5dHO2<#|oQ|L3c^x<6(>h+jX%#=y@giPQaYo0_@v@Gyctyv}*sfy_80ET^ z?%8kDkFZJPpr~NYY9t*8a8SpqV&YD`rsEelt>bmvpUoX5L5F5o#8@9Fpr zF6#I#-lwOl+fv8xa8AYV1?3M4`ux+CZW^7)2mI;yBmSi0&-jai^c9M$86eOKS6*F2 z-D2UvaxSHKSRH!clI)p6X^5anlR-PUBg-$RNZq=R>1D<_2->OcVSBwnDf_`gU!G1Z z)p?`bFc03ts$lc9w3s`*XlBJ-rj^ExQb|E7)1rBB=BQb8hNSb>h>r$Gfj8VZtLSGC z#`3_66|1&GEh+nqT$9j7gO=%#?wvG?*1Wl|VV9`nm6z*u&UVaMv&I(TkZke6my@*? z<=xe4*)(iXKHRG8%c(rr8izMzhgw?9o8!m9dxQu(}*(XzX%I z508(FtpsV5apKRLmCSi@Fxm1QB2|K(lOhT8hGcUUmwrCIwCpw*V3D4*L_6ljCili# zY4yZpwWDGjGh2qPf=p)o3a39Nh&Wve{9PXUtsiD=;YYlmU-K|DnFU;hWK==HXWaEo z+;cX`_nxvHxP{N1+`Ysb5x#e1-+|IZ=sdy-c7;ba_PvPpltr>lM3>NZ9%=}8J`z^W ze)R9GryDzm_?x^M#vq^TX&BgmcJ%Ql$wpku_a~4h1acB|xIYh*x zkn7PJ7bgQ9UFaq`;>C#TWzRBp5B6doEz=%8$CY^2gZ=bEejfE8$Cbp@BjXe*HS?J8 zJ=w;$+zcn%-{8vw6?TDbE|~5e`(TR9c}j%!y9gvuo3iOetT~BpVLI*7+!4Y_sFAaX zgkPtIN3Lh}M%QW=k$7`CgiW{|chIho7DcG6e&wnbk)^L6@Bc{POvsVneEm5I*hnkpGJz&-i$aaFUi_k&r;vO zlWR!cPFCMuW^{_=-OcKASXU3QvQAL?B(wh%Gye>8eulYjGSe5C>whw7|02awJ#+l+ zzLTpde4e#HPM4GLfu97CO%pjx{D1Is{smTj5`V`brYK4*1BdZN-aWySFVT}2@%FPE zc2WNfz5FuoYQ){_VkGbtqDUEeH}B?6Npm+Mm#{&J{1>;V==>1rOXyZ%@T-m)6urc= c^`sI3bqU+vMz{0@XFH!>F{QXGaTkL5f631dvj6}9 diff --git a/AMLsim/target/classes/amlsim/model/aml/ScatterGatherTypology.class b/AMLsim/target/classes/amlsim/model/aml/ScatterGatherTypology.class index eb10bd100ae1c3e43d5069b29463f22ae3a992a6..8e188f496e39345b75afb40f494bd39fd3b30d17 100644 GIT binary patch literal 3994 zcmbtWd301~75{yip!O5+IWX+54DzOdiYvGcS?F zS}U}!b!}Bpv}kQyP+M(6fTCy@v|9C8wQAkmTXY%PI z8vF`3UbDBQyQ{QA!JjW!X@#mTZ(B<;nIFvA&6MmlbEblB<)}DorYytevZ`ypF=R9h z+E%8a%PPvoP{K;*412IZ@lDgjtEcN-%L97RwKid!2a5`2J319A(vImKOEa=!g(GZN znBg60akvVKJl#D|Vg(CEE|t$JR8O&>*WvMv!PQpIvezm^W9{u79qyKlkxMru?1Gg` zH^=+wa2vxJh7a>}%)#6c7(5*T1ciE=4h=yK3l(NhMxdooFpfwV!l=bfa%{1JFBb2Y zBTICYBNWEXh--+^i&BWYyAoDbM?G#~@Y1I3nyF9|i(hNJXj-nL1`&nIE-PpD3}*K- z$Hv|a<6YgAPa2tiqhQI}WBTm@i=m5^V*eH}krZaFTq%;FtZ{gPF4{)HmZUJ~9SWM6 zOS!9XF+W&Hngo(#g%gsg0hOeg_GY7CWKH6S=J;bBZd_LDcn7M*ueCa6xzt@cT2M_G zWQ{`F%Jmwym6siDI^K@zFxF$Eh7AfcCtuV}!05OeG|NYm6#~p{yj@P+qhq$Kw_8UK zHc@6|%!1AHrI@tHx;cz3NNDIKoJz?NzK%ZJ%gxM9x53D`HNj{zL8X0Oors35I^KzG z3SrrAN_Ob3?41OPQz{kMfn6GQmfV;qA|1Q2N1@zeqzpS>P?&So=?;(ITmb_~4ST76 zQg=zJBLybIpED2B(+My+S=qFAznQd~HL%uaUhRTdW$D1S6#lz) zwzZ=Hb~pKyg~@uajtB8R`Z!S=f;m=6nwkT#&d#`V@`R2`RB3ovVWHjV^Nf>poy`{~9j*s9GIyPiv2F*?TBm*5@0-XSQ+lZKt z;S(A@ewB{ad_H3uInnV+Ik|o6Nl(a=58+X15sxV}O^vWy(9KiO;`Oa5Stu!q_lug( z==dy7vRYF4L6&{L*zCldeNl6&y@OQHttIBfNG6GhaMnttGNxC}7Co@1he;avTZNMC zVn)I?k_WntgI>d_DzYz3i8*ml6YDH#DvcDeeG9&#<4Fv=#o`p9m`b>GituYXzApF* zSj9w3ufXH1j&BNBDvJUEGieQ(8wPW!qR76jV-@Zw$J2DNttD}H7~jQ+hG#gXCiCky zcpamH@1S{T(8v_S*oQG4=W#(|XdcWLExXMq4p2|5J>FlAXIYGWy)8Y74eNUY>Azi?ZI`g|5QFNi+4ZM@pD0lw4_#p2u_-%64ONUD>{CK zUo)&(k_;S4Ql**ByGBaE8(bOGe|o>uy>hX~H6gz{hqI zLYWMBX*@FCohN5DrD2DzAfNrqq1nBhCwq?bm&YW zD@I^@&mqbW^LNas!Ts4)0g|>))|>e^B-G)}{zh#W%R~~<#L#1N0%2nm4>()MlBH}E z)(K5Tw21%A_$%@PZ3M@i)3J+qXj}FB$M6AeT;?CcN6+C?P32r1k7&{IQGB|0;^eE6 zE}xUG0&XN-%WN-X@E2h*zbjCOd$5F;iKW=e#O-GAQ@r-2aSMu+-Oofm!UR6X6rN_% z&N4-#Ow?tj=tU;!cTCair2mCAcoS=tAM4aS+@+S1z7?$w40gJSE5Sgm#3^dw>{PY* z94#rM1u=Y{srU0;PjE=zPU@yE7iuh5=~F6610%` zYGcqPh$_OMQHyAVLb)L58;_pCCVyjS7_D4=tNN)?eCH%)E$8BRB(!oA=Z3Mwkz8~n z(c0>Zo{W$Az8YK#jp6$zLMjr9l%E;DhFWUxBV88>oyT)!4u-?talz}l z^np7o>TjqZIe!#aPNAv>KXDf?i=@^SMZ=Nc9DfadF^XRfV;46JdCIqt{y&sQ#h3+? z$|u}toy6dNHVvSgi0EPFHxY@OiM(FsHNgz`@rHdby3o%7v=xWQJBFQj5W9$r-9*D4 z4%+*0f%(0HBwiy@{|OUsV4n)});Jdfst)_r9lXA_BI{u9gmgsJHi5l1{Dzofw#gI3 z`4Cb~c$GXq@wk$s{kP;UREvphA`VN{0{os-Ia^nUgS`;mgXcZ!G+W$j+#jZ0EAR(; zR6%Rj;*Y|kO(otL`g|KI#zheU=O-lniXR}lsO${{|AT<~FV>Uo`#0uHP_xTu>7Vdt j7m!%aCy&5a{gmjVI6Xu)m^dYtis=%U4Q={#HY5~ literal 3958 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 H@c#b*VL^)S literal 4904 zcma)Ad3aRS7608g@6DU#B|yR>1j6Dw)n)_fA*((lN};Zl5Tuw56j?VwIDL z%X5LL=epy>J-rAo$<2vIVx>wax~XGZPdbtA+9s|{#)qv@v@)1q_<(5`aaJrST=n zMVRAjmlVTWOm#0&B-N#AK2rvCizGcKCmN-7<9Tk0!eY$Nt!-_tEAIVYS#1^qqY#!8 z7deb}l8BIRWvbuM_Fj$S6HV| zKHB#z!~)~LI@H9Qg83~$|F(riSZtvKUt_cuH??14;vEaW7GvJUdlr6!-?A_|RyHkb zZ@Flth2P$*vE7^NYwys`x`36=t*(KH%YnBV0 z7@Lk=TOwS(exn=B&8u5ODUpeE)aHUb-yT=V30}3O+>DcRTQcdSXwP@e5~yARv#j+E z@dW#+zjp1CC4zB`^tzR9G`_`c=}pDBq9lVCrPB%5NeTWnrT7bcx^iwQ@@3w|F)wdR zX@p9wD{hsu^YBXAIB~g~dz}PPgk$MmUN{B&=uh_9aLnyVXXClWPPSWI-7HG1ZeDe~ zFH+I8G`M=Ut&tKeG`QyB3@BXMYx2fRT}FPn`=v)_0# z+m$!7xp*^shBvdoy_xNgv%LSb;9_dJgw!B4hd4LXEv+g}|#3{`&w+5mj@wy|db zdcE!EWYpW{0Q~iKU;ySp?$FT6aVkuX=fOe^D$#&RXe8!Yn1R`tiSx09(v=?i23(3Z zKJhFp#WJ2R)N)cjk6J{S-!`6>r>`{!< zaQPHl?_4;grXMZdrYSKap?AtgzwNj6egtZ!#3Ft<%(8Xc-`&XrY=1;QUCDu=W8Sjo zLIbE6rYe1rfG-mAMZ$Kt+VD{7v3~62{_s(Z*YE=DK}?AFg`szrvP?Tb3}$y{BR z$hkQZ&f^RZpo%>Ieq6-KcLQZDN4 z^2Rx1@`N{*HLl3d6UMCQE2G0-kqCIs*`0SbD{HdUlrA-;%DsA>gD|VyW^GU68$}IY zMrv6D4SaQ&&9{NMtnG_=b+>WtWqh%5SlivK>m;js2en+!%G<|^yMrt4#tPieRgbcY z9_LN}BrE87*3X-)ppS3`KEZ07#2RH`tvUm%)eKyvzJROM7x_+bA=axFMAZt!)a7uM ziw&v=-D)S|>UPfeVUv0Y33U)jbsQ=67U%cTqdvrD^*3ZRV6zrPPOCz%b~d(XGqFvZ zh3#4sc4%GLsbz4jwj0-J`>;#fk3Q{T@*cy@+7n#!4EAZqajVxu{=qKju&-R<^@hK* z3$7+*(S~lU@pvE6sqZZeW%#jNUi5OUKO+n?T$lC#&!W=5rsPasW z2NdQI=jmFReF}yeqVLN`?Hks)V2FPF925kTLYkx8I5PzrXJ19lQ=IbGh~Hz~>4jQM zrnul#g&u4shg;PrbO)~+Wldu}O}TqNc5$va5z&1SgO?Xua}OCIVcJGRp^T@__17Q6 zwAB^U+2ASivC*G#7-tUPEIyrGan2yly$|DN^5LvO%os%Nfr6yYlT=Nss4K{-{l4+2 z4<5mJeFn?;HlJK2l(GNq5J*+F-bhq&l6esN2ncDg!mPAQn0aK?#vo=M;T1d@oM;q8 z)kd|SBrmqc{4{GkW)I^0KAjkDl(ymXuHq%AAbpG>c#fex&bD!am+|v#6ECpvUt}`B z#Kd?RyC~a>S8*4Aqdb7uaEL!iUgNKgkMV{w@Tv;)cZFQrS5i|WFYgSpykIMl^Ag^m z?rXe~)4B69Pik=ge9C3rEz~bXrAwTOg+WTni*Y5@%XL04m8Zb`H!3BQmztP*64U+( zLz3@b*nX1Pu3-z0%4f}WR85s=oV*`Z5>DUfXg(#p+R1y>3%Y~zcG=Aq;tP!q}APPT>}{{fj0elh?6 diff --git a/AMLsim/target/classes/amlsim/model/normal/FanInTransactionModel.class b/AMLsim/target/classes/amlsim/model/normal/FanInTransactionModel.class index 38f2b74ed5248c4023cd6961e5c0849dddd0e06b..4b398e8b67e17e4d0f7ac981987255f5e5223785 100644 GIT binary patch literal 3277 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 diff --git a/AMLsim/target/classes/amlsim/model/normal/FanOutTransactionModel.class b/AMLsim/target/classes/amlsim/model/normal/FanOutTransactionModel.class index 756adc6834da0c90b79d4ddac727fa8e502ca63a..2693e88f25356c90c9032c806a5987fa427ecd63 100644 GIT binary patch literal 3301 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 u)ywV*IzrT&^^l-Rlxu07siq~oi1us% diff --git a/AMLsim/target/classes/amlsim/model/normal/ForwardTransactionModel.class b/AMLsim/target/classes/amlsim/model/normal/ForwardTransactionModel.class index 4c5cd56b20b8667285cf1f29d730563154d6d3fa..b789f2dc8d0b1c378f749a9148d436c1bcfed530 100644 GIT binary patch literal 4185 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 XDaP!(KmbfWO0Kg8DPCW~`rrH)ayQ^N literal 4132 zcmai1Yjjjs75>h=?qqU9LdZae65gf5Bq7Qp)P#pXN=Zy0kQfSSOK&E(VPGEN&I|=? zX>F5At=3wxwn(*NF^YX*n~;<~)dsDl)<0d#UoMwRfB8dy*~OB^Z{It^Od{2pb@w@E zpMB1LeS6=T_dk98EdZG`)Vof#6ub$7WSa9hXQy6U-RRH>^vI4*YTJL zenZ1I<^1CTd<#zm@NGO9z#@D{$Vu7wu7;-q2;+ODIEbf(JSyawQk=r~eH;J&fqX7& zIPG%)D{7}IgOZJ&Z6jX~sRV*3H#Ef{m5le20MpM~jrlnb-vh9Fz*r<;i z$^QDzj1^1vHz|~)GlrGv%$Nf_+p3_M$v$TlNJsaZec8AvXZ^8c#67h5_QQsvJnd`_6){YI45aW~H(NO^$QL7cB2q@N7x-nF{4?v81^@o9H#IE~7V2 zPGwsvYQ(z@D<r8>ys%fVZ`gVrmTAntJv>$*`}Sk;RM+>L?M_z zKE*zTvb34$Ff1d%&{$OC4%-%rlZ<_gRyxtxSBSNiFvVsHR}}fz7E5QSwlq=5uL$IV zpVKPw<9+?~b@o(Wj}GMhT|Dj5b<^+Iz+1{XGe-1ayD?w~NyBq=nAx?R-%e+UxA5}o zL942VPV>0#15GL=)2Cg6&&L|3cAt<&wW1J!4y2{J7gY`P~5%KPoH)8uA(kwawA zdVeyTXm;clP2IeXvl@P+5a>*0t*E&*CNP=z8ChQ;rKICF?9|bKwK^Knq+^|s^|IU` zWFx+)V-q&(*p3|<&gl3tp4V|!$WJh=_=1iX@S={F@Uo6q za9&}?)YR&@6v$a(6&C)#vefYg-qi4xj<@lS zhIeKBrFi!%9lyq#I^M&}3N!8YVOQ8TBfX#T6_E)Ym+%`Mzs36+ey8IDTvoU#r_m{( zO}*)i#a2<2W*a>^KE&^J+>MibF837t$W^(U66`4yFRHN}y$8&wz}p*cvG1uUoZDns#!;4qC!Ml*(i`q+ zb^1)~7y<1F7QF-5Sy$?|3<%Ry8qcd?E4Eva~%0q48U_O!$@GtztGd>wwK90TW%vC|uwlqC)n z=e8xsrvsIR%;mYvo%G4+jrCg6%M->yv#6L9mW5lJr$cc1nke9}jWzs<1O(ucw#AuC z8jd}(gV`gSm_4$O*&|z-J+hnGBO97MvTxZVdl5%36q~^|(iW~hgqvUB_Q(aOh`EX6MF?8eRb5>GF5Y(*Q| zxuVt5ujz@*#7h_F9oXsk=6V4>_yN@viM)ogQOp`e)d+%IcuP*6M!B&4W0*Z8PS_H2 z+H#WZwG+^4hf!AJ9>)zXyn|4C#QR3+2@b)L<3As|l;MOvo+ROF-Vo*Xju- z`w52O6oL3G6M2@&ImcJwtCYON@iO7}5pVsNN&OR(`A?4jVk)noL%I2msp2>nooW%f z)KYY-71*sBdAmU14uasz@lH$<^`2t+k|5c4VIQefWgSO~!ChJX3I~^+0iVsf z%Z`HBC}496!6k2Ia^&bADDC06jTt27=d`)k&#M{7e1$V;sF{~XGfRO2!BH%D2B89b zyPT>U#lm5f47!Mri2?!^OEICBG>R(pG5aQ4(>=^}KYu$#*;EeLwneDF0i`e)TQ?in zdOHUU6|?Tx>nARp9OUEeaPsjkgZnB145n(hV)v_FUT?dnK4$t$c+~_AExCkn5#c={&jl=R^o4vO?>HhZ><;~|5a>r)ILFx8 z?k7x-6DJQ4DGwuoL9T}Q*Yy!R#iBUN*-LngKP4Z>yZrn59-g!lvWqD@&h+##A(Fz0 zTpDC1Wh79VU@|3LD{+!3?Pdy_c#|Z_OWhAL#rs)gd#E$ULecC(k#6kB_gs_jxh8*r l@=`oY;i;XZoJPD8^C7!NSV#w{mUTqV6}A(FIAvW({0EI)+hG6z diff --git a/AMLsim/target/classes/amlsim/model/normal/MutualTransactionModel.class b/AMLsim/target/classes/amlsim/model/normal/MutualTransactionModel.class index 5a761b852ceeba90d78f6dba5bbfedb557ed22a4..3d6358f99832d8561f5027b0e37c8e09b0e42c11 100644 GIT binary patch literal 3105 zcma)8`%@fM7XI!$Xc#UD637OSJk%sGfVd_bSBOy}c?@BQ21JQjwV7$5$xILS^kj|i z-58CpefWr)sEOHi*&nrZNKk7ZW!09uKl#i4viVc262H?uBMqj?O$zSqbMN`ix!?Kj zx%}t5&;JHsC;n<6qL4K6xuTu#%NMd%uFomBc{A6SE_o$0H}0BF(ad;u!AZ-iftbS9 z75fLLik{0YtG6oDj^pCJ28wc}O6NW{pO)C`3EECJg*cVcqf}23^-YDJMx_J(}yF(57LaR%X|0 zbYP=`HUl#JUn}BK7uR~arX0_5PnbDz8PM1*F12>ZxJP3R)+($Wu^nr)l%KNPadRri z>NkxPGG=bVbZz;r7-QayT~z3)lJ=fQhsvQHk2r z*%hk2FG$&&(ip}eg*7}++O(aDn1lT*t20oKG!7dW-1gEj9=RU+j~ zXS(n3)U1{91`LeRZ6%=acArKZHG+J<#sioX26+yX*GOUgikwpwJM(xDzcO%)NiOG6 zUDbF94^z>O^*EDht|EkUk!YsI6f(@&%w{F$fSd5HuA>si(s&fpl+TP=9Q7e7lB1Hj ztx=B}nH|^AXh?9D*Kkl^*lEj=LsQ|Ia=Y6gL&ze z2^_%-8ZY8Zpwqo3xzF$rq<1KRm+`8BSE|AMvJ4eUyeb;6;dcziYge)kKPsgg3d=3n zHITp`@VbFNDqQEM>m%$f6mpj72*evAuA^bc$|5~a;VtQcXBGOxvIy?)H5zD0I#rOa z34wV><6Svleb!HXLQ;AQR)Y@V5KSM`Mp=$7~9r%EEPhv^rGB^fJ}+>Eu~mS)v{?Pv35VHR6>jwlZlM?`Ki zXAyZ6Xsz?-34ZgQ_;cP8e`HhS7~`HsT*u!{{CbBdg43V8jCIK`uzvC~Hk8qt>@K4{ z*}Z^GWo(tPtBf8Q`^wlM<85X7^ptVOCqDL_{JqVOy^awi5+5sU!1ZXwO=v?8+W9v^ z2fO%2+{L|{gQyt9UVbsYJY>vCX5t;;{BE=aS*ovzDJA@O@-wtAU}z*552lkn|ANso zkB08(B1R(k2ac36-n|IEuKlrjY-x=x;;0h)XfK_{Kf)Rgt-XtQB!c^8m3`>k($%C` zLl`s3HD%1w*u$T#R>C~9hm#%WP&1ExGK*b6y^QgTxG~vr1v%Mw=8@Av*YYPxnn#Q5 ztGR&Mj`$_iCSx=TX)y?C`&kO`?X4wEjo3;OxA95ajv;j7Fz1ssIk@(^(mR)Jpc)*BN6SqFTK1OyD5;nIPT;BQHtnc9AJqL;yI-7I{&sf z%kex8;Sxsh2}}JYcm17$`i6fq{1^A)e;D^EJ{ZvW!#%u;ixi&Feia{5GEqhxA_{BC oNNxBN{!EdbXaA8|j4N%FBFpcKhT`}ZQ{UoP8zKHekO=0#2Ph%sdH?_b literal 3054 zcmai0>sM4&6#t!haACM0A{gKUduZbTl4X{tD2NsaXhN7~>1F1MSLcCu?wGI2US{uy zmZqg;8Ld8L%R$jr^{Eei>PxG&@;^ye_S^Rkav@jg;+%c<*=O(H`R%>WonQaH`XhiP z_$Gon^lNxBf<U5XFEDnhQK_#3Ba@ZHabJ!n2Jr2llFigPm zFCxbdX*jG@tx?ht?5Yx17D{c1XQiG=5Zww}>sqD_gjpTq~Te2=FL(VQMtI#+e zAjQMU=5)qR8Oi3JoRc$>{REjc;*OO`_sA}h>4wLXi$kG${B(gn51v9<)^s)+wvjR& z(`J-lQ~+uzQ&4eTnlh|(;fz9JYP!;W(f_=F_RF=YYXX4&%DX9ucbfHfA z4VxiNzc3A6%b-W_dt0KLIqdHzkyN+Wby&=+rcu2>acuU9Ict^*( zcu%2xa^dS(h?tJ|@qvyHaa_jlRe(2-C%3SX-Pn&)w6fIy(5!z zUptL-=FAN{1xbhh=AHp>HQf#39%|2IlBSX7yA$2&w=L*t+~U8E_pILG{q_}wLX#^m;+k#h z%Is8kX47*H(PjxA=D3urQwZ`u&=R{06}yJOmdgm{5sEeB5so#Cq9_kd=Hfg`WRB!f zDzlzPS*$US@{6wTM>sA(3CC(iD91F+L=|c<8@0HPNEj_<&|jlP^!=9Q$E^PW0w#fT6we8tM{z7frLYu&u+)wUj`yON zyi{O5SzCZM+>b71bbz_s!mRCPE;G#JVJyN?zO)}RgCpeS5}6re?u5Z5WTcI3OO``i zUoCK1jPJ3^t%M4Ei`Co>&`&FE+sXMFTIyugvsy%{gPN6y++w1F8loE3YW&@#DBfZ| zeX4-FTX_>D8rDVsLf|GE)wBv-3hFUD?xl*L`I)23VCC%ZI0f807rClsE^dj=?E+eb zPTt(DMRkhtH11um7cNhn#x~C7{9~HtD2!t6(vX{{YAVK)U2_ffTbf2O?+We~^WYWS za~b!xgk!a=l=~!!;;y!dLroRtkK+Cj9C9O2Q}&v{I7u;(eY!b$7VYA)u$jW+Vu&NQsy@7E6W za@@`zx_im%5i)z6B%L8m=dm6a(TyL_gP&;i8#dr~Y{Z}FbE$ot^v&Y=_4E~@k2>1+ zuuRVIxezHt4|P1Z*lnikg%pr*`q}8F|{V diff --git a/AMLsim/target/classes/amlsim/model/normal/PeriodicalTransactionModel.class b/AMLsim/target/classes/amlsim/model/normal/PeriodicalTransactionModel.class index 779386cb22f358efede5f89e6ec0c9127982ab86..be2fa2b3d482b0d565f9c78772b75ccc472fe82f 100644 GIT binary patch literal 3214 zcma)8`*&1V75>i5ow>>6hNKVz5oicBbY?lfVA!4}S!305?s<6!zKWlJAy>%GIJ%8md&ivRxXQc09LQbPIOrtY=qzyAZh5 z%9LoBFckXlIg_9F1CJ`}RTUC$rRcn@(YVju~u@% z#}r!JO5k|Qc1a=0tBcjL!p6yq_Od-x3*6GslX@>l+dfVC3R`G)!6`Ofo-bExl|W(F zWaQ>q(FpFNLo-P`(pJ1YdC0A}!H7aO-8h>s6vWyIuUcEm{ih$9Sq0-Lfk`2bEfzLm zt3o`TnQeu_M=T_eOnex9Wa~i-CR${+(?V-F+hrkzr0hLpp)H*4v9KYOrY&@!Gx?`~ zGH3jV+FlC}V57|TSs2123YOjEro!g?dY{6695C@Qg-sDK&B0mtI1bVhk(yb{6hoPi zbB|hhOvEXQkA;bo?VN=}cwC`fPBmqb$Hql|*uoK!w^2SGC06_%wP2xLp<~jmIHzjm zdB;0z&zBs@b(O4}wLMqX(WVhBx=i&Wjj;Ytt}?ytz7tH_o?T}CJwL^($1P0Y35Bi& zr{Z{a;2ig=<%VxeW_mnBwkF8E1-jEtEDD#V?4`&Pfk)TDDVn5_bSC6PiRwc$f#+5h zaxFMRpw>!=;k*8t6wc#Szy5fLpIqJYR>8B$?x=7Gwz{QE`=ICZDLvBfi(-G)oRJHD`J9; zs5?E^d@vI7;dE0*Lu%fq?wfQPMg;yveBQzrB)+zycAaUju{Z3;mn?i) zfS0(Z93i}K;^l^`8uyd7zc}LrDZGSN#F?)u^hC~R`O#{rQdgW8NvM14;`IDQ`khN2e*bUs`FkR4WoQ$=UbpZjZm<=U?MqG*#})RZ zC&t!ueEoVt8n794KT>DCoRwU3{DAD~Y--+`;XGFk6T#rM65*4Uv=$sU*h35v5|w*9 z)8(Z`ciPo-LM$Iz@5Bg=^ff8b?0t1oGu4_`aE`mu2z%EWNE0f$_v{l7(MRy&`bCJz zGs9U--WEObWzi$w6+QA*(IcC#9{INDkuQrL`J8Y}(BdX^@pm&<|DbiTe<6Dt-Pw2@ zJ=rd7t7Atv^k!pq^vTceaHBt~>Ufy*OdSK+fjS1W1Gn%|Il%D~b@a+OEQdIb$hp0B z)oj&v+jcpj@>Ht@dVK?%42;=C-8SKG1N}ojr zW3;m~bQ{NToGS((ZzO|~nE(*u`~d1H-WBc$H-1OZq>A$z zv8!*OQzpGv--H=ofnkj7xQ2Fq!`00YSHbd?7h13W7^Xp`_(5Z{ag#{@MP~N_$h%qLFj&lpYy(H0{<3g30gdg zU*MPI(K1WxSJX4HLOVNG_1|9Ae|uH`*VGr*^}^`Fz=!0aNzNH2&YLLc|5rGtf`U{~ H48Q$1u-@$) literal 3215 zcmai0`*Ryt75=Wg(#p~*b{yv+oM0!dGqUn<2_b+J+}Lp*cI~_z9P)J6($?NY(z?5= zknpCZP+olEGtimZN$3pl8#4_20sIgBfj^)_`OekKmQ6a9z31#b_uO;7 zbI(Ki$AAC)7XbTlH-#MRX6(jP{KM!YtAdcC5J$*ULZ*exB>wszp5#YXu8?afTt`Vr zSx7~QCmXXVlBbjKg$F5gBTVB8swQs8;>#)A#H|#*g0H5K#n*&fCXHwD9TU$b9)JIz^7)sE@5XC5kQVdbGx5Aa+^rOyn+j@Jp*aX`KO7I8S*}ME zOs7(;tx`c@#wk`y&hU^z(yfG!f5R>*Bz(J4^vVitqu1;kc5gLwOTA~c>>zCiG!-ap zrrBwyc#g_}T?k#TGEnxal~7^Fs9i1vZn^iIXoL^Zp_zmoX)8KU9C9me*sqY!)z1zT z3S#ZJ?^S0H{y&bM2?gVbS9BCwM%{{YvRa;U{B!nHiITQauV9xZY~Pi2Bs9Vqm#`nJ zJ1FyTskh?!WxLdS+VNel=<-xUJY%9ksFvM;MPXyz!YYUgnZOB8+rC|9$UZ$a$Dq8*d;egn2{Ulxkyv9 z8tvq)9RyC1S*6U7tZ>V#hJjmjCL^z{0kho@5@EIHM%DyyP;i=2kP5A9w;4py2|}K2 zZAiqZ8-zq?mL0iyZYH(TxWfu)Y0#s9YKCkoY+9X}TeJ1->}WV4mJh83(N81W8g@FreXSijPpC+uK`HzF#(vhWsuZQ(cgt%(H-zr*hp z)xc(gvUGNREiwWz`om!@=hd3?1`I~B*bL+6<9l~=?@Zn&;HNQD}% zwtCy?8CNf9H#l0J4R7fdW^W0CL7Rb2?ikTKYxQ$H%roGxlm9353c7W`xN zF3m=Eb-+iwQpwS?ThD-I-wAEEGEm}|z(?xwLXs{goE>_;;E&*Id&7~O_}f-8UYBwT zRGgcvhSkIF)YLU%;E|THecfp&L4}>Uk)gGNVC{OOX9C;#&6m^P#W87PzQv@IHD@zx z&VJUMEv-3QRdaT?=4^1y+2iDKDE87J(l2oJZ#3}_n9SdU$~P?{mTw1Hyv7pw*dk0J z$(o=!uNINwdwLO>{H{f;%kNr3iyRbfF&y$cMA{*6Wp@$HWaisqSbGyL z{&w)`=ChAa=K^vI=+1ZCN4xPPk1k+K<04%*CBZjAf2A`!46&CX?qfLnG0L4& z%+gtA=rXf2$=tX+QDS%@!;*kE)dGkD&R_<|Xhq>T_cBO+fUU~N$6}UcQh0)QR!i_6 za=DeJwvB%xi)kDQEjq64TD9%SZcHXRB~lxIomjHdo= zbI5FaHCo-(S`Iam&pq9IyDmOpY&7nQf9-gaHuwa#V2l@Vk~uw1`56r)Pj~&)8|9uM zZX-zYc9Ny6c&dljG)5f>x)sT`ro-w3Sn4o4kB_3YGo%Eso@I3pg6f3Kxwfe3Dfz2m1`J*Day5Fa937 zE@X{+*xr}OCbIDd*b&3|Y~lePQFwqy75;|qK2wbHNamG0XkoYPl=XFK8M&p*o~+r9 zo+a#((vYaZ#IGa$5VFVqD+Zd7Q%+>F+f6CioVo#UnURuL;`B(epU1T%?_@W&KOb`j?jV kFH>JK&MyHr-EW7OU*s`KgH+od;kCd diff --git a/AMLsim/target/classes/amlsim/model/normal/SingleTransactionModel.class b/AMLsim/target/classes/amlsim/model/normal/SingleTransactionModel.class index 3b5eb2021bc450d77342e3d6fca96ae10f772308..7124416236cf642010328f112cd5a23151f3fb4e 100644 GIT binary patch literal 2229 zcma)7Yf~F#6n@?ivLP&mQqoE*mr{#KfTr|Ml!>DIk)FL=e%eC`0JP709?U$8bS&wqf~UQ zQo2+wn8mbRc1lJuy=2+zMRVCPY}d$pR@t5tsfMt^`2+fsYp&-|<*=$ki|ZMVx8#}I z3Tj3{Gwnifig>%V4gD9&C56t}O=HJMS3IkjUi9xW3XuuRw!CXZn3%1_oXqFT72CVz zlq=hrf7>K;3gPQS8bcG>b+n>Gp(&BfHUC}vYk@+Sj%Gw;cT$HI>|WCm4R)t>v>+zZ z*LC!uS3x%#qAJ9X1QSC)1~i;iIB^749p~@{J*}H0WSMp)M3{eD3i>^a2qokXmRXd!E}6p*?_t!(>7-HXQO{Hlmv>Nk0pgk96elanJ-)1_{cOFm}jv z3@i9V!@W8OK6lgQ3Tva|Q`{#9tZv0zc);FFOgAzdXk}vf42Fi!6^{EzeGgORa?vzw zak0jikhs@qSQFB65e0ci#4?^}s9n%7M?Ap>ow}1`PN-Vfu>p%IkpcmlZH%|DwrS=) zKirm%qVUjK@Kel5YB9Dhk(R+x(q1yQ8V8fYU}9$aaD5M-XZ+FN`ol=8y=M}7SdA}Z zZNKIn4FkrnxO7{kBuzmkIrZwZF({(KK;7Mc7Mf3@*|H1fF59DEN@JZo_}Ct9*B{)# zq39EJ=k*r8MrUoDCi$&7W4rcBV@u_VlQ(Z#@{Z3OJ;X0a58x~*ZQ@rTjF3!2?m{vP z{gso@UpWVT4Hg4B_1k#*iB@7aoqCRAsV*F^;zY2-gXL6exQg!7P!(rVLwo2GIoI=5 z#AQuXF)ZuFDlR|uqm1$Y1x5f)6HOO)adhG&x@G$EcMg3R;!L|t%oz;u*`LE()b0;( z;BCCa6A}6P%HIj{5D|~lBEUVuRb)+_6F+kaLBdA-t3ltLBuH`1ox(MA@J3Re<)=Yp zy{XhQCi9HhJ!3N5n=#{uJ-qk5QN^iO$w+7rau0?ZJooN<0R=^AaN_C z?jG0snDDb$Bnw2kPxmUmsPVT72QHb5;4VB=7^|Hgc93RcjUj$%bO4${{!mA2q*vm literal 2217 zcmaJ@TUQ%Z6#h;~GGQ3XEkUv6BH9`PG_+bQ1W_(+1p`!qXsbnsWC{bx1d|EUdVO&% ze}GT@2|n4i2yJyOm(TtuFW;U?AYhfObuRntz0bGz{`MLE`0JP70K9?kbezY0=Tsxm!^<*i9@RaS??zBQ8o;C~lvRz2dWV6MJpiSFsFwQRY!%@S2yt3)hK zaS5Zn%ycze&4Xxs@ytajFW|D5Vy%XWrf0PjBAb?DrR}mSrzfcv2@z;cr7%kc)@ebZ z!#xRjrXcB77_7ToGfNE0YDDJi&`rp8a@GMWkhA2X?$h~xuvgFd;28u{b?3G8rKTk- z8Q0A2E}45?p)_O_^h~i*%33#Vspk3T7w57BXW&(g8R$d5fdLs_mSGUD7#PNghMWNl z_YG{xunpV54kirj$|{cuGS7FepOSeofqb znS8P`=k<;y3)!dbvT=LX`!FJl;3+WSxDyY(D|v z_qVXlIuK@H%V0Sn(QO zBZ!K%a-R(vpKokEUx6g+@KAY1v&CZGG9A)3ez#G#Ca3abyrFyjm*qK6P=ik0RGPGj zhy}+&qwkf?9V;sh*pl-guM1v2T?KQu@zqhd6knV_+azcAi$m+=c`qM-Ac%mlpR0g0 zfH$)TyqRs_X(&?iBIujDpU}h~FrRn=m53rxMbMu@{uEA(RG}q?tB53qkI*dVob@U~ zGPhJ=$lO}RxyRluuW`JL7LFH)CdyR|o#^HVq?gG0h@qdoIDprQImOnTqa;r40Urm3 zkl>Dpq+^LvR)Rdh^(a02xJNn5SyN}*&zu5~Yr~%ClIPCwk8AD}k{F{zLQW&%o%JOW zhYaSB(H$}vt}WgC;Rx;Dn^lBQg3;+61k+160@U~1ckKBJuKJ!;6wUkr8>2_)m<;v= zpP^G>Jk(F;;U6C%5(_;-@bRzcxCiohYG|u03exE0>f=S%Nl!ttk zkrUl}y~oIX-Ko8b*plxaL`!&|h7V45B! aBfjO^w0wsW=Il@OYM5b-6lN(2VD2A<)Cd3o diff --git a/AMLsim/target/test-classes/amlsim/TargetedTransactionAmountTests.class b/AMLsim/target/test-classes/amlsim/TargetedTransactionAmountTests.class index 972464e7d291a6fc2e8320beb6c4b150ce9cd6ca..8db1c51bbda9fc315832309d4b3d802afa638949 100644 GIT binary patch literal 4172 zcmc&$`%@cL6#g!RY}qch1*}EUR*N>_(P({>ilI=IN}wf3t?x~;z(TSccQ<|b9N+I( zed{=*KR6xzMV-->>Wuo6opJn!^atyAcQ>$sQf+5c!eq1Oo_p>+-*?V;@2`J;|096w z@Uemhfh+ZL$u-NVN!^(-Jfk@2=$5M&Jkz!Y%XZcBCJonf6~qMA&*=yCR7tmHQsenK zqu>d|>0PwT0N_R~89vWlbtmz7D8~sOH<+^I#n6@2bw_cbP=$K#YMZE~MwyD)Eh zb}Ab@HC%zMTwa>VV^#rRdnJ?4Od~Cz(wSnyIVoHPuH-DBzhEd z*OK?+4%<~isG%2q0?I+XR5iw@1ujesN7o9xxYlN*G+d2qxXDAa265<*ZZh0b(#NKj zo9k8cc~e%HHDmLc3*Xc6%mG#{|JLGq+^FCNfvzYht4-8!liYynaRU>ES9L6jLBEFd zA_n^56&S=bX0V!qTLoG|at5=b=W3qq#C2~#>73*stE^KHd)*yTZ@WOS1*B3 zq*n?}q|9qUl2bCw-5L%^me&^jx}B2ss^VVUui!rBAc0%i`-844yN~*y;Q>4-ps|-| z+5K=;FHtj^62rsEDT%+XAunaDsZg?A1}I*4d@j2JQkEuSz$)Hh9bBU5en}k;#c0>xKD9 zr6$fjt1h>*7B^^{^Z>)Ou=oq}S-lcU`!cC4#xwb!{l+6S^(tE2Zx#)nEHg$t^Hs+8 ziD#U^S#tWQhR5(YJ2GHv(y5Y(7)y*$wnszlGD`L#>RvoE>_?$+t2w*s6pY(Uc?4}e z`$@Q6l1ou!rFkyVtYi&u)-F=3pTi3Zo+qA5^qbZ}d)`P9hVb#jQPu9w#zLGidRZe8vjaZi9_%dqn{_zfv zxD~*j2_6OS30!t|SGG%lrGgI`cQpmAlU(j7s=&CMh119i68!Mk=dU<_@m|C4X1=BT z5umC21k`V6Xn+h1eiCyHt?4WB@YN0C`}LP*V6q1+775EaN&2@ zv=mU~6ri2KHb#QBEC#)}F6bpeP@#u={<5`m0hj&E8%ob{bS)sUfbH$r!5=4aT?6*h zdUMUXbI~fYVytyw0h#_-N9=pBkxt@{2J{4Ten9p>5TpBBY-(J<_z6t*H__D5bR7E^ za8F0<7rw+!;vs=!NMz-^8ou}bG}e0xYx=Us(9+xYIo9;{9Y>+}r*D{N230)E3~t8T z`~Wc@(yM%!F5!14kLF8xKiEvqEy$6hIbM>g*orUE<)hQhIlz}8I?ebDCVd3`_hB9- zj?VFhQHDi)Y6`myrjv?E#zf@yxdA& zGI#=mILa&RFBpn&b84|Ieq3w|Yq2d7E80Si)!Je=)YEtb@nvnH@EV4UXw8Vz6t;iT zG*6t7x%1Jhb7Stw<;=C?$$ztHM%XlaNY0%kCre7kNX|IP*~_Nc$EKNx5c8ktRU@8a o%{1U?Jj16HzL$Bxy@EIK7Hb7Oj~Xbt@8W%Q-~(QNKZ-a11@B1qA^-pY literal 4111 zcmd5MVwBG<-e!Ekgdq7{tD zwu(Ky&2;G2i@D2A7qW3qk2Zd0ynT28IBoAxY9wftTeS|ds>4= zZm(q)bjvYxuC=)wph`~l=4#AN6w0`*nli|yvajw$obIAq=%$|W)1wKk;G!;LSi+(y z;1M{}VgfMS*1T${GW(5;P7Vw+vrYb~ZF<%`=0d3qnnf$E?=VF6Tkf6NEAklsv?V=jJygH1rGh$}!nIRl+Ks#S2RJ@8eg{PAemfnvAGTsuA-xlkAN5#8hE$^v#A0MbV zC3ZI3-C35XMTSN!^Oz_E6{m4V#fSJv!t(n?5ZNJLJcL|7{i(xx+F^PG+wVp?R%Cd$ zD9qUtHAqiR3L8cad!_CA?8$1j9c}YTyeQhG;uS+7}i>s~&pWs7=0 z`^cPduivSsK&OFYBRWfOqkj#hh;3Cox1C}tWe~mo{IJRQU};Prt^VCjrN{Q+Fw}tV z6fFjHH=`ZD%VrdTidVD}I{oV^W8)8(@YlG4kMW6u27D?Zs1*v?6EZ%NpeA+8IAo;V z_Qc_?d|tO)XQBbLg{wE}_t@&Ug|1s`|Hrhlvq@lD4wSwOGFNEcS#watM~$6srVY_SOQa}v?>8S z4aU(j@<+{4J;IKg%4lpJ+94iUrgefF&5e&_T;TB#H_g#vLBgN@C6*j`eP<_6)U0l| zdYUCr-GUr+EVA7%sWKemx$tO{UdVgf`e{%K+oNT(gFI152Zarx)QbiDZROLasy|0% zd_#aI0e823OIUnwJv`3a(hA;CB>wSC;8%!WJUaMX#Zkna0fOzMG1dDk(U z>-4m5qUnHV-TpHIwPTob4b6R&bY8{WG0f}u9jzVLF<-(ZEbQZ`sXUs#G0-_ba1{$X zf4jmBMUmq%w*V)3RGsEK;NsN|g-c$DIxNBxJcbQ?MzItLCLoPvv}vK$5`2kP7m9Y; zrD?OCnzhv2k0cS_tFV?3$UB8^ul+L1D9OdFY`po`HSPChv5DhoFk_$ z;(Pp1;eHqY+X9(dN2UtaZy*<=*uq?FWiDd8H+JI;w$XAkenO8gA1f;Sw=4X=T;czZ zllU*R%KVRE+HG-V71Wo}6q9Dfq&t}T$OX||NzkJ-pa)G*%Y+0qq2-?}h+Ry=ZYE(5 zlaL@(eSG#a342)(`&bYO7Q}!r0smP8swE%9S<{0z_-^FaYh=gkp*k+`JkDZ1hA0Q9XZ~v&$h5!Hn diff --git a/gnn/.gitignore b/gnn/.gitignore new file mode 100644 index 00000000..285877ca --- /dev/null +++ b/gnn/.gitignore @@ -0,0 +1,2 @@ +data +models \ No newline at end of file diff --git a/gnn/README.md b/gnn/README.md new file mode 100644 index 00000000..8210f404 --- /dev/null +++ b/gnn/README.md @@ -0,0 +1,9 @@ +## installation + +# anaconda +1. conda create -n gnn python==3.11.5 pandas==2.1.1 numpy==1.26 pytorch==2.1 pytorch-cuda=12.1 pyg -c pytorch -c nvidia -c pyg +2. conda activate gnn + +# pip +to be added + diff --git a/gnn/__pycache__/data.cpython-311.pyc b/gnn/__pycache__/data.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..07819fefd48596684697a41eb5fbd78acf2b085c GIT binary patch literal 4995 zcmb6cU2NONnbf~!%d#XZk*zqk6E~@nRF2)ab<@;|(>QiwMQh@=L0vZ-BT^1+ic&~A z{wak8MKEYXfMuJ3C`Gyn!;pE13;1P#AM>yQ9k2&dxWNX8K5fO2J*7zZ(wFT!%9O;| z#xnYJ_uYLz_x;^{=im8!UIM-vnIq8BmJMYeTCOsr!BSs0vafe`>k8A|-7=D#+vVkEdh?wgso+e|Y?l?!w zG>k2>NOJ-uvyx0nIi8bKTO7t<@;~1P)B6N#XaZWe82cS^(vEkUbTCek?AHAwJkRB1 zE`=pato+ZrLr=K1H=9IHet{Y%G{GR^`p!_hXfi@vSyn>GB@gS49(w$BMP!oL1bdVXt7jO`tYKr#S4?9Kp7EHRR_XZ$%iaxEEaR`=U2!Qcrllsc)L_c2AC(tm z08ilmohfPfI4k6dnAe5$hD|WN@+>8G9fuHJgVaIc+_^euD z9^*V(e7y6S-hnq@@LKeJNnYT=ymGV_@0n&3R=hQ<<#uzGAZDtkZ8h}5t<%X}^)3*WGxD$_lzi~X`^O&$LU&^7zRJ*_sy-oL z6I^O>dOgQJy-#r9>`y#XuzjA)+rX9NFKu@lCWzk?A|`+hZSmu}U0~;RdzNP;oFQFZ zUElZg-pFRyUY5DV3BBi7X;#kWdec02y?0s=dKq{J#dC|_drvW3N={`nxuK(p&I2K)`7qaggcJwxYoXNDE0S-nxpiZXSJ=I2;RZ-hXz^41o1o)vUE z%yrim+QCU2#59%7E$YrWfrB76u)-V&f?XhBSuu4(cgd^(G9mO?VOl3;-J8k^GB-V! zos)EDn$Oa*xCa}E!vS#zck4DGr@Ls-d72e*kab_>eG9g7DbTB_GUe&(EDu_OI#|ao z6n+DnGcQJ&WQJoZlUS?nkXSygH{$)MG^7J0u?JI2;5qS-p^L<_jPBk#D7q87Thcw| z3D9j!T5mD1T$*DUO2{&RuV1Nf1cj_XaZ;8Cub5Q6IzABN1_k;dF~uIdv1?0Xugqn@ z8ak7cboZ7?;#r^&&p{`(LI?S~?Gtgb=^isDmm<4mE6y0{Z{YXa#5cj#<)g(}_1LJk ze^d*Oq2O4-{Y^`7xv@B|9yzb=JFm5jqL$Hu^P5n3`R(GT>T4IY&I{_557p3BEp!!y zt`go-O^d#VqVE;l_uQH%0))+bes=Ar*NUSn zd)5O_J}g|*d_~kq56(!z5(PLDA>OC2k-U&Wd82_ z7YB>e4~{)NR`wrK&Gv6lp|dz&nqQemhu>W9FCTsfbq=lHLY?PP=OrzgMA4+`iGU0> zbWrp6Ab-z_v+RFOHQQ#itMtl>`?v9p0|Vs)1L_;+wF9H*!01;a>XncFlH5p8k-CA@I zMF$JMdo)B9e7`5UJf$A!M+e^eQ}~bVYB-^V6DXW0csIkH_osd__48}X*EYiOayYJq zkE8JMf)~sRLcmbqFbc#AuCD`omiHCYUyiJftARl+Fo*(!1s9gwR_rLSWp3(Ku-%cn}djjsN3SHJrD#jSSvirUq$bxk1LCjWYU8ePw*AwdfXC?pg-z!z>S z4z79E(`xI8);fY(M+%O+4X_T$9sAeyfxKvg*$1|d@i1fK@sJ=h7>9@NDud=3D>#s+y_i_(K}X(R|M=_6w0d1o zbDskFnC&v=nyAQ_vay(XqB4xx(inFWiWv;!_Dgmcu8>JPkl+F2<3aNzvHVD}2eltv zd4H8!XV6emHJaE3hul&%tN*r70_Hx{%o!LfAHdc63UKvt4shLbY6f4)#s}-w#}2?Q zb3N^bCkL5~xkdbZ7Ej}D7jM)soBx80F zyQ9(>1=NWzPJzy_6s3D9DwAdAcnmjD)Xh1XuVBOvFw<4s;g^LW%TQg!E-*SQR>C&l zuKqoLX$heQel;P6O4hVGf2 zB*{%8q?&D$Xu56uZ4$4j*0xCmRkLjpCsb>D<`^`BvUC3}f!Dt?`e)mE!zup-ve9S> literal 0 HcmV?d00001 diff --git a/gnn/__pycache__/modules.cpython-311.pyc b/gnn/__pycache__/modules.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0784eeb3c44813ad36a66a548ac80278c02d8f24 GIT binary patch literal 7337 zcmcf_TWk|o_Rjb8Y3WZjg!~H|W^pW69{mm~H;70?Ejy>;q*E7Qz&;#NBGKh#*o$9o zJnDkVuYo;@jBz3v0Z&ge@T{6>Dd>t9&)Z z32w%nac6mh2L+DQEE&7VPlMoZ!QSp#`x{=h+O&@lq)@raRX$@|y^4XScuner#8D2c z`BCAC7Mo7?w#&5?o@v` z981NNaJYX@A{~t+?Aolm9on*9+adUiBT zlY=5f?J#9T@xUma(=#!Sh;lCgWZZk$c{yGLTzAJl}vszY=^Oj?amz(4q+~C1Gn(*s2O$ zn$T4cy2_zVS^I3wVxVb$V}3*p3}}IYLhbgfqb&F=U4zQ!FaEvx!O$0*)ZL@n?osGa z14lG~!V!jAt)efe!V6i)VncK8WT~O2*wAykL2Ve&8U|n~&tkAC_ev?)RSb5O&7+26 z{dDU7*aPmb@2M}3XfKaIhw447c@ICd@%5g^1OUtx{_P}9n{yXSjorn@?%P9!#%{H- zUu*1#F>krC6<>=jZ8u*jwe%HR`aY2s;`f`>{{342ezoO*)^Z?g*Mz2Wpbik7S@YgL^vTm~rwX z^Z$HKmF!nom}$Wm4UG20HcY)0q*JZRQBb7EKW=d9+7sN~O+$9KV;= zz}zO2;DT+H+#&kOuPA_t25-?`&FPF=X;~SLTPIM}Yhh&E@l7VSXkS^Nnr3w?k0xwQ z0dCOJ4V~e3eXa&Oae5CM!*pvGqeW)xU1MiG943jTS7`v+@8+;Lbp>X zF~$50-GQiE5m-);qUF+E;LE~i)8N4_>2~GPq@>#u>C}Yo7*C`lioSt){qTeYp^rji zQQa}6#1gXZRnlPykYp(w5#zes+Bxjx{FEe30~s+EnV{XchC@CZ0m3}cVh(N#?gRau z?o39M!FG@i zja}3Q^uUR9dXl1?s&K;%B-Nnw` zYUgWO=WD8eujb#IZ7=)$*MoD%a%0!FnQj-%C#+X_M9*u$kogbUGwMs z*`dYSK+ZXL{+c`IHX82v_Ic%I=AQVMWTAFgtsT~ChqFW9l>K!dC4Q5bAH15LO=oRi z1wy$dEwHr|c)l2T{`Rqj<9|N&$5Wp-eAcY?4QqYFYT%$2I9Ljd6aypweDNQ<)xZfY za3bqm476#1u2Nt}F|ecTt(`qm4mE3`u2QJK80uF;+qKa4a&zm={v{Ww+xd{#>%cVw z$U2uiq^{{k>u+209I&GWI)E1V`CY%4ZpLqi7B=0BENoF*U)5S)RfD^<;I2~ewPNtK z`{HNk)ZmB~9LWl0!9Uld3eC8Q(43OHaBXvL^Ah3R4GaMH{@`q4{-yj&s(+j2-v(j~ z)@Qr2UF8jR*AM0nY4zQu`oUuT;JvQ&g+>g#6mfHUJ%tOx}> zuf=`7VrS+KVeM5pDde4a+N^vZI#woM&DRgfxnz~F=yoWNw%OgI}iJs~5_db3`3QdPQ$!501> zeEfe1?D4xp>v-JFrNvjh(GtOC?!S z!jtC54VgucFlt0$_-#bz;nN829l|HW|3#oNU5_WfdiHJ@kxv4E=&8ObH?l-H_f`h7 z!w_1OyzNDAyXx)KyqyL1l z=uEUC2=GVB-QQoGyI05cEEl)zGRr}52dq@*AnWAfR_6bdT)gs|spYHIWXHD3Zvt`4 zSFv1trB#v5uak>kgk0S6D<&WKUbC7j17p%VGNv;^AHSfnmGq z@6h}mKSh)dk!#jtm~wUzUGz9?o1Q>`H^(sLc*R&WO5erW7yud6+l)Y&%}0PoAfEyN z7T5eO@h-=}5?Ke-*&T4tEZ}uxr214~Y!+98> t).type(torch.long) + f1 = f1_score(data.y.cpu()[train_indices], y.cpu()[train_indices]) + + loss.backward() + optimizer.step() + + model.eval() + with torch.no_grad(): + valf1 = f1_score(data.y.cpu()[val_indices], y.cpu()[val_indices]) + trial.report(valf1, epoch) + + if trial.should_prune(): + raise optuna.exceptions.TrialPruned() + + torch.save(model.state_dict(), "models/gcn-" + str(trial.number) + ".pth") + return valf1 + +def eval_gcn(device): + # load data + elliptic_data = EllipticDataset("data/elliptic_bitcoin_dataset", val_size=0.15, test_size=0.15, seed=42) + data, train_indices, val_indices, test_indices, train_labels, val_labels, test_labels = elliptic_data.get_data() + + # train and optimize hyperparameters + study = optuna.create_study(direction="maximize", sampler=optuna.samplers.TPESampler(seed=42)) + study.optimize( + lambda trial: objective_gcn(trial, data, train_indices, val_indices, device), n_trials=100, timeout=10000, + ) + + # result of hyperparamter optimization + pruned_trials = study.get_trials(deepcopy=False, states=[TrialState.PRUNED]) + complete_trials = study.get_trials(deepcopy=False, states=[TrialState.COMPLETE]) + print("Study statistics: ") + print(" Number of finished trials: ", len(study.trials)) + print(" Number of pruned trials: ", len(pruned_trials)) + print(" Number of complete trials: ", len(complete_trials)) + + # retrieve best trial from hyperparameter optimization + print("Best trial:") + trial = study.best_trial + print(" Value: ", trial.value) + print(" Params: ") + for key, value in trial.params.items(): + print(" {}: {}".format(key, value)) + print("\t Trial number: ", trial.number) + + # reconstruct best trained model + state_dict = torch.load("models/gcn-" + str(trial.number) + ".pth") + #files.download("gcn-" + str(trial.number) + ".pth") + model = GCN(165,trial.params["hidden_dim"],2,trial.params["n_layers"],trial.params["dropout"]) + model.load_state_dict(state_dict) + + # evaluate best trained model using test set + model.to(device) + model.eval() + out = model(data) + tmp = torch.nn.functional.one_hot(data.y.type(torch.long)).type(torch.float) + y = out.detach()[:, 1] + y = (y > trial.params["t"]).type(torch.long) + f1 = f1_score(data.y.cpu()[test_indices], y.cpu()[test_indices]) + acc = accuracy_score(data.y.cpu()[test_indices], y.cpu()[test_indices]) + pre = precision_score(data.y.cpu()[test_indices], y.cpu()[test_indices]) + rec = recall_score(data.y.cpu()[test_indices], y.cpu()[test_indices]) + print("test performance:") + print(f"\t f1: {f1}") + print(f"\t acc: {acc}") + print(f"\t pre: {pre}") + print(f"\t rec: {rec}") + +def main(): + device = torch.device("cuda:0" if torch.cuda.is_available() else "cpu") + eval_gcn(device) + +if __name__ == "__main__": + main() \ No newline at end of file diff --git a/gnn/modules.py b/gnn/modules.py new file mode 100644 index 00000000..a4211009 --- /dev/null +++ b/gnn/modules.py @@ -0,0 +1,74 @@ +import torch +from torch.nn import functional as F +import torch_geometric +from torch_geometric.nn import GCNConv +from torch_geometric.data import Data + +class GCNLPA(torch.nn.Module): + def __init__(self, input_dim, hidden_dim, output_dim, + num_layers, dropout, edge_dim, k, device): + super(GCNLPA, self).__init__() + self.device = device + convs = [GCNConv(input_dim, hidden_dim)] + convs += [GCNConv(hidden_dim, hidden_dim) for _ in range(num_layers-2)] + convs += [GCNConv(hidden_dim, output_dim)] + self.convs = torch.nn.ModuleList(convs) + self.bns = torch.nn.ModuleList( + [torch.nn.BatchNorm1d(hidden_dim) for _ in range(num_layers-1)] + ) + self.softmax = torch.nn.Softmax(dim=1) + self.dropout = dropout + self.edge_weight = torch.nn.Parameter(torch.ones(edge_dim)) + self.k = k + + + def forward(self, data, adj_t=None): + x, edge_index = data.x, data.edge_index + for i, layer in enumerate(self.convs): + x = layer(x, edge_index, self.edge_weight.sigmoid()) + if i < len(self.convs)-1: + x = self.bns[i](x) + x = F.relu(x) + x = F.dropout(x, p=self.dropout, training=self.training) + out = self.softmax(x) + # LPA implementation with dense format + labels = torch.nn.functional.one_hot(data.y.type(torch.long)).type(torch.float) + matrix = torch_geometric.utils.to_dense_adj( + data.edge_index, + edge_attr=self.edge_weight.sigmoid(), + max_num_nodes=data.num_nodes + ) + matrix = matrix.squeeze(0) + selfloop = torch.diag(torch.ones(matrix.shape[0])).to(self.device) + matrix += selfloop + for _ in range(self.k): + y = torch.matmul(matrix, labels) + labels = y + return out, torch.nn.functional.normalize(labels, dim=1) + +class GCN(torch.nn.Module): + def __init__(self, input_dim, hidden_dim, output_dim, num_layers, dropout): + super(GCN, self).__init__() + + convs = [GCNConv(input_dim, hidden_dim)] + [GCNConv(hidden_dim, hidden_dim) for _ in range(num_layers-2)] + [GCNConv(hidden_dim, output_dim)] + self.convs = torch.nn.ModuleList(convs) + self.bns = torch.nn.ModuleList([torch.nn.BatchNorm1d(hidden_dim) for _ in range(num_layers-1)]) + self.dropout = dropout + self.softmax = torch.nn.Softmax(dim=1) + + def reset_parameters(self): + for conv in self.convs: + conv.reset_parameters() + for bn in self.bns: + bn.reset_parameters() + + def forward(self, data, adj_t=None): + x, edge_index = data.x, data.edge_index + for i, layer in enumerate(self.convs): + x = layer(x, edge_index) + if i < len(self.convs)-1: + x = self.bns[i](x) + x = F.relu(x) + x = F.dropout(x, p=self.dropout, training=self.training) + out = self.softmax(x) + return out \ No newline at end of file diff --git a/transaction-network-explorer/TransactionNetwork.py b/transaction-network-explorer/TransactionNetwork.py index 20a5fabf..0bc4bfd9 100644 --- a/transaction-network-explorer/TransactionNetwork.py +++ b/transaction-network-explorer/TransactionNetwork.py @@ -200,7 +200,8 @@ def get_balances(self, index): df1['amount'] = -df1['amount'] df = pd.concat([df1, df2]).reset_index(drop=True) df = df.sort_values(by=['step']) - df['balance'] = df.groupby('name')['amount'].cumsum() + gb = df.groupby('name') + df['balance'] = gb['amount'].cumsum() ''' df1 = self.df[self.df['nameOrig'].isin(names)][['nameOrig', 'step', 'newbalanceOrig']] diff --git a/transaction-network-explorer/__pycache__/TransactionNetwork.cpython-310.pyc b/transaction-network-explorer/__pycache__/TransactionNetwork.cpython-310.pyc index 73fffdcfaab0db306110c4e8597e9ee7828803be..461c16567ec000ebf80ea63476cebdd1024ee4d4 100644 GIT binary patch delta 105 zcmX?-d?cASpO=@50SHq!uW6VPBm*L zpww55yNryon=fk_GBN6HX4Rd`$mGU2xlUSU@&Ua>CU?fkf2E}-+v#6nblNOzpv%ap JGTG6v82~F@A=dx^ delta 105 zcmX?-d?cASpO=@50SMj(`lY_w$m^`c$h|pGiJgh@(dI~%S&WSDCx1~r!uWUdPBm*L zpww55yNrx7n=fk_GBN6IX4Rd`$mGg6xlUSU@&Ua>CO5{(f2E}-+v#6nblfa#pv%ap JJlWB(82~LlA=Ll? diff --git a/transaction-network-explorer/tne-cpu.ipynb b/transaction-network-explorer/tne-cpu.ipynb index 189ac4fc..5c5f999c 100644 --- a/transaction-network-explorer/tne-cpu.ipynb +++ b/transaction-network-explorer/tne-cpu.ipynb @@ -206,12 +206,12 @@ { "data": { "application/vnd.jupyter.widget-view+json": { - "model_id": "41c6ba5b34814ee9bb620e77e1b8fba4", + "model_id": "8a3a157f3f69441ca45bf2d1675e0140", "version_major": 2, "version_minor": 0 }, "text/plain": [ - "BokehModel(combine_events=True, render_bundle={'docs_json': {'5e6a3ea1-acc1-41d7-9d10-1b09c5dadf6f': {'version…" + "BokehModel(combine_events=True, render_bundle={'docs_json': {'ab8aa9ae-33f6-463a-9e0d-dcdc6da8101c': {'version…" ] }, "execution_count": 2,