Advertisement
Guest User

Untitled

a guest
Apr 22nd, 2019
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
MatLab 4.72 KB | None | 0 0
  1. %Chloe San 20118169
  2. %q1(ii)
  3. for seed = 1:100
  4.     fprintf("Seed: %i\n", seed)
  5.     rng( seed, 'twister')
  6.  
  7.     random_results = randi([0,1],20 ,3 );
  8.     %q1ii
  9.     %table for 20 agents
  10.     Agents = zeros(20,5);
  11.  
  12.      for n = 1:20
  13.          Agents(n,:) = [random_results(n,:),0,0];
  14.      end
  15.  
  16.     %create empty area to store top 100 best scores
  17.     Scores= zeros(100,1);
  18.  
  19.     %change 4th column to 2 as reference in Agents
  20.     Agents(:,4)=2;
  21.  
  22.     %payoff - Temptation,Reward,Punishment,Sucker
  23.     T=5;
  24.     R=3;
  25.     P=1;
  26.     S=0;
  27.  
  28.     %0 represents defect, 1 represents cooperate
  29.  
  30.     %100 generations
  31.     for generation=1:100
  32.         %iterate through 20 agents
  33.         for AgentNo = 1:20
  34.             %agent = Agents(AgentNo,:)
  35.             %play against 19 agents
  36.             for OpponentNo = 1:20
  37.                 if AgentNo == OpponentNo
  38.                     continue;
  39.                 end
  40.  
  41.                 %agents play against each other for 100 rounds
  42.                 for round=1:100
  43.                     %agents turn
  44.                     if Agents(AgentNo,4) == 2
  45.                         AgentMove = Agents(AgentNo,1);
  46.                     elseif Agents(AgentNo,4) == 1
  47.                         AgentMove = Agents(AgentNo,3);
  48.                     else
  49.                         AgentMove = Agents(AgentNo,2);
  50.                     end
  51.                     %opponents turn
  52.                     if Agents(OpponentNo,4) == 2
  53.                         OpponentMove = Agents (OpponentNo,1);
  54.                     elseif Agents (OpponentNo,4) == 1
  55.                         OpponentMove = Agents (OpponentNo,3);
  56.                     else
  57.                         OpponentMove = Agents(OpponentNo,2);
  58.                     end  
  59.                    
  60.                     %introducing noise for agent
  61.                     noise = randi([1,100]);
  62.                     if(noise == 1 )
  63.                         if(AgentMove == 1)
  64.                             AgentMove = 0;
  65.                         else
  66.                             AgentMove = 1;
  67.                         end
  68.                     end
  69.                    
  70.                     noise_opponent = randi([1,100]);
  71.                     if(noise_opponent == 1)
  72.                         if(OpponentMove == 1)
  73.                             OpponentMove = 0;
  74.                         else
  75.                             OpponentMove = 1;
  76.                         end
  77.                     end
  78.                        
  79.                     %record sum of game payoffs of agent and opponent
  80.                     %in column 5 of Agents
  81.                    
  82.                     if (AgentMove == 1 && OpponentMove == 1)
  83.                         Agents(AgentNo,5)=Agents(AgentNo,5)+ R;
  84.                         Agents(OpponentNo,5) =Agents(OpponentNo,5)+ R;
  85.  
  86.                     elseif ( AgentMove == 1 && OpponentMove == 0)
  87.                         Agents(AgentNo,5)=Agents(AgentNo,5)+ S;
  88.                         Agents(OpponentNo,5) = Agents(OpponentNo,5)+ T;
  89.  
  90.                     elseif ( AgentMove == 0 && OpponentMove == 1)
  91.                         Agents(AgentNo,5)=Agents(AgentNo,5)+ T;
  92.                         Agents(OpponentNo,5) = Agents(OpponentNo,5)+ S;
  93.  
  94.                     elseif(AgentMove == 0 && OpponentMove == 0)
  95.                         Agents(AgentNo,5)=Agents(AgentNo,5)+  P;
  96.                         Agents(OpponentNo,5) = Agents(OpponentNo,5)+ P;
  97.                     end
  98.        
  99.                     %copy opponent's choice after each round which will be
  100.                     %recorded in column 4
  101.                     Agents(AgentNo,4) = OpponentMove;
  102.                     Agents(OpponentNo,4) = AgentMove;
  103.  
  104.                 end
  105.                 Agents(:,4) = 2;
  106.             end
  107.         end    
  108.         Agents = sortrows(Agents,5,'descend');
  109.         %get average of max score each generation
  110.         Scores(generation) = Agents(1,5)/ (3800);
  111.  
  112.         %copy top 10 scores to the bottom 10 scores
  113.         for AgentNo = 1:10
  114.             Agents(AgentNo + 10,:) = Agents(AgentNo,:);
  115.         end
  116.  
  117.         %clear the scores
  118.         for AgentNo = 1:20
  119.             Agents(AgentNo, 5) = 0;
  120.         end
  121.  
  122.         %mutate agents
  123.          for AgentNo = 1:20
  124.              for Agent_S = 1:3
  125.                  mutate = randi ([1,100]);
  126.                  if(mutate == 1 )
  127.                      if(Agents(AgentNo,Agent_S) == 1)
  128.                          Agents(AgentNo, Agent_S)=0;
  129.                      else
  130.                          Agents(AgentNo, Agent_S)=1;
  131.                      end
  132.                  end
  133.              end
  134.          end  
  135.     end
  136.     hold on;
  137.     xlabel('generation')
  138.     ylabel('average-payoff')
  139.     xlim([0 100])
  140.     ylim([0 5])
  141.     title('Student ID: 20118169')
  142.     plot(Scores);
  143. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement