180 likes | 343 Views
Budujemy model Stiglitz-Honig-Cohen’a. Joanna Tyrowicz Tomasz Michalak 19.10.2009. Kilka użytecznych funckji w MATLABie (1). Znamy już: zeros(m,n) ones(m,n) Na podobnej zasadzie działa:
E N D
Budujemy model Stiglitz-Honig-Cohen’a Joanna Tyrowicz Tomasz Michalak 19.10.2009
Kilka użytecznych funckji w MATLABie (1) • Znamy już: • zeros(m,n) • ones(m,n) • Na podobnej zasadzie działa: • rand(m,n) – generujre macierz m x n liczb pseudolosowych z rozkładu jednostajnego na przedziale [0,1]. Ćwiczenia: • Wygeneruj macierz A wielkości 3 x 3 z rozkładu jednostajnego [0,1]; • Wygeneruj wektor czteroelementowy v z rozkładu jednostajnego [0,5]; • Wygeneruj macierz B wielkości 1 x 4 z rozkładu jednostajnego [-5,2]
Kilka użytecznych funckji w MATLABie (2) Ćwiczenia: • Wygeneruj macierz A wielkości 3 x 3 z rozkładu jednostajnego [0,1]; A = rand(3,3) • Wygeneruj wektor czteroelementowy v z rozkładu jednostajnego [0,5]; v = rand(4,1)*5 • Wygeneruj macierz B wielkości 1 x 4 z rozkładu jednostajnego [-5,2] B = rand(1,4)*7-5
Kilka użytecznych funckji w MATLABie (3) Rozkład normalny (0,1): randn(n,m) Ćwiczenia: • Wygeneruj macierz A wielkości 5 x 5 z rozkładu normalnego (0,1): A = randn(5,5) • Wygeneruj wektor czteroelementowy v z rozkładu normalnego (2,8); v = randn(4,1)*8+2
Dzikie Karty (Wild Cards), itp. (1) 1. Proszę wprowadzić: M = rand(5,8) 2. Odczytywanie wartości komórki (3,5): M(3,5) 3. Odczytywanie wartości komórek (3,5) i (3,6) M(3,[5 6]) 4. Odczytywanie wartości komórek (3,5),(3,6) i (4,8) M([3 3 4],[5 6 8]) 5. Odczytanie wartści komórek w pierwszym wierszu: M(1,:) 6. Odczytanie wartości komórek w wierszach 2 i 3 M([2 3],:)
Dzikie Karty (Wild Cards), itp. (2) • Sekwencje: 1:10 ans = 1 2 3 4 5 6 7 8 9 10 • Transpozycja wektora/macierzy: [1 3]’ ans = 1 3
ETAPY TWORZENIA SYMULACJI MAS • Zrozumienie modelu teoretycznego • Zaprogramowania modelu, ktory będzie ewoluował w czasie: • Inicjalizacja głównych zmiennych (ilość agentów, ich zdolności, parametry funckji użyteczności, ilość okresów, tzn tyle ile chcemy aby model ewoluował itp). • Główna pętla modelu • Funkcje pozwalające na analizę wyników • Kalibracja/estymacja i empiryczna walidacja modelu
Inicjalizacja Pliku % ------------------------------------------------------------------- % Multi-Agent Simulations of Steigloitz, Honig and % Cohen Model by X Y % ------------------------------------------------------------------- clc; clear; disp(‘-------------------------------------------------------------------’) disp(‘Multi-Agent Simulations of Steigloitz, Honig and’); disp(‘Cohen Model by X Y’); disp(‘-------------------------------------------------------------------’)
Inicjalizacja Zmiennych Głównych (1) • %Number of agents • noa = 5; • %Number of periods • number_of_periods = 100; • %Recent Price • Pt = 0; • %Yesterday Price • Pt_1 = 0;
Inicjalizacja Zmiennych Głównych (2) • %MATRICES DESCRIBING AGENTS • %Index of the agent • AGENTS = [1:noa]'; • %Gold skills from [0 to 5] uniform • GOLDS = rand(noa,1)*5; • %Food skills from [0 to 5] uniform • FOODS = rand(noa,1)*5; • %Reserve levels from [20 to 40] uniform • RESERVE = floor(rand(noa,1)*20)+20; • %Gold inventory • GOLDI = zeros(noa,1); • %Food inventory • FOODI = zeros(noa,1);
Inicjalizacja Zmiennych Głównych (3) • %Parameters of the utility function b00, b01 i b0inf • UFUN = zeros(noa,3); • b00min = 4; • b00max = 8; • UFUN(:,1) = rand(noa,1)*(b00max-b00min)+b00min; • b01min = 6; • b01max = 10; • UFUN(:,2) = rand(noa,1)*(b01max-b01min)+b01min; • b0infmin = 12; • b0infmax = 20; • UFUN(:,3) = rand(noa,1)*(b0infmax-b0infmin)+b0infmin;
Rysunek Pokazujący Kształt Funkcji Użyteczności Food inventory normalized by the reserve Gold inventory normalized by the current value of the reserve of agent i Bid function defined as follows: 1 4 2 3 5
Rysunek Pokazujący Kształt Funkcji Użyteczności • %FIGURE SHOWING THE SHAPE OF THE UTILITY FUNCTION • agent = 1; • Pt = 1; • RESERVE(agent) = 30; A teraz wprowadzimy funkcje zagnieżdzoną: • GOLDI(agent) = 3; • BIDS = utility_function_graph(agent,Pt,GOLDI,RESERVE,UFUN); • plot(BIDS)
Funkcja zagnieżdzona (1) • function BIDS = utility_function_graph(agent,Pt,GOLDI,RESERVE,UFUN) • %We define variables • gbar = GOLDI(agent)/(Pt*RESERVE(agent)); • gamma = log((UFUN(agent,3) - UFUN(agent,1))/(UFUN(agent,3) -UFUN(agent,2))); • BIDS = zeros(1,60);
Funkcja zagnieżdzona (2) • %Function of bid for various values of food inventory • for foodi = 0 : 60 • bid = -1; • fbar = foodi/RESERVE(agent); • if fbar == 0 & gbar == 0 %----------------- IF no 1 ------------------- • bid = UFUN(agent,1); • end • if fbar == 0 & gbar == 1 %----------------- IF no 2 ------------------- • bid = UFUN(agent,2); • end • if fbar == 0 & gbar == Inf %----------------- IF no 3 ------------------- • bid = UFUN(agent,3); • end • if bid == -1 & fbar == 0 %----------------- IF no 4 ------------------- • bid = UFUN(agent,3)-(UFUN(agent,3)-UFUN(agent,1))*exp(-gamma*gbar); • end • if bid == -1 %----------------- IF no 5 ------------------- • bid = UFUN(agent,3)-(UFUN(agent,3)-UFUN(agent,1))*exp(-gamma*gbar); • bid = bid^(1-fbar); • end • BIDS(foodi+1) = bid; • end 1 2 3 Main FOR loop 4 5
Main Loop (1) • Pt_1 = 1; • for period = 1 : number_of_periods • %Agent loop • for agent = 1 : noa • %Every agent makes a decision to produce • if GOLDS(agent) > Pt_1*FOODS(agent)%agent wants to produce gold • GOLDI(agent) =+ GOLDS(agent); • else • FOODI(agent) =+ FOODS(agent); • end • %Agents consume every day one unit of food • FOODI(agent) =- 1; • end • ... • end