1 / 18

Budujemy model Stiglitz-Honig-Cohen’a

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:

irish
Download Presentation

Budujemy model Stiglitz-Honig-Cohen’a

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Budujemy model Stiglitz-Honig-Cohen’a Joanna Tyrowicz Tomasz Michalak 19.10.2009

  2. 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]

  3. 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

  4. 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

  5. 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],:)

  6. 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

  7. 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

  8. ETAPY TWORZENIA SYMULACJI MAS

  9. 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(‘-------------------------------------------------------------------’)

  10. 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;

  11. 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);

  12. 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;

  13. Rysunek Pokazujący Kształt Funkcji Użyteczności

  14. 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

  15. 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)

  16. 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);

  17. 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

  18. 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

More Related