Taxation Policy and Economic Market
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
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.
Attached files
File | Type | Description | Last updated | |
---|---|---|---|---|
Model_preview_V1.1.jpg | jpeg | Preview for the Model TPEC V1.1 (2) | almost 8 years ago, by Aymeric Vié | Download |
Taxation Policy and Economic Market.png | preview | Preview for the Model TPEC V1.1 (2) | almost 8 years ago, by Aymeric Vié | Download |
Taxation Policy and Economic Market.png | preview | Preview for the Model TPEC V1.1 (2) | almost 8 years ago, by Aymeric Vié | Download |
This model does not have any ancestors.
This model does not have any descendants.
Rubén Osuna
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 almost 8 years ago
Aymeric Vié
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 almost 8 years ago
Rubén Osuna
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 almost 8 years ago
Rubén Osuna
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 almost 8 years ago
Aymeric Vié
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 almost 8 years ago
Tim Gooding
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 almost 8 years ago
Aymeric Vié
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 almost 8 years ago
Tim Gooding
Don't have WinRar
No worries.
Posted almost 8 years ago
Aymeric Vié
@Tim Gooding
If you want I can send you the model by email. Might dodge the unziping part.
Posted almost 8 years ago
Tim Gooding
That would be great
k1505978@kingston.ac.uk
Posted almost 8 years ago
Aymeric Vié
@Tim Gooding
Sent!
Posted almost 8 years ago