From c3b17060ad8d2a335c1c3862c4b725415f28166d Mon Sep 17 00:00:00 2001 From: beakerdtd Date: Wed, 18 Nov 2015 23:55:07 -0500 Subject: [PATCH 1/6] Mad comments explain what's going on. I retooled how the classes store information and communicate with one another --- Financial_Market.cpp | 224 ++++++++++++++++++++++++++++++++++++------- 1 file changed, 191 insertions(+), 33 deletions(-) diff --git a/Financial_Market.cpp b/Financial_Market.cpp index 5ea2dba..62311e1 100644 --- a/Financial_Market.cpp +++ b/Financial_Market.cpp @@ -1,65 +1,223 @@ -#include +#include //probably don't need all of these headers +#include +#include +#include +#include +#include +#include +#include -using namespace std; +using namespace std; //especially with this guy down here //In this program, we will model a financial market +struct account { + string type; + long int ID; //ID associated with holder + double value; //value associated with asset + int period; //track how long asset has been stored +}; + +struct claim { + string title; //name of asset...not really necessary to include but could come in handy + string type; + long int ID; //ID associated with holder + double value; //value associated with asset + int period; //for bonds, determines repayment period; for stocks, does not apply +} money, stock, bond; + class agent { //creates agent capable of possessing and trading assets + protected: //these probably don't need to be protected? + long int ID; double wealth; public: - agent(double x) : wealth(x){} //so far just has one public variable denoting total value of all assets - //double networth() { return wealth;} - double networth = wealth; //return wealth + //agent(long int id, int w) : ID(id), wealth(w){} //initialize ID and total value of all assets + agent(long int id) : ID(id){} //initialize ID and total value of all assets + long int getID = ID; //return ID + vector assets{"money", "securities", "bonds"}; //array of asset types + + //if trader + + claim portfolio[3]; //array same length assets containing info about each asset + virtual void createPortfolio(){} //create a portfolio of assets + + virtual double networth() {} //function that will return the total value of all assets held by the agent + virtual void deposit_cash(agent* B, double amount){} //function allowing an agent to deposit cash + virtual void withdraw_cash(agent* B, double amount){} //function allowing an agent to withdraw cash + + //if financial intermediary + vector accounts {}; //vector of accounts held by financial intermediary + virtual void createAccount(agent* A) {} //create an account for an agent at hand + }; -class financial_intermediary { //creates an agent capable of possessing and trading assets, will also serve as a storage node - double wealth; //with more abilities down the line +class trader: public agent { public: - financial_intermediary(double x) : wealth(x){} - double networth = wealth; + trader(int id) : agent(id) {} + //claim portfolio[3]; + void createPortfolio() { + for (int j = 0; j < assets.size(); j++){ //assign values to the portfolio + portfolio[j].type = "node"; + portfolio[j].ID = ID; + portfolio[j].title = assets[j]; + portfolio[j].value = rand() % 100; + } + } + double networth() { //return total value of all assets held by trader + double val = 0; + for (int i = 0; i < assets.size(); i++){ + if (getID == portfolio[i].ID){ + val = val + portfolio[i].value; + } + } + return val; + } + void deposit_cash(agent* B, double amount){ //function allowing an agent to deposit cash + double agent_cash_init = portfolio[0].value; //keep track of initial values + double fin_cash_init = B->accounts[getID].value; + + if (agent_cash_init < amount) { //if the agent cannot deposit desired amount + cout << "Insufficient funds" << '\n'; //restrict it from going into the negative + portfolio[0].value = agent_cash_init; + B->accounts[getID].value = fin_cash_init; + } + else { + portfolio[0].value = agent_cash_init - amount; //subtract amount deposited from agent wealth + B->accounts[getID].value = fin_cash_init + amount; //add deposited amount to agent's account + } + + } + + void withdraw_cash(agent* B, double amount){ //function allowing an agent to withdraw cash + double agent_wealth_init = portfolio[0].value; //keep track of initial values + double fin_wealth_init = B->accounts[getID].value; + + if (fin_wealth_init <= amount) { //if the agent wants to withdraw more than it has stored + cout << "Insufficient funds" << '\n'; //restrict it from going into the negative + portfolio[0].value = agent_wealth_init; + B->accounts[getID].value = fin_wealth_init; + } + else{ + portfolio[0].value = agent_wealth_init + amount; //add amount withdrawn to agent wealth + B->accounts[getID].value = fin_wealth_init - amount; //subtract withdrawn amount from agent's account + } + + } }; -void deposit(agent& A, financial_intermediary& B, double amount){ //function allowing an agent to deposit cash - double agent_wealth_init = A.networth; - double fin_wealth_init = B.networth; +class financial_intermediary: public agent { + public: + financial_intermediary(int id) : agent(id) {} + + void createAccount(agent* A) { //create new account + account b; + b.ID = A->getID; //assign ID + b.value = 0; //assign initial account sum + accounts.push_back(b); //add account to list of accounts + } + double networth() { //return total value of all assets held by agent + double val = 0; //in this case a financial intermediary + for (int i = 0; i < assets.size(); i++){ + if (getID == accounts[i].ID){ + val = val + accounts[i].value; + } + } + return val; + } +}; - A.networth = agent_wealth_init - amount; - B.networth = fin_wealth_init + amount; +void borrow_lend(agent* A, agent* B); //function to come +double dRand(double fMin, double fMax) //random double generator courtesy of stackoverflow +{ + double f = (double)rand() / RAND_MAX; + return fMin + f * (fMax - fMin); } -void withdraw(agent& A, financial_intermediary& B, double amount){ //function allowing an agent to deposit cash - double agent_wealth_init = A.networth; - double fin_wealth_init = B.networth; +int main(){ + cout.precision(3); //set precision on output values....might need to retool this - A.networth = agent_wealth_init + amount; - B.networth = fin_wealth_init - amount; + srand(time(NULL)); //generate new sequence of random variables for each loop -} + int M, N; //number of financial intermediaries, number of nodes, respectively + + cout << "Enter number of financial intermediaries: "; + cin >> M; + + vector fin_int_vec {}; //placeholder for all financial intermediaries generated below + + cout << "Enter number of agents: "; + cin >> N; + + vector trader_vec {}; //placeholder for all traders generated below + + for (int i = 0; i < M; i++){ + agent * bank = new financial_intermediary(i); //create new financial intermediary + fin_int_vec.push_back(bank); //add financial intermediary to storage vector + } -int main(){ //tests for me + for (int i = 0; i < N; i++){ + agent * node = new trader(i); //create new trader + node->createPortfolio(); //create trader portfolio + trader_vec.push_back(node); //add trader to storage vector + } - agent spender(3.0); - financial_intermediary bank(30000.0); + for (int i = 0; i < N; i++){ + fin_int_vec[0]->createAccount(trader_vec[i]); //create account for all nodes interacting with particular financial intermediary + } //leaving as separate loop so these values can change - cout << spender.networth << '\n'; - cout << spender.networth + 20 << '\n'; - cout << bank.networth << '\n'; + for (int i = 0; i < fin_int_vec[0]->accounts.size(); i++){ //loop through accounts - deposit(spender, bank, 1); + cout << "Account pre-deposit " << fin_int_vec[0]->accounts[i].ID << ' ' << fin_int_vec[0]->accounts[i].value << '\n'; //display account information before deposit + + cout << "Portfolio pre-deposit" << '\n'; - cout << spender.networth << '\n'; - cout << bank.networth << '\n'; + for (int j = 0; j < trader_vec[i]->assets.size(); j++){ //loop through portfolio of account at hand + cout << trader_vec[i]->portfolio[j].type << ' ' //print out portfolio attribues + << trader_vec[i]->portfolio[j].ID << ' ' + << trader_vec[i]->portfolio[j].title << ' ' + << trader_vec[i]->portfolio[j].value << '\n'; + } + + trader_vec[i]->deposit_cash(fin_int_vec[0], dRand(0, trader_vec[i]->portfolio[0].value)); //deposit cash into account - withdraw(spender, bank, 1); + cout << "Account post-deposit " << fin_int_vec[0]->accounts[i].ID << ' ' << fin_int_vec[0]->accounts[i].value << '\n'; //display account information after deposit - cout << spender.networth << '\n'; - cout << bank.networth << '\n'; + cout << "Portfolio post-deposit" << '\n'; + for (int j = 0; j < trader_vec[i]->assets.size(); j++){ //loop through portfolio of account at hand + cout << trader_vec[i]->portfolio[j].type << ' ' //print out portfolio attributes + << trader_vec[i]->portfolio[j].ID << ' ' + << trader_vec[i]->portfolio[j].title << ' ' + << trader_vec[i]->portfolio[j].value << '\n'; + } + trader_vec[i]->withdraw_cash(fin_int_vec[0], dRand(0, trader_vec[i]->portfolio[0].value)); //withdraw cash from account + cout << "Account post-withdrawl " << fin_int_vec[0]->accounts[i].ID << ' ' << fin_int_vec[0]->accounts[i].value << '\n'; //display account information after withdrawl + + cout << "Portfolio post-withdrawl" << '\n'; + for (int j = 0; j < trader_vec[i]->assets.size(); j++){ //loop through portfolio of account at hand + cout << trader_vec[i]->portfolio[j].type << ' ' //print out portfolio attributes + << trader_vec[i]->portfolio[j].ID << ' ' + << trader_vec[i]->portfolio[j].title << ' ' + << trader_vec[i]->portfolio[j].value << '\n'; + } + + cout << '\n'; + + } + + for (int i = 0; i < M; i++){ + delete fin_int_vec[i]; //delete all objects + } + + for (int i = 0; i < N; i++){ + delete trader_vec[i]; //delete all objects + } + return 0; -} \ No newline at end of file +} From b3ddaa2883af79632cfc5dd92cc29ff9e5d1f182 Mon Sep 17 00:00:00 2001 From: Timothy D Mahon Date: Thu, 19 Nov 2015 01:51:24 -0500 Subject: [PATCH 2/6] Add new docs folder --- docs/Economics_Template.pdf | Bin 0 -> 52691 bytes docs/README.md | 3 +++ 2 files changed, 3 insertions(+) create mode 100644 docs/Economics_Template.pdf create mode 100644 docs/README.md diff --git a/docs/Economics_Template.pdf b/docs/Economics_Template.pdf new file mode 100644 index 0000000000000000000000000000000000000000..ad84bd56159bd4aac62bc4757f3c8af3822a5133 GIT binary patch literal 52691 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 pD99=(Oee&R_di$B!sF(Kba2$Ocl_7b1< Date: Thu, 19 Nov 2015 01:51:59 -0500 Subject: [PATCH 3/6] Update readme. Remove old files --- Agent.java | 99 ---------------- Economics_Template.pdf | Bin 52691 -> 0 bytes Economics_Template.tex | 114 ------------------ Grand_Canonical_Adj_Mat.R | 242 -------------------------------------- README.md | 10 +- 5 files changed, 9 insertions(+), 456 deletions(-) delete mode 100644 Agent.java delete mode 100644 Economics_Template.pdf delete mode 100644 Economics_Template.tex delete mode 100644 Grand_Canonical_Adj_Mat.R diff --git a/Agent.java b/Agent.java deleted file mode 100644 index 7215437..0000000 --- a/Agent.java +++ /dev/null @@ -1,99 +0,0 @@ -class Agent { //don't worry about this, java's really cool - //and uses classes for everything, - //very close to von neumann set theory - - String philosophy; //initial variables - char party; - - - public Agent(String phi, char orientation){ - - philosophy = phi; //assign philosophy vector, here a string to make it easy on me - party = orientation; //assign whether or not agent is of a positive or antipositive mind - - } - - public static double K(String phi1, String phi2) { - int count = 0; - if (phi1.length() == phi2.length()){ //if vectors same length, check for similarity - for(int i = 0; iQ9o#5{74#C~s`5}4VBX!TMI`{jj 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 pD99=(Oee&R_di$B!sF(Kba2$Ocl_7b1< A[q,p] - A[p,p] = 0 - } - } - b <- sum(n[1:i])+1 - c <- sum(n[1:(i+1)]) - count <- length(b:c) - G[b:c, b:c] <- A[1:count, 1:count] - col<- rep(names(colors)[i], times=count) - #print(col) - Col[b:c] <- col[1:count] - #print(Col) -} - -#ensure inhibition of higher access -G[1:V, (V+W1+1):sum(n)] <- 0 - -#prohibit resource binding -G[(V+1):sum(n), (V+1):sum(n)] <- 0 - -#limit binding -for(i in 1:V){ - G[i, (V+1):(V+W1)] = sample(0:1, 1) - while(sum(G[i, (V+1):(V+W1)]) > 1){ - G[i, sample((V+1):(V+W1), 1)] <- 0 - } -} - -#prioritize binding -for (i in 1:V){ - for (j in (V+1):(V+W1)){ - if (G[i,j]== 1){ - G[i, (V+W1+1):sum(n)]=sample(0:1, 1) - } - while(sum(G[i, (V+W1+1):(sum(n))]) > 1){ - G[i, sample((V+W1+1):sum(n), 1)] <- 0 - } - } -} -#print(G) - -#allow for binding of agents if specific conditions are met -vec <- numeric() - -for(i in 1:V){ - for (j in (V+W1+1):(sum(n))){ - if(G[i, j]==1){ - vec <- c(vec, i) - } - } -} -print(vec) -lvec <- length(vec) -uvec <- unique(vec) -for(i in 1:lvec){ - sveci <- sample(i, 1) - for (j in 1:lvec){ - svecj <- sample(j, 1) - G[uvec[sveci], uvec[svecj]] <- 1 - } -} -#print(uvec) -#print(sample(vec, 1)) -#G[uvec[svec], 1), uvec[svec],1] <- 1 -diag(G)=0 - -if (length(uvec) == 1){ - G[1:V, 1:V] = 0 -} - -#print(G[1:V, 1:V]) - - -#make GCA undirected -for (i in 1:sum(n)){ - for (j in 1:sum(n)){ - G[j, i] <- G[i,j] - } -} - -print(G[1:V, 1:V]) -#print(G) - -#create network -net <- network(G, directed=FALSE) -#net %v% "weights" <- w - -#plot network -gplot(net, vertex.col=Col) -#gplot3d(net, vertex.col=Col) - -#agent adjacency matrix -agents <- G[1:V, 1:V] -#print(agents) - -#create society -soc <- network(agents, directed = FALSE) -#wagents <- w[(sum(n)*(1:V))+(1:V)] -#soc %v% "weights" <- wagents - -#plot society -gplot(soc, vertex.col=Col[1:V]) - -#eliminate dead nodes -zeros <- rep(0, times=V) - -for(i in V:1){ - #print(agents) - test <- agents[i,]==zeros - #print(test) - if(all(test)==1){ - agents <- agents[-i, -i] - } -} - -V2 <- sqrt(length(agents)) - -n2 <- c(0, V2, W1, W2) -#print(G) -#print(V2) -#print(agents) -'for(i in 1:V-1){ - if (sum(G[i, (i+1):V])>0){ - G[i, (V+1):sum(n)] <- G[i, (V+1):sum(n)] - } -}' - -G[1:V2, 1:V2] <- agents[1:V2, 1:V2] -print(uvec) -print(G) -'for(i in 1:V2){ - #if (G[i,(i+1): ] - print(G[i,]) - G[i, (V2+1):sum(n2)] <- G[uvec[i], (V2+1):sum(n2)] -}' -#print(G) -for(i in 1:sum(n2)){ - for(j in 1:sum(n2)){ - G[j, i] <- G[i,j] - } -} -#print(G) -#print(G) -#print(G[1:V2, 1:V2]) -#print(G[1:V, 1:V]) -#print(agents2) -#G[1:V2, 1:V2] <- agents -#print(agents) -#node vector - -for (i in V:(V2+1)){ - #print(G[1:i, 1:i]) - G <- G[-i, -i] -} -print(G[1:V2, 1:V2]) -#print(G) -#node colors -colors2 <- 1:(length(n2)-1) -Col2 <- rep(0, times=sum(n2)) -names(colors2) <- c("red", "cyan", "green") - -for (i in 1:(length(n2)-1)){ - a2 <- rep(0, times=n2[i+1]^2) - #a <- replicate(n[i+1]^2, sample(0:1, 1), simplify="array") - A2 <- matrix(a2, nrow=n2[i+1], ncol=n2[i+1]) - for(p in 1:n2[i+1]){ - for (q in 1:n2[i+1]){ - A2[p,q] -> A2[q,p] - A2[p,p] = 0 - } - } - b2 <- sum(n2[1:i])+1 - c2 <- sum(n2[1:(i+1)]) - count2 <- length(b2:c2) - #print(count2) - #G[b2:c2, b2:c2] <- A2[1:count2, 1:count2] - col2<- rep(names(colors2)[i], times=count2) - #print(col2) - Col2[b2:c2] <- col2[1:count2] - #print(Col2) -} -#print(Col2) - -#print(G[1:V, 1:V]) -for (i in V:(V2+1)){ - #print(G[1:i, 1:i]) - G <- G[-i, -i] -} -#print(G[1:V2, 1:V2]) -#create society -socdos <- network(agents, directed = FALSE) -#wagents <- w[(sum(n)*(1:V))+(1:V)] -#socdos %v% "weights" <- wagents - -#plot society -gplot(socdos, vertex.col=Col[1:V2]) -#gplot3d(socdos, vertex.col=Col[1:V]) -#print(agents) - -net2 <- network(G, directed = FALSE) -#net2 %v% "weights" <- w - -gplot(net2, vertex.col=Col2) \ No newline at end of file diff --git a/README.md b/README.md index 211a682..85ee5c6 100644 --- a/README.md +++ b/README.md @@ -1 +1,9 @@ -# Networks-Project +# Network Projects + +A project between a couple of dudes to simulate various networks + + +## Financial Mahkets + +An endevour to simulate financial markets. + From ddeac66e7219f092f4c39221ac8570b552760fc2 Mon Sep 17 00:00:00 2001 From: Timothy D Mahon Date: Thu, 19 Nov 2015 02:48:32 -0500 Subject: [PATCH 4/6] begin of refactor --- Financial_Market.cpp | 116 +++------------------------------------ agent.h | 32 +++++++++++ financial_intermediary.h | 27 +++++++++ trader.h | 63 +++++++++++++++++++++ utils.h | 20 +++++++ 5 files changed, 150 insertions(+), 108 deletions(-) create mode 100644 agent.h create mode 100644 financial_intermediary.h create mode 100644 trader.h create mode 100644 utils.h diff --git a/Financial_Market.cpp b/Financial_Market.cpp index 62311e1..7f45a1b 100644 --- a/Financial_Market.cpp +++ b/Financial_Market.cpp @@ -4,13 +4,20 @@ #include #include #include -#include #include +#include "utlis.h" + +Class agent; + +#include "trader.h" +#include "financial_intermediary.h" using namespace std; //especially with this guy down here //In this program, we will model a financial market + +//PODs (Possibly fold into class for additional functionality?) struct account { string type; long int ID; //ID associated with holder @@ -26,115 +33,8 @@ struct claim { int period; //for bonds, determines repayment period; for stocks, does not apply } money, stock, bond; -class agent { //creates agent capable of possessing and trading assets - protected: //these probably don't need to be protected? - long int ID; - double wealth; - public: - //agent(long int id, int w) : ID(id), wealth(w){} //initialize ID and total value of all assets - agent(long int id) : ID(id){} //initialize ID and total value of all assets - long int getID = ID; //return ID - vector assets{"money", "securities", "bonds"}; //array of asset types - - //if trader - - claim portfolio[3]; //array same length assets containing info about each asset - virtual void createPortfolio(){} //create a portfolio of assets - - virtual double networth() {} //function that will return the total value of all assets held by the agent - virtual void deposit_cash(agent* B, double amount){} //function allowing an agent to deposit cash - virtual void withdraw_cash(agent* B, double amount){} //function allowing an agent to withdraw cash - - //if financial intermediary - vector accounts {}; //vector of accounts held by financial intermediary - virtual void createAccount(agent* A) {} //create an account for an agent at hand - - -}; - -class trader: public agent { - public: - trader(int id) : agent(id) {} - //claim portfolio[3]; - void createPortfolio() { - for (int j = 0; j < assets.size(); j++){ //assign values to the portfolio - portfolio[j].type = "node"; - portfolio[j].ID = ID; - portfolio[j].title = assets[j]; - portfolio[j].value = rand() % 100; - } - } - double networth() { //return total value of all assets held by trader - double val = 0; - for (int i = 0; i < assets.size(); i++){ - if (getID == portfolio[i].ID){ - val = val + portfolio[i].value; - } - } - return val; - } - void deposit_cash(agent* B, double amount){ //function allowing an agent to deposit cash - double agent_cash_init = portfolio[0].value; //keep track of initial values - double fin_cash_init = B->accounts[getID].value; - - if (agent_cash_init < amount) { //if the agent cannot deposit desired amount - cout << "Insufficient funds" << '\n'; //restrict it from going into the negative - portfolio[0].value = agent_cash_init; - B->accounts[getID].value = fin_cash_init; - } - else { - portfolio[0].value = agent_cash_init - amount; //subtract amount deposited from agent wealth - B->accounts[getID].value = fin_cash_init + amount; //add deposited amount to agent's account - } - - } - - void withdraw_cash(agent* B, double amount){ //function allowing an agent to withdraw cash - double agent_wealth_init = portfolio[0].value; //keep track of initial values - double fin_wealth_init = B->accounts[getID].value; - - if (fin_wealth_init <= amount) { //if the agent wants to withdraw more than it has stored - cout << "Insufficient funds" << '\n'; //restrict it from going into the negative - portfolio[0].value = agent_wealth_init; - B->accounts[getID].value = fin_wealth_init; - } - else{ - portfolio[0].value = agent_wealth_init + amount; //add amount withdrawn to agent wealth - B->accounts[getID].value = fin_wealth_init - amount; //subtract withdrawn amount from agent's account - } - - } - -}; -class financial_intermediary: public agent { - public: - financial_intermediary(int id) : agent(id) {} - void createAccount(agent* A) { //create new account - account b; - b.ID = A->getID; //assign ID - b.value = 0; //assign initial account sum - accounts.push_back(b); //add account to list of accounts - } - double networth() { //return total value of all assets held by agent - double val = 0; //in this case a financial intermediary - for (int i = 0; i < assets.size(); i++){ - if (getID == accounts[i].ID){ - val = val + accounts[i].value; - } - } - return val; - } -}; - -void borrow_lend(agent* A, agent* B); //function to come - -double dRand(double fMin, double fMax) //random double generator courtesy of stackoverflow -{ - double f = (double)rand() / RAND_MAX; - return fMin + f * (fMax - fMin); -} int main(){ cout.precision(3); //set precision on output values....might need to retool this diff --git a/agent.h b/agent.h new file mode 100644 index 0000000..c226880 --- /dev/null +++ b/agent.h @@ -0,0 +1,32 @@ +#include +#include +//////////// +//agent.h // +//////////// +/** + * creates agent capable of possessing and trading assets + */ + +class agent { + private: + long int ID; + double wealth; + public: + agent(long int id, double w) : ID(id), wealth(w){} + agent(long int id) : ID(id){} + long int getID() {return ID;} + vector assets{"money", "securities", "bonds"}; //array of asset types + + claim portfolio[3]; //array same length assets containing info about each asset + virtual void createPortfolio(){} //create a portfolio of assets + + virtual double networth() {} //function that will return the total value of all assets held by the agent + virtual void deposit_cash(agent* B, double amount){} //function allowing an agent to deposit cash + virtual void withdraw_cash(agent* B, double amount){} //function allowing an agent to withdraw cash + + //if financial intermediary + vector accounts {}; //vector of accounts held by financial intermediary + virtual void createAccount(agent* A) {} //create an account for an agent at hand + + +}; \ No newline at end of file diff --git a/financial_intermediary.h b/financial_intermediary.h new file mode 100644 index 0000000..2d5e73b --- /dev/null +++ b/financial_intermediary.h @@ -0,0 +1,27 @@ +#include "agent.h" +/////////////////////////// +//financial_intermediary // +/////////////////////////// +/** + * creates an agent capable of possessing and trading assets, will also serve as a storage node + */ +class financial_intermediary: public agent { + public: + financial_intermediary(int id) : agent(id) {} + + void createAccount(agent* A) { //create new account + account b; + b.ID = A->getID; //assign ID + b.value = 0; //assign initial account sum + accounts.push_back(b); //add account to list of accounts + } + double networth() { //return total value of all assets held by agent + double val = 0; //in this case a financial intermediary + for (int i = 0; i < assets.size(); i++){ + if (getID == accounts[i].ID){ + val = val + accounts[i].value; + } + } + return val; + } +}; \ No newline at end of file diff --git a/trader.h b/trader.h new file mode 100644 index 0000000..1c5a212 --- /dev/null +++ b/trader.h @@ -0,0 +1,63 @@ +#include "agent.h" +////////////// +// trader.h // +////////////// +/** + * + */ + +class trader: public agent { + public: + trader(int id) : agent(id) {} + void createPortfolio() { + for (int j = 0; j < assets.size(); j++){ //assign values to the portfolio + portfolio[j].type = "node"; + portfolio[j].ID = ID; + portfolio[j].title = assets[j]; + portfolio[j].value = rand() % 100; + } + } + double networth() { //return total value of all assets held by trader + double val = 0; + for (int i = 0; i < assets.size(); i++){ + if (getID == portfolio[i].ID){ + val = val + portfolio[i].value; + } + } + return val; + } + //function allowing an agent to deposit cash + void deposit_cash(agent* B, double amount){ + double agent_cash_init = portfolio[0].value; //keep track of initial values + double fin_cash_init = B->accounts[getID].value; + + if (agent_cash_init < amount) { //if the agent cannot deposit desired amount + cout << "Insufficient funds" << '\n'; //restrict it from going into the negative + portfolio[0].value = agent_cash_init; + B->accounts[getID].value = fin_cash_init; + } + else { + portfolio[0].value = agent_cash_init - amount; //subtract amount deposited from agent wealth + B->accounts[getID].value = fin_cash_init + amount; //add deposited amount to agent's account + } + + } + + //function allowing an agent to withdraw cash + void withdraw_cash(agent* B, double amount){ + double agent_wealth_init = portfolio[0].value; //keep track of initial values + double fin_wealth_init = B->accounts[getID].value; + + if (fin_wealth_init <= amount) { //if the agent wants to withdraw more than it has stored + cout << "Insufficient funds" << '\n'; //restrict it from going into the negative + portfolio[0].value = agent_wealth_init; + B->accounts[getID].value = fin_wealth_init; + } + else{ + portfolio[0].value = agent_wealth_init + amount; //add amount withdrawn to agent wealth + B->accounts[getID].value = fin_wealth_init - amount; //subtract withdrawn amount from agent's account + } + + } + +}; \ No newline at end of file diff --git a/utils.h b/utils.h new file mode 100644 index 0000000..16b4e22 --- /dev/null +++ b/utils.h @@ -0,0 +1,20 @@ +#include +Class agent; + +///////////// +// utils.h // +///////////// +/** + * Class with utility functions (will probably extend other classes as the network grows) + */ +class utils { + public: + void borrow_lend(agent* A, agent* B); //function to come + + double dRand(double fMin, double fMax) //better random number generator + { + std::default_random_engine generator; + std::uniform_real_distributon distribution(fMin, fMax); + return distribution(generator); + } +} \ No newline at end of file From b7bad4a26993cddcb7632f1d0e4608ceadc8644f Mon Sep 17 00:00:00 2001 From: Timothy D Mahon Date: Thu, 19 Nov 2015 20:22:23 -0500 Subject: [PATCH 5/6] Fold utils back into main, continue refactoring --- Financial_Market.cpp | 43 ++++++++++++++++++-------------- agent.h | 54 ++++++++++++++++++++++++++++++---------- financial_intermediary.h | 29 +++++++++++++-------- trader.h | 19 ++++++++------ utils.h | 20 --------------- 5 files changed, 96 insertions(+), 69 deletions(-) delete mode 100644 utils.h diff --git a/Financial_Market.cpp b/Financial_Market.cpp index 7f45a1b..603a84c 100644 --- a/Financial_Market.cpp +++ b/Financial_Market.cpp @@ -1,39 +1,44 @@ -#include //probably don't need all of these headers +#include #include #include #include #include #include #include +#include #include "utlis.h" -Class agent; +class agent; #include "trader.h" #include "financial_intermediary.h" -using namespace std; //especially with this guy down here +using namespace std; //In this program, we will model a financial market //PODs (Possibly fold into class for additional functionality?) -struct account { - string type; - long int ID; //ID associated with holder - double value; //value associated with asset - int period; //track how long asset has been stored -}; - -struct claim { - string title; //name of asset...not really necessary to include but could come in handy - string type; - long int ID; //ID associated with holder - double value; //value associated with asset - int period; //for bonds, determines repayment period; for stocks, does not apply -} money, stock, bond; - +/** + * Exchange wealth between two agents (know as the lender and lendee) + * @param lender - the agent giving the wealth + * @param lendee - the agent recieving the wealth + */ +void borrow_lend(agent* lender, agent* lendee); + +/** + * Better Random number generator + * @param fMin Minimum nmuber on the range of possible randomly generated numbers. + * @param fMax Maximum number on the range of possible randomly generated numbers. + * @return A random number on the range of (fMin, fMax). + */ +double dRand(double fMin, double fMax) +{ + std::default_random_engine generator; + std::uniform_real_distributon distribution(fMin, fMax); + return distribution(generator); +} int main(){ @@ -81,7 +86,7 @@ int main(){ << trader_vec[i]->portfolio[j].value << '\n'; } - trader_vec[i]->deposit_cash(fin_int_vec[0], dRand(0, trader_vec[i]->portfolio[0].value)); //deposit cash into account + trader_vec[i]->deposit_cash(fin_int_vec[0], utils::dRand(0, trader_vec[i]->portfolio[0].value)); //deposit cash into account cout << "Account post-deposit " << fin_int_vec[0]->accounts[i].ID << ' ' << fin_int_vec[0]->accounts[i].value << '\n'; //display account information after deposit diff --git a/agent.h b/agent.h index c226880..d3d7581 100644 --- a/agent.h +++ b/agent.h @@ -1,5 +1,6 @@ #include #include +#include "utils.h"; //////////// //agent.h // //////////// @@ -7,26 +8,53 @@ * creates agent capable of possessing and trading assets */ -class agent { - private: +struct account { + string type; + long int ID; //ID associated with holder + double value; //value associated with asset + int period; //track how long asset has been stored +}; + +struct claim { + //name of asset...not really necessary to include but could come in handy + string title; + //claim type + string type; + //ID associated with holder + long int ID; + //value associated with asset + double value; + //for bonds, determines repayment period; for stocks, does not apply + int period; +} money, stock, bond; + +class agent { + private: long int ID; - double wealth; + double wealth; public: agent(long int id, double w) : ID(id), wealth(w){} agent(long int id) : ID(id){} long int getID() {return ID;} - vector assets{"money", "securities", "bonds"}; //array of asset types - - claim portfolio[3]; //array same length assets containing info about each asset - virtual void createPortfolio(){} //create a portfolio of assets - virtual double networth() {} //function that will return the total value of all assets held by the agent - virtual void deposit_cash(agent* B, double amount){} //function allowing an agent to deposit cash - virtual void withdraw_cash(agent* B, double amount){} //function allowing an agent to withdraw cash + //array of asset types + vector assets{"money", "securities", "bonds"}; + + //array same length assets containing info about each asset + claim portfolio[3]; + + //create a portfolio of assets + virtual void createPortfolio(){} + + //function that will return the total value of all assets held by the agent + virtual double calculateNetworth() {return wealth;} - //if financial intermediary - vector accounts {}; //vector of accounts held by financial intermediary - virtual void createAccount(agent* A) {} //create an account for an agent at hand + //function allowing an agent to deposit cash + virtual void depositCash(agent* B, double amount){} + //function allowing an agent to withdraw cash + virtual void withdrawCash(agent* B, double amount){} + //create an account for an agent at hand + virtual void createAccount(agent* A) {} }; \ No newline at end of file diff --git a/financial_intermediary.h b/financial_intermediary.h index 2d5e73b..0fd22c7 100644 --- a/financial_intermediary.h +++ b/financial_intermediary.h @@ -8,20 +8,29 @@ class financial_intermediary: public agent { public: financial_intermediary(int id) : agent(id) {} - - void createAccount(agent* A) { //create new account - account b; - b.ID = A->getID; //assign ID - b.value = 0; //assign initial account sum - accounts.push_back(b); //add account to list of accounts + vector accounts {}; + /** + * Create new account to add to total accounts of financial intermediary + * @param newAccount the acconut to be created. + */ + void createAccount(agent* newAccount) { + account temp; + temp.ID = A->getID(); + temp.value = 0; + accounts.push_back(temp); } - double networth() { //return total value of all assets held by agent - double val = 0; //in this case a financial intermediary + /** + * calculate the networth of the finacial_intermediary + * @return [description] + */ + double calculateNetworth() { + wealth = 0; + //in this case a financial intermediary for (int i = 0; i < assets.size(); i++){ if (getID == accounts[i].ID){ - val = val + accounts[i].value; + wealth += accounts[i].value; } } - return val; + return wealth; } }; \ No newline at end of file diff --git a/trader.h b/trader.h index 1c5a212..8ff39c0 100644 --- a/trader.h +++ b/trader.h @@ -14,20 +14,25 @@ class trader: public agent { portfolio[j].type = "node"; portfolio[j].ID = ID; portfolio[j].title = assets[j]; - portfolio[j].value = rand() % 100; + portfolio[j].value = utils::dRand(0.0,1.0) % 100; + wealth += } } - double networth() { //return total value of all assets held by trader - double val = 0; + /** + * return total value of all assets held by trader + * @return total networth. + */ + double calculateNetworth() { //return total value of all assets held by trader + wealth = 0; for (int i = 0; i < assets.size(); i++){ if (getID == portfolio[i].ID){ - val = val + portfolio[i].value; + wealth += portfolio[i].value; } } - return val; + return wealth; } //function allowing an agent to deposit cash - void deposit_cash(agent* B, double amount){ + void depositCash(agent* B, double amount){ double agent_cash_init = portfolio[0].value; //keep track of initial values double fin_cash_init = B->accounts[getID].value; @@ -44,7 +49,7 @@ class trader: public agent { } //function allowing an agent to withdraw cash - void withdraw_cash(agent* B, double amount){ + void withdrawCash(agent* B, double amount){ double agent_wealth_init = portfolio[0].value; //keep track of initial values double fin_wealth_init = B->accounts[getID].value; diff --git a/utils.h b/utils.h deleted file mode 100644 index 16b4e22..0000000 --- a/utils.h +++ /dev/null @@ -1,20 +0,0 @@ -#include -Class agent; - -///////////// -// utils.h // -///////////// -/** - * Class with utility functions (will probably extend other classes as the network grows) - */ -class utils { - public: - void borrow_lend(agent* A, agent* B); //function to come - - double dRand(double fMin, double fMax) //better random number generator - { - std::default_random_engine generator; - std::uniform_real_distributon distribution(fMin, fMax); - return distribution(generator); - } -} \ No newline at end of file From 76d3d5e48b3b5484b47f294699b14fbe536eabd2 Mon Sep 17 00:00:00 2001 From: Timothy D Mahon Date: Thu, 19 Nov 2015 20:26:32 -0500 Subject: [PATCH 6/6] remove utils.h from include whoops --- Financial_Market.cpp | 1 - 1 file changed, 1 deletion(-) diff --git a/Financial_Market.cpp b/Financial_Market.cpp index 603a84c..5b8e1f6 100644 --- a/Financial_Market.cpp +++ b/Financial_Market.cpp @@ -6,7 +6,6 @@ #include #include #include -#include "utlis.h" class agent;