Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- for seed = 1:100
- rng(seed, 'twister'); % seed
- % T = temptation--------5
- T = 5;
- % R = reward------------3
- R = 3;
- % P = punishment--------1
- P = 1;
- % S = sucker------------0
- S = 0;
- max = zeros(100,1);
- % A = (initial, defect, cooperate, score)
- rand_result = randi([0, 1], 20, 3); % 0 == cooperate, 1 == defect
- agents = zeros(20,4);
- for agentNo = 1:20
- agents(agentNo,:) = [rand_result(agentNo,:), 0];
- end
- % game playing
- for generation = 1:100
- for agentNo = 1:20
- agent = agents(agentNo,:);
- for opponentNo = agentNo:20
- if opponentNo ~= agentNo
- opponent = agents(opponentNo,:);
- s_agent = agent(1);
- s_opponent = opponent(1);
- for game = 1:100
- if s_agent == 0 && s_opponent == 0
- agents(agentNo, 4) = agents(agentNo, 4) + R;
- agents(opponentNo, 4) = agents(opponentNo, 4) + R;
- s_agent = agent(3);
- s_opponent = opponent(3);
- elseif s_agent == 0 && s_opponent == 1
- agents(agentNo, 4) = agents(agentNo, 4) + S;
- agents(opponentNo, 4) = agents(opponentNo, 4) + T;
- s_agent = agent(2);
- s_opponent = opponent(3);
- elseif s_agent == 1 && s_opponent == 0
- agents(agentNo, 4) = agents(agentNo, 4) + T;
- agents(opponentNo, 4) = agents(opponentNo, 4) + S;
- s_agent = agent(3);
- s_opponent = opponent(2);
- elseif s_agent == 1 && s_opponent == 1
- agents(agentNo, 4) = agents(agentNo, 4) + P;
- agents(opponentNo, 4) = agents(opponentNo, 4) + P;
- s_agent = agent(2);
- s_opponent = opponent(2);
- end
- end
- end
- end
- end
- % sort agents by score
- agents = sortrows(agents,4,'descend');
- % record max of each generation
- max(generation) = agents(1,4)/(1900);
- % copy best 10 agents and clear scoreboard
- agents(1:10, 4) = 0;
- agents(11:20,:) = agents(1:10,:);
- % mutation
- for agentNo = 1:20
- for agentS = 1:3
- random_int = randi([1,100]);
- if random_int == 1
- agents(agentNo,agentS) = ~agents(agentNo, agentS);
- end
- end
- end
- end
- hold on;
- xlabel('generation')
- ylabel('average-payoff')
- xlim([0 100])
- ylim([0 5])
- title('Student ID: 20129070')
- plot(max)
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement