Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- %Chloe San 20118169
- %q1(ii)
- for seed = 1:100
- fprintf("Seed: %i\n", seed)
- rng( seed, 'twister')
- random_results = randi([0,1],20 ,3 );
- %q1ii
- %table for 20 agents
- Agents = zeros(20,5);
- for n = 1:20
- Agents(n,:) = [random_results(n,:),0,0];
- end
- %create empty area to store top 100 best scores
- Scores= zeros(100,1);
- %change 4th column to 2 as reference in Agents
- Agents(:,4)=2;
- %payoff - Temptation,Reward,Punishment,Sucker
- T=5;
- R=3;
- P=1;
- S=0;
- %0 represents defect, 1 represents cooperate
- %100 generations
- for generation=1:100
- %iterate through 20 agents
- for AgentNo = 1:20
- %agent = Agents(AgentNo,:)
- %play against 19 agents
- for OpponentNo = 1:20
- if AgentNo == OpponentNo
- continue;
- end
- %agents play against each other for 100 rounds
- for round=1:100
- %agents turn
- if Agents(AgentNo,4) == 2
- AgentMove = Agents(AgentNo,1);
- elseif Agents(AgentNo,4) == 1
- AgentMove = Agents(AgentNo,3);
- else
- AgentMove = Agents(AgentNo,2);
- end
- %opponents turn
- if Agents(OpponentNo,4) == 2
- OpponentMove = Agents (OpponentNo,1);
- elseif Agents (OpponentNo,4) == 1
- OpponentMove = Agents (OpponentNo,3);
- else
- OpponentMove = Agents(OpponentNo,2);
- end
- %introducing noise for agent
- noise = randi([1,100]);
- if(noise == 1 )
- if(AgentMove == 1)
- AgentMove = 0;
- else
- AgentMove = 1;
- end
- end
- noise_opponent = randi([1,100]);
- if(noise_opponent == 1)
- if(OpponentMove == 1)
- OpponentMove = 0;
- else
- OpponentMove = 1;
- end
- end
- %record sum of game payoffs of agent and opponent
- %in column 5 of Agents
- if (AgentMove == 1 && OpponentMove == 1)
- Agents(AgentNo,5)=Agents(AgentNo,5)+ R;
- Agents(OpponentNo,5) =Agents(OpponentNo,5)+ R;
- elseif ( AgentMove == 1 && OpponentMove == 0)
- Agents(AgentNo,5)=Agents(AgentNo,5)+ S;
- Agents(OpponentNo,5) = Agents(OpponentNo,5)+ T;
- elseif ( AgentMove == 0 && OpponentMove == 1)
- Agents(AgentNo,5)=Agents(AgentNo,5)+ T;
- Agents(OpponentNo,5) = Agents(OpponentNo,5)+ S;
- elseif(AgentMove == 0 && OpponentMove == 0)
- Agents(AgentNo,5)=Agents(AgentNo,5)+ P;
- Agents(OpponentNo,5) = Agents(OpponentNo,5)+ P;
- end
- %copy opponent's choice after each round which will be
- %recorded in column 4
- Agents(AgentNo,4) = OpponentMove;
- Agents(OpponentNo,4) = AgentMove;
- end
- Agents(:,4) = 2;
- end
- end
- Agents = sortrows(Agents,5,'descend');
- %get average of max score each generation
- Scores(generation) = Agents(1,5)/ (3800);
- %copy top 10 scores to the bottom 10 scores
- for AgentNo = 1:10
- Agents(AgentNo + 10,:) = Agents(AgentNo,:);
- end
- %clear the scores
- for AgentNo = 1:20
- Agents(AgentNo, 5) = 0;
- end
- %mutate agents
- for AgentNo = 1:20
- for Agent_S = 1:3
- mutate = randi ([1,100]);
- if(mutate == 1 )
- if(Agents(AgentNo,Agent_S) == 1)
- Agents(AgentNo, Agent_S)=0;
- else
- Agents(AgentNo, Agent_S)=1;
- end
- end
- end
- end
- end
- hold on;
- xlabel('generation')
- ylabel('average-payoff')
- xlim([0 100])
- ylim([0 5])
- title('Student ID: 20118169')
- plot(Scores);
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement