Taxation Policy and Economic Market

Taxation Policy and Economic Market preview image

1 collaborator

Photo_identit%c3%a9 Aymeric Vié (Author)

Tags

capital exchange 

Tagged by Aymeric Vié over 7 years ago

consumers 

Tagged by Aymeric Vié over 7 years ago

economics 

Tagged by Aymeric Vié over 7 years ago

employment 

Tagged by Aymeric Vié over 7 years ago

gdp 

Tagged by Aymeric Vié over 7 years ago

markets 

Tagged by Aymeric Vié over 7 years ago

price 

Tagged by Aymeric Vié over 7 years ago

production 

Tagged by Aymeric Vié over 7 years ago

state 

Tagged by Aymeric Vié over 7 years ago

taxation 

Tagged by Aymeric Vié over 7 years ago

unemployment 

Tagged by Aymeric Vié over 7 years ago

wage 

Tagged by Aymeric Vié over 7 years ago

workers 

Tagged by Aymeric Vié over 7 years ago

Visible to everyone | Changeable by the author
Model was written in NetLogo 6.0.2 • Viewed 1299 times • Downloaded 72 times • Run 0 times
Download the 'Taxation Policy and Economic Market' modelDownload this modelEmbed this model

Do you have questions or comments about this model? Ask them here! (You'll first need to log in.)


Info tab cannot be displayed because of an encoding error

Comments and Questions

About GDP

Your model is great. I see a little problem with the GDP calculation: you add everything, from taxes, to salaries, to expenditures. GDP may be calculated in three different ways: adding up expenditures (private consumption, investment, public expenditures and export minus imports), value added or sources of income (salaries, profits, rents). You cannot mix them!

Posted about 7 years ago

About GDP

Hello. Thank you a lot for your feedback. That clarification for GDP is very right. I'm currently working on a major revision of the model, which is currently very (too much) simple for its description of economic mechanisms, and your comment is very helpful in this way. In the future, I aim to plot together the different ways of GDP determination in one graph.

Posted about 7 years ago

Hi Aymeric

The three ways for the calculation of the GDP should end in the same number. Anyway, your model is beautifully written. It is clear and easy to read!

Posted about 7 years ago

Another minor bug

Dear Aymeric: In several subfunctions (create-sellers n-sellers, and hatching sellers) you modify "money" two times: set money random-normal initial-endowment-producers 1 and then set money random-normal 10 0.1 R.

Posted about 7 years ago

Hi Rubén

Dear Rubén, many thanks for these remarks. The clarity of the model was a great concern to me, the mechanisms modeled here are very simplified and yet their interactions are so complex that one simple code line can dramatically change the outputs of the model. I'll take a look at the procedures you describe. Please feel free to add other remarks if you find some points that could be improved or need to be corrected. I am working on creating a 2.0 version of this model (that was actually my first in Netlogo) that includes goods & services market, monetary market and labour market.

Posted about 7 years ago

Not letting me unzip the file (Question)

I tried unzipping with Windows default and a third party unzip and both failed. It says the file is broken.

Posted about 7 years ago

Re : unzip problem

Hello, I'm very sorry to hear that. I just downloaded and unzipped using WinRar and it worked without problems. Maybe one could use set up the "Keep broken files" option when asking the program to extract, at least this option exists on WinRar. Please let me know. Aymeric

Posted about 7 years ago

Don't have WinRar

No worries.

Posted about 7 years ago

@Tim Gooding

If you want I can send you the model by email. Might dodge the unziping part.

Posted about 7 years ago

That would be great

k1505978@kingston.ac.uk

Posted about 7 years ago

@Tim Gooding

Sent!

Posted about 7 years ago

Click to Run Model

breed [ sellers a-seller]
breed [ consumers a-consumer]
breed [ Kproducers a-Kproducer]

globals
[
  total-money-consumers ;total money owned bt all consumers
  total-money-sellers ;idem for sellers
  total-money-Kproducers ;idem for capital producers

  total-trade ;goods and capital traded at tick
  total-Ktrade ;capital units traded at tick
  total-stock ;stock of goods currently in the sellers hands
  total-Kstock ;stock of capital currently in the capital producers hands

  state-budget ;this variable show how much money the State currently owns at this tick

  helped-sellers ;this variable shows the number of sellers currently or previously helped by the state
  helped-consumers ;idem for consumers
  helped-Kproducers ;idem for capital producers
  employed-consumers ;number of consumers employed at this tick

  mean-price ;sum of sellers prices divided by the number of sellers
  mean-Kprice ;idem with capital producers

  employment-rate ;fraction of consumers that are employed

  an-consumers ;number of consumers alive at tick

  GDP ;economic output of the market
]

sellers-own
[
  ownprice ;their price
  ownsales ;the number of sales done in all their life
  money ;their money
  ownstock ;their stock
  trade? ;boolean variable activated if there was some trade this tick
  trade-at-tick ;number of trades done at this tick
  already-helped? ;boolean variable activated if there was some help in the seller's life
  capital ;capital stock
  target-capital ; capital demand of the agent
  target-production ; production objective of the agent
  failed-trades-stock ;number of trades that failed because of a too small stock
  failed-trades-price ;number of trades taht failed because of a too high price
  visits ;number of trade attempts at tick
  react-to-capital-rationnal? ;if trading is not rationnal (i.e. the agent won't make profits from it), then this boolean variables, if turned on, starts a procedure to improve the profits opportunities
]

consumers-own
[
  money
  bought-this-round? ;boolean variable set true if the consumer bought a good this tick
  goods-bought ;number of goods boughts in the consumer's life
  already-helped? ;idem for consumers
  employed? ;true if the consumer was employed this turn
  days-employed ;number of ticks in which the consumer was employed
  energy ;energy (biological) of the consumer, lost by living and working, and gained by consuming goods
  needs ; this variable shows how many goods the consumer wants to buy
]

Kproducers-own
[
  ; the agent variables are here the same than the sellers variables, but applied to capital producers
  money
  target-Kproduction
  ownKstock
  already-helped?
  ownKprice
  ownKsales
  Ktrade-at-tick
  wage
  failed-trades-stock
  failed-trades-price
  trade?
  visits
  react-to-price-rationnal?
]

to setup

  clear-all

  set state-budget 0
  set helped-sellers 0
  set helped-consumers 0
  set mean-price 0
  set employed-consumers 0
  set an-consumers n-consumers
  set helped-Kproducers 0
  set mean-Kprice 0
  set GDP 0

create-sellers n-sellers
  [
  setxy random-xcor random-ycor
  set shape "house"
  set color white
  set money random-normal initial-endowment-producers 1
  set size 2
  set ownprice random-normal initial-price-sellers 1
  set ownstock 0
  set money random-normal 10 0.1
  set ownsales 0
  set trade? false
  set already-helped? false
  set target-production random 10
  set failed-trades-stock 0
  set failed-trades-price 0
  set target-capital random-normal 3 0.1
  set capital 0
  set visits 0
  ]

  create-consumers n-consumers
  [
  setxy random-xcor random-ycor
  set size 1
  set shape "person"
  set color yellow
  set money random-normal initial-endowment-consumers 1
  set bought-this-round? false
  set already-helped? false
  set days-employed 0
  set energy random 20
  set needs random-normal 3 0.5
  ]

  create-Kproducers n-Kproducers
  [
  setxy random-xcor random-ycor
  set size 2
  set shape "square"
  set color blue
  set money random-normal initial-endowment-producers 1
  set ownKstock 0
  set already-helped? false
  set target-Kproduction random 10
  set ownKprice random-normal 4 0.5
  set ownKsales 0
  set Ktrade-at-tick 0
  set wage random-normal 2 0.2
  set failed-trades-stock 0
  set failed-trades-price 0
  set trade? false
  ]

reset-ticks
end 

to go

  ; If there is nobody in our Market, we stop the model
  if count sellers = 0 [stop]
  if count consumers = 0 [stop]
  if count Kproducers = 0 [stop]

  ; This procedure sets the daily variables
  set-beginning-values

  ; The agents check if they have enough money to stay in the market
  check-if-defaut

  ; The Kproducers employs the consumers to create capital K, and give them wages
  work

  ; The Gproducers buy some capital to the Kproducers
  trade-capital

  ; The Gproducers use the capital to create goods
  produce-goods

  ; The consumers buy goods A and B to the Gproducers
  trade-goods

  ; The agents adjust their strategies based on what happened this day
  adjust

  ; There are taxes
  tax

  ; This procedure sets some daily variables at the end of the day
  set-end-values

tick
end 

to set-beginning-values

ask sellers
  [
    set trade-at-tick 0
    set trade? false
    set failed-trades-stock 0
    set failed-trades-price 0
    set target-capital (target-production / capital-productivity)
    set visits 0
    set ownsales 0
    set color white
    set react-to-capital-rationnal? false
  ]

ask consumers
  [
    set employed? false
    set color yellow
    set employed-consumers 0
    set bought-this-round? false
    set energy energy - daily-energy-consumption
  ]

ask Kproducers
  [
    set Ktrade-at-tick 0
    set failed-trades-stock 0
    set failed-trades-price 0
    set visits 0
    set ownKsales 0
    set color blue
    set react-to-price-rationnal? false
  ]

  ;globals
  set GDP 0
end 

to check-if-defaut

  ; sellers first
ask sellers [

    if new-sellers? = true [
      if random 100 < sellers-newcomers% [
        hatch 1 [
          setxy random-xcor random-ycor
          set shape "house"
          set color white
          set money random-normal initial-endowment-producers 1
          set size 2
          set ownprice random-normal initial-price-sellers 1
          set ownstock 0
          set money random-normal 10 0.1
          set ownsales 0
          set trade? false
          set already-helped? false
          set target-production random 10
          set failed-trades-stock 0
          set failed-trades-price 0
        ] ; end hatch
      ] ; end if random 100
    ] ; end if new sellers true

    if money <= 0 [

      if ownstock <= 0 [
        if already-helped? = true [
          die
          set helped-sellers helped-sellers - 1
        ]
        if already-helped? = false
        [
          if state-help-sellers? = true [
            set already-helped? true
            set money money + state-help-sellers
            set helped-sellers helped-sellers + 1
            set state-budget state-budget - state-help-sellers
          ]
        ]

        if already-helped? = false and state-budget < 0
        [
          set color grey
        ] ; end if already-helped
      ] ; end if ownstock < 0

      if ownstock > 0 [
        if already-helped? = false [
        if state-intervention-sellers? = true [
          ; then the state buys even without profit, the stock, and restore the seller's financial health
          set money money + ownprice * ownstock
          set GDP GDP + ownprice * ownstock
          set state-budget state-budget - ownprice * ownstock
          set ownstock 0
          set already-helped? true
        ] ; end if state-intervention? true
        if state-intervention-sellers? = false [
            die
        ]
        ]
        if already-helped? = true
        [
          die]
      ] ; end if ownstock > 0
    ] ; end if money < 0
  ] ; end ask sellers


; now consumers procedure
ask consumers [

  ; if they run out of energy, they die
  if energy <= 0 [
      die
    ]

  ; some new consumers could enter in the market
  if new-consumers? = true [
      if random 100 < consumers-newcomers% [
      hatch 1 [
          setxy random-xcor random-ycor
          set size 1
          set shape "person"
          set color yellow
          set money random-normal initial-endowment-consumers 1
          set bought-this-round? false
          set already-helped? false
          set days-employed 0
        ] ; end hatch
      ] ; end if random 100 < newcomers for consumers
    ] ; end if new consumers = true

    ; if they don't have money, they die or get helped by the state
    if money <= 0 [
      if already-helped? = true
      [
      die
      set helped-consumers helped-consumers - 1
      set an-consumers an-consumers - 1
      ]
    if already-helped? = false and state-budget > 0
      [
        if state-help-consumers? = true [
      set already-helped? true
      set money money + state-help-consumers
      set helped-consumers helped-consumers + 1
      set state-budget state-budget - state-help-consumers
      ]
      ]
     if already-helped? = false and state-budget < 0
      [
      set color grey
      ]
    ] ; end if money <= 0
  ] ; end ask consumers

  ask consumers [
if basic-income? = true [
    if state-budget > basic-income [
      set money money + basic-income
      set state-budget state-budget - basic-income
    ] ; end if state has enough money
  ] ; end if basic income true
  ] ; end ask consumers

  ; now Kproducers proceduref
  ask Kproducers [

    if new-Kproducers? = true [
      if random 100 < Kprod-newcomers% [
        hatch 1 [
          setxy random-xcor random-ycor
          set size 2
          set shape "square"
          set color blue
          set money random-normal initial-endowment-producers 1
          set ownKstock 0
          set already-helped? false
          set target-Kproduction random 10
          set ownKprice random-normal 4 0.5
          set ownKsales 0
          set Ktrade-at-tick 0
          set wage random-normal 2 0.2
          set failed-trades-stock 0
          set failed-trades-price 0
        ] ; end hatch
      ] ; end if random < TR
    ]; end if new-Kproducers = true

    if money <= 0 and ownKstock <= 0 [
      if already-helped? = true [
        die
        set helped-Kproducers helped-Kproducers - 1
      ] ; end if state help Kprod true

      if already-helped? = false and state-budget > 0 [
        if state-help-Kprod? = true [
          set already-helped? true
          set money money + state-help-Kprod
          set helped-Kproducers helped-Kproducers + 1
          set state-budget state-budget - state-help-Kprod
        ] ; end if SHK true
      ] ; end AH false & state budget > 0

      if already-helped? = false and state-budget < 0
      [
        set color grey
      ]
    ] ; end if money <= 0 ownKstock <= 0

    if money <= 0 and ownKstock > 0 [

      if state-intervention-Kprod? = true and state-budget > 0 [
        ; then the state buys even without profit, the stock, and restore the seller's financial health
        set money money + ownKprice * ownKstock
        set state-budget state-budget - ownKprice * ownKstock
        set GDP GDP + ownKstock * ownKprice
        set ownKstock 0
      ] ; end if state-intervention? true

      if state-intervention-Kprod? = false [
        ; do nothing
        ] ; if SI false

    ] ; end if money negative and ownKstock positive
  ] ; end ask Kproducers
end 

to work

  ask Kproducers [

    ; As a capital producer, I have a target production of capital (target-Kproduction)
    ; I want to produce this quantity using the workforce around me, each worker is able to create one unit of capital per day of work
    ; First, I need enough money !

    if money >= wage * target-Kproduction [

      ; then, I need my choice to product capital to be rationnal, i.e. economically adequate considering the price, the wage, and the taxes

      if target-Kproduction * ownKprice >= (wage + tax-sale-Kprod) * target-Kproduction [

        let k target-Kproduction
        let w wage

        ;let target k of consumers in-radius reach
        let employable-consumers consumers with [employed? = false]

        if count employable-consumers in-radius reach >= target-Kproduction [

          ask n-of k employable-consumers in-radius reach [

            set employed? true
            set color green
            set employed-consumers employed-consumers + 1
            set money money + w
            set energy energy - work-energy-cost
            set days-employed days-employed + 1
            set employment-rate ((employed-consumers * 100) / count consumers)
          ] ; end ask targets workers

          ; we know still ask the Kproducers as employers
          set color violet
          set money money - wage * target-Kproduction
          set ownKstock ownKstock + target-Kproduction
          set GDP GDP + wage * target-Kproduction

        ] ; end if count employable-consumers around is enough to produce my target Kproduction
          ; if we don't have enough workers around, we still try to produce as much as we can, even if we are not satisfied
        if count employable-consumers in-radius reach < target-Kproduction [

          if count employable-consumers in-radius reach != 0 [

            let h count employable-consumers in-radius reach

            ask n-of h employable-consumers in-radius reach [
              set employed? true
              set color green
              set employed-consumers employed-consumers + 1
              set money money + w
              set energy energy - work-energy-cost
              set days-employed days-employed + 1
              set employment-rate ((employed-consumers * 100) / count consumers)
              ; so we produced h goods, such that h < target-Kproduction

            ] ; end ask employable consumer in radius reach, we now ask Kproducers
            set money money - wage * h
            set ownKstock ownKstock + h
            set GDP GDP + wage * h

            set color orange
            right random 90
            left random 90
            forward reach / 2

          ] ; end if count employable-consumers in-radius reach != 0

          if count employable-consumers in-radius reach = 0 [
            set color red
            right random 90
            left random 90
            forward reach
          ] ; end if count employable-consumers in-radius reach = 0
        ] ; end if count employable-consumers in-rdius reach < target-production
      ] ; end if target-Kproduction * ownKprice >= target-Kproduction * (wage + tax-sale-Kprod)
      if target-Kproduction * ownKprice < target-Kproduction * (wage + tax-sale-Kprod) [
        set wage wage - rationnal-wage-delta / 2
        set ownKprice ownKprice + d-price / 2
      ] ; end if target-Kproduction * ownKprice < target-Kproduction * (wage + tax-sale-Kprod)
    ] ; end if money >= wage * target-Kproduction [
    if money < wage * target-Kproduction [
      set wage wage - rationnal-wage-delta
    ] ; end if money < wage * target-Kproduction
  ] ; end ask Kproducers





  ask consumers [
    ; if there were not employed, consumers find another location in where they could eventualy work
    if employed? = false [
      right random 90
      left random 90
      forward reach
    ] ; end if eployed false
  ] ; end ask consumers
end 

to trade-capital

ask sellers [

    ; we create a temporrary variable z that is the demand in capital of the seller
    let z target-production / capital-productivity

    ; First, we need at least one Kproducer
    if count Kproducers != 0 [

      if target-production != 0 [
        ; the agent selects the cheapest shop in a certain radius
        let target min-one-of Kproducers in-radius reach [ownKprice]

        if target != nobody [

          ; Second : is the trade rationnal for the Kproducer considering eventual taxes?
          ask target [
            if ownKprice * z - tax-sale-Kprod >= 0 [

                ; Third : is the trade rationnal for the seller considering eventual taxes?
              ; i.e. : will he be able to make profit selling these goods considering the capital cost ?
              ask sellers [
                if ownprice * target-production - tax-sale-sellers >= z * [ownKprice] of target [

                  ; Now, there is a visit, that result on a success or in different types of failures
                  ask target [
                    set visits visits + 1
                  ] ; end ask target

                  ; Fourth : as a seller, does my target have enough capital to satisfy my demand?
                  if z <= [ownKstock] of target [

                    ; Fifth : as a seller, do I have enough money to buy the capital I want?
                    if money >= z * [ownKprice] of target [

                      ; if both are true, I can process the trade!
                      ; we ask globals
                      set total-Ktrade total-Ktrade + z
                      set GDP GDP + z * [ownKprice] of target

                      ; we are still asking sellers
                      set money money - z * [ownKprice] of target
                      set capital capital + z

                      ask target [
                        set money money + ownKprice * z
                        set ownKstock ownKstock - z
                        set ownKsales ownKsales + z
                        set Ktrade-at-tick Ktrade-at-tick + z
                        set GDP GDP + ownKprice * z
                        set ownKprice ownKprice + greedy-price
                      ] ; end ask target

                    ] ; end if money >= [ownKprice] of target
                    if money < z * [ownKprice] of target [
                      ask target [
                        set failed-trades-price failed-trades-price + 1
                      ]; end ask target
                    ] ; end if not enough money

                  ] ; end if enough stock
                  if target-production / capital-productivity > [ownKstock] of target [
                    ask target [
                      set failed-trades-stock failed-trades-stock + 1
                    ] ; end ask target
                  ]; end if not enough stock

                ] ; end rationnality sellers true
                if (ownprice - tax-sale-sellers) * target-production < z * [ownKprice] of target [
                  if react-to-capital-rationnal? = false [
                    set react-to-capital-rationnal? true
                    set ownprice ownprice + ownprice * d-price * 0.01
                  ]
                  if react-to-capital-rationnal? = true [
                  set color yellow
                  right random 30
                  left random 30
                  forward 1
                  ]
                ] ; end rationality sellers false
              ] ; end ask sellers
            ] ; end rationnality Kproducers true

            if ownKprice * z - tax-sale-Kprod * z < 0 [
              if react-to-price-rationnal? = false [
                set ownKprice ownKprice + d-price
                set react-to-price-rationnal? true
              ]
              if react-to-price-rationnal? = true []
            ]; end if rationnality Kproducer is false
          ] ; end ask target in condition 2
        ] ; end if target is not nobody

        if target = nobody [
        ; if there is no Kproducer to sell capital around, then the seller moves to a better location
          right random 90
          left random 90
          forward reach
      ] ; end if target nobody

    ] ; end if target-production != 0
  ] ; end if count producers not equal to 0
  ] ; end ask sellers
end 

to produce-goods
  ask sellers [
    if capital > 0 [
      set ownstock (capital * capital-productivity)
      set capital 0
    ] ; end if capital > 0
  ] ; end ask sellers
end 

to trade-goods
; The consumers will now finally consume!

  ask consumers [

    ; First : we need at least one seller in the world
    if count sellers != 0 [

      ; the consumers select the cheapest seller around them
      let target min-one-of sellers in-radius reach [ownprice]

      if target != nobody [
      ;let target min-one-of Kproducers [distance myself]

        ask target [
          set visits visits + 1
        ] ; end ask target

        ; Second : as a consumer, do I have enough money to buy my desired quantity of goods ?
        if money >= needs * [ownprice] of target [

          ; Third : does my seller have enough stock to sell me what I want?
          if needs <= [ownstock] of target [

            ; if these 3 conditions are satisfied, then we can trade and be happy
            ; we ask globals
            let m needs
            set total-Ktrade total-Ktrade + m
            set GDP GDP + m * [ownprice] of target

            ; we are still ask sellers
            set money money - m * [ownprice] of target
            set goods-bought goods-bought + m
            set bought-this-round? true
            set total-trade total-trade + m
            set energy energy + energy-gain-from-good * m

            ask target [
              set money money + ownprice * m
              set ownstock ownstock - m
              set ownsales ownsales + m
              set trade-at-tick trade-at-tick + m
            ] ; end ask target

          ] ; end if needs <= ownstock of target

          if needs > [ownstock] of target [
            let r needs
            ask target [
              set failed-trades-stock failed-trades-stock + r
            ] ; end ask target
          ] ; end if needs > [ownstock] of target

        ] ; end if enough money

        if money < needs * [ownprice] of target [
          let r needs
          ask target [
            set failed-trades-price failed-trades-price + r
          ] ; end ask target
        ] ; end of not enough money to trade

      ] ; end if target nobody

      ; if there is no seller around, the consumer move to another location!
      if target = nobody [
        right random 90
        left random 90
        forward reach
      ] ; end target is nobody

    ] ;end if count sellers
  ] ; end ask consumers
end 

to tax

  ;; tax on sale for sellers
  ask sellers [
    set money money - tax-sale-sellers * trade-at-tick
    set GDP GDP + tax-sale-sellers * trade-at-tick
    set state-budget state-budget + tax-sale-sellers * trade-at-tick
  ] ; end ask sellers

  ;; tax on sale for Kproducers
  ask Kproducers [
    set money money - tax-sale-Kprod * Ktrade-at-tick
    set GDP GDP + tax-sale-Kprod * Ktrade-at-tick
    set state-budget state-budget + tax-sale-Kprod * Ktrade-at-tick
  ] ; end ask Kprod

  ;; tax on fixed costs
  ask sellers [
    if fix-tax-sellers? = true [
    set money money - fixed-cost-sellers
    set state-budget state-budget + fixed-cost-sellers
    set GDP GDP + fixed-cost-sellers
    ]; end if FTS true
  ] ; end ask sellers

  ask Kproducers [
    if fix-tax-Kprod? = true [
    set money money - fixed-cost-Kprod
    set state-budget state-budget + fixed-cost-Kprod
    ] ; end if FTK true
  ] ; end ask Kproducers

  ;; tax on income for consumers that work
  ask consumers [
    if tax-income? = true [
      if employed? = true [
        set money money - tax-income
        set state-budget state-budget + tax-income
        set GDP GDP + tax-income
      ] ; end if employed = true
    ] ; end if tax income true
  ] ; end ask consumers
end 

to adjust

  ; First, adjust prices
ask Kproducers [

   if visits = 0
  [
    ;change location
    right random 90
    left random 90
    forward 1
  ] ;end if visits

  if visits != 0
  [
    if failed-trades-price = 0
    [
      if failed-trades-stock = 0
      [
        if ownKstock = 0
        [
            set ownKprice ownKprice + greedy-price
        ] ; end if ownKstock = 0

        if ownKstock > 0
        [
            if ownKstock < Ktrade-at-tick
            [
              set target-Kproduction Ktrade-at-tick - ownKstock
            ] ;end if ownKstock < Ktrade-at-ticks

            if ownKstock >= Ktrade-at-tick
            [
              if ownKstock < stock-clearing-treshold [
                set target-Kproduction 0
              ] ;end if ownKstock < stock-clearing-treshold

              if ownKstock >= stock-clearing-treshold [
                set target-Kproduction 0
                set ownKprice ownKprice - stock-clearing-sensibility
              ] ; end if ownKstock >= stock-clearing-treshold
            ] ;end if ownKstock >= Ktrade-at-tick

        ] ;end if ownKstock > 0

      ] ; if FTST = 0

      if failed-trades-stock > 0
      [
        set target-Kproduction visits + failed-trades-stock
      ] ; if FTST > 0

    ] ;end if FTP = 0

    if failed-trades-price > 0
    [
      if failed-trades-stock = 0
      [
        if ownKstock = 0
        [
            set ownKprice ownKprice + d-price * failed-trades-price
        ] ; end if ownKstock = 0

        if ownKstock > 0
        [
            if ownKstock < Ktrade-at-tick
            [
              set ownKprice ownKprice - d-price * failed-trades-price
              set target-Kproduction Ktrade-at-tick - ownKstock
            ] ; end if ownKstock < Ktrade-at-tick

            if ownKstock >= Ktrade-at-tick
            [
              if ownKstock < stock-clearing-treshold [
              set ownKprice ownKprice - d-price * failed-trades-price
              set target-Kproduction 0
              ] ;end if ownKstock < stock-clearing-treshold

              if ownKstock >= stock-clearing-treshold [
                set target-Kproduction 0
                set ownKprice ownKprice - d-price * failed-trades-price - stock-clearing-sensibility
              ] ; end if ownKstock >= stock-clearing-treshold
            ] ; end if ownKstock >= Ktrade-at-tick

        ] ;end if ownKstock > 0

      ] ;end if FTST = 0

      if failed-trades-stock > 0
      [
        set ownKprice ownKprice + d-price * failed-trades-price
        set target-Kproduction visits + failed-trades-stock
      ] ; end if TFST > 0

    ] ;end if FTP > 0

  ] ;end if visits

] ;end ask Kproducers

;;; ADJUST WAGES

  ask Kproducers  [

    if wage < minimum-wage [

      set wage minimum-wage

    ] ; end of if wage < minimum-wage

    if wage >= minimum-wage [

      if money <= 0 [

        set wage minimum-wage
      ] ; end if money <= 0

      if money < wage [
        set wage minimum-wage
      ] ; end if money < wage

      if money > 0 [
        if money >= rich-firm-treshold [
          set wage wage + rich-firm-wage-delta
        ] ; end if firm is rich
      ] ; end if money > 0
    ] ; end if wage >= minimum-wage
  ] ; end of ask Kproducers


; adjust wages for rationnality?


;;; ADJUST FOR SELLERS
; first adjust prices

ask sellers [

   if visits = 0
  [
    ;change location
    right random 90
    left random 90
    forward 1
  ] ;end if visits

  if visits != 0
  [
    if failed-trades-price = 0
    [
      if failed-trades-stock = 0
      [
        if ownstock = 0
        [
            set ownprice ownprice + greedy-price
        ] ; end if ownKstock = 0

        if ownstock > 0
        [
            if ownstock < trade-at-tick
            [
              set target-production trade-at-tick - ownstock
            ] ;end if ownKstock < Ktrade-at-ticks

            if ownstock >= trade-at-tick
            [
               if ownstock < stock-clearing-treshold [
                set target-production 0
              ] ; end if ownstock < stock-clearing-treshold

              if ownstock >= stock-clearing-treshold [
                set target-production 0
                set ownprice ownprice - stock-clearing-sensibility
              ] ; end if ownstock >= stock-clearing-treshold
            ] ;end if ownKstock >= Ktrade-at-tick

        ] ;end if ownKstock > 0

      ] ; if FTST = 0

      if failed-trades-stock > 0
      [
        set target-production visits + failed-trades-stock
      ] ; if FTST > 0

    ] ;end if FTP = 0

    if failed-trades-price > 0
    [
      if failed-trades-stock = 0
      [
        if ownstock = 0
        [
            set ownprice ownprice - d-price * failed-trades-price
        ] ; end if ownKstock = 0

        if ownstock > 0
        [
            if ownstock < trade-at-tick
            [
              set ownprice ownprice - d-price * failed-trades-price
              set target-production trade-at-tick - ownstock
            ] ; end if ownKstock < Ktrade-at-tick

            if ownstock >= trade-at-tick
            [
              if ownstock < stock-clearing-treshold [
                set ownprice ownprice - d-price * failed-trades-price
                set target-production 0
              ] ; end if ownstock < stock-clearing-treshold

              if ownstock >= stock-clearing-treshold [
                set target-production 0
                set ownprice ownprice - d-price * failed-trades-price - stock-clearing-sensibility
              ] ; end if ownstock >= stock-clearing-treshold
            ] ; end if ownKstock >= Ktrade-at-tick

        ] ;end if ownKstock > 0

      ] ;end if FTST = 0

      if failed-trades-stock > 0
      [
        set ownprice ownprice - d-price * failed-trades-price
        set target-production visits + failed-trades-stock
      ] ; end if TFST > 0

    ] ;end if FTP > 0

  ] ;end if visits
    if ownprice < mean-price * 0.25 [
      set ownprice ownprice + greedy-price
    ] ; end if ownprice < 25% of average price

] ;end ask sellers
end 

to set-end-values

  set total-money-sellers sum [money] of sellers
  set total-money-consumers sum [money] of consumers
  set total-money-Kproducers sum [money] of Kproducers

  set total-stock sum [ownstock] of sellers

  set total-Kstock sum [ownKstock] of Kproducers
  set total-Ktrade sum [ownKsales] of Kproducers



if count sellers != 0 [
  set mean-price sum [ownprice] of sellers / count sellers
  ]
if count Kproducers != 0 [
  set mean-Kprice sum [ownKprice] of Kproducers / count Kproducers
  ]
end 

There are 2 versions of this model.

Uploaded by When Description Download
Aymeric Vié about 7 years ago Visualisation improvement, bugs fixed, price adjustment mechanisms improved, further explanations added Download this version
Aymeric Vié over 7 years ago Initial upload Download this version

Attached files

File Type Description Last updated
Model_preview_V1.1.jpg jpeg Preview for the Model TPEC V1.1 (2) about 7 years ago, by Aymeric Vié Download
Taxation Policy and Economic Market.png preview Preview for the Model TPEC V1.1 (2) about 7 years ago, by Aymeric Vié Download
Taxation Policy and Economic Market.png preview Preview for the Model TPEC V1.1 (2) about 7 years ago, by Aymeric Vié Download

This model does not have any ancestors.

This model does not have any descendants.