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é 4 months ago

consumers 

Tagged by Aymeric Vié 4 months ago

economics 

Tagged by Aymeric Vié 4 months ago

employment 

Tagged by Aymeric Vié 4 months ago

gdp 

Tagged by Aymeric Vié 4 months ago

markets 

Tagged by Aymeric Vié 4 months ago

price 

Tagged by Aymeric Vié 4 months ago

production 

Tagged by Aymeric Vié 4 months ago

state 

Tagged by Aymeric Vié 4 months ago

taxation 

Tagged by Aymeric Vié 4 months ago

unemployment 

Tagged by Aymeric Vié 4 months ago

wage 

Tagged by Aymeric Vié 4 months ago

workers 

Tagged by Aymeric Vié 4 months ago

Visible to everyone | Changeable by the author
Model was written in NetLogo 6.0.2 • Viewed 293 times • Downloaded 18 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.)


## WHAT IS IT?

This is a simple model of an economic market, in which consumers, capital producers, and good sellers interact. This model emphasizes the role of the State, and the impact of tax and labour policy on the market.

# Model Scope

This model can be used to evalate the impact of different set of policies over time, on the macroscopic and microscopic states of the market.

## HOW IT WORKS

# Environment

This model is a competitive economic market of one single good. The agents freely move into the market. No spatial structure (but distance) is taken into account.

# Consumers (consumers) : selection, properties and actions

The consumers are simple individuals who just want to consume goods. They look for work in capital production, and receive wage from capital producers. With this money, they are able to buy some goods, that give them energy to keep living and working.

# Capital Producers (Kproducers) : selection, properties and actions

Capital producers employ the consumers to make them produce some capital. They sell the capital (means of production) to the sellers, and give wages to the consumers working in their factory.

# Sellers (sellers) : selection, properties and actions

The sellers buy some capital to the capital producers, and use it to transform it into goods of consumption. They sell the goods to the consumers, receiving money that allows them to keep buying capital.

# Order of Events

- The agent check if they have enough money to keep interacting in the market. Eventually, if they run out of money, they are helped by the state.

- the capital producers, if some conditions (enough money, rationality of the decision, enough workforce around) are validated, employ some consumers to produce some capital, and give them wages.

- the goods sellers, if some conditions (enough money, possibility of profit, enough stock of capital to be sold) are validated, buy some capital to the capital producers.

- With this capital, the sellers create consumption goods. Example : using wheat to do bread.

- The consumers try to buy some of these consumption goods depending on their needs, to the sellers.

- At the end of the day, each agent considers its actions, and eventually adjusts some variables : the capital producers (Kproducers) adjust their wages, their production objectives, and their price ; the goods sellers (sellers) adjust their prices and their production objectives. This behavior aims to represent as much as possible realistic behaviors : for instance, a seller who saw trades fail because the goods were too expensive, will try to reduce this price in the next round.

## HOW TO USE IT / User Interface

# Model Execution

- You are invited to set your parameters

- Then click setup button

- Then choose go (once) or go (forever) and observe the results

# Model inputs

In this model, the observer can choose different parameters that may change the behavior of the agents and of the market.

- The number of agents

- The possible arrival of a certain number of agents of a certain type over time

- The capital productivity, i.e. the number of goods that can be produced by the seller using a single unit of capital

- The sensibility of the agents, i.e. the amplitude of their reactions

- The "vision" : reach parameter, that set the maximum distance of interaction

You can set the amplitude of the reactions of the agents, to stocks, for instance, and set the standard deviations in prices (d-price) and in wages (rationnal-wage-delta) when agents have to adapat to new conditions.

In the case of stock, the stock-clearing-treshold indicates how many goods the agent must own before deciding to reduce its price, because it has accumulated to much goods. The price will be reduced by the standard change stock-clearing-sensibility.

If the capital firm gets more money than the variable (rich-firm-treshold), its wages will increase by the rich-firm-wage-delta, since we assume the social movements within the firm will tend to obtain better salaries, if the firm is going well.

The greedy price is the standard augmentation of price by a seller of goods or capital, if everything in the transactions went well. This is the attitude of the seller of goods or capital, who tries to maximise his profit.

# State policy

As an observer/state, you can directly interact with the system, by using all tools available. You can enable (disable) some types of taxations, modify their amount, and set the minimum wage imposed by the state to the agents. No agent can pay its employees below this amont, so be careful ! A too high minimum-wage can destroy the firms, but a too low can make your consumers poor, and unable to buy goods, and at the end, die.

You can implement fix costs for different agents, income tax for employed consumers, taxes on sale (per product sold), basic universal income for consumers. All of these go to, or go from the State.

By activating State-intervention switchers, you allow the State to buy the stocks of agents that ran out of money, even if this is not a great deal. This is a supporting measure.

# Model outputs

These variables are not set by the observer, but emerge from the behavior of the system.

- Wages

- Distribution of money among categories of agents

- Employment rate

- GDP

- Spatial dynamics

- Prices of goods and of capital

- State budget

- Trade of goods and capital

## THINGS TO NOTICE

- Some very small changes in the tax policy can lead to huge (and possibly dramatic) changes in the overall behavior.

- The agents tend to form clusters associating agents of each category. How do they form, and how do they disappear?

- Observe the relation between employment-rate and minimum-wage : does increasing minimum wage necessarily reduces employment?

- The agents are aware of the taxes that impact them, they may over react to a brutal change of policy!

- What about a non-interventionnary state? What about a basic income for consumers ?

## THINGS TO TRY

What are the current debates in your country about taxation? This model can be used to represent, to a certain extent, the short, medium and long term consequences of adopting a set of measures !

- And YOU, how would you manage the market ? How would you try to reach high GDP growth, or huge wages, or full employment? There is no determined path that may lead you to reach your objectives !

## EXTENDING THE MODEL

The opportunities of extension of this model are huge. I plan to add in the future technology, investment, goods diversity, more policy measures, the monetary market, strategies, the environment, population dynamics, memories...

## NETLOGO FEATURES

The overall code is very simple, but emphasizes on the ability of the agents to interact with agents of another breed, and with their attached variables. One could check especially the work, trade-capital and trade-goods procedures for examples.

## CREDITS AND REFERENCES / MODEL DOCUMENTATION

This model is entirely personnal work. Yet, some useful insights and technical references find their source on the following references, that brings a huge contribution to the use of ABM, especially in Economics.

- Romulus-Catalin Damaceanu. Agent-Based Computationnal Economics Using Netlogo, 2013

- Lynne Hamil, Nigel Gilbert. Agent Based Modelling in Economics, WIley, 2015

- Uri Wilenski, William Rand. An introduction to Agent Based Modelling : Modeling Natural, Social, and Engineered Complex Systems in Netlogo, 2015

Aymeric Vié, 2017 ; contact : aymericvie78@gmail.com

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 2 months 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 2 months 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 2 months 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 2 months 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 2 months 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 1 month 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 1 month ago

Don't have WinRar

No worries.

Posted about 1 month ago

@Tim Gooding

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

Posted about 1 month ago

That would be great

k1505978@kingston.ac.uk

Posted about 1 month ago

@Tim Gooding

Sent!

Posted about 1 month 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é 3 months ago Visualisation improvement, bugs fixed, price adjustment mechanisms improved, further explanations added Download this version
Aymeric Vié 4 months 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) 3 months ago, by Aymeric Vié Download
Taxation Policy and Economic Market.png preview Preview for the Model TPEC V1.1 (2) 3 months ago, by Aymeric Vié Download
Taxation Policy and Economic Market.png preview Preview for the Model TPEC V1.1 (2) 3 months ago, by Aymeric Vié Download

This model does not have any ancestors.

This model does not have any descendants.