powered by NetLogo
view/download model file: Midsize_Vehicle_Market.nlogo
Agent based model for midsize vehicle in U.S. is a multi-agent based simulation model, where new vehicle purchase is simulated through interactions among customers, dealers, and manufacturers and the utility theory from economics is assumed here. As my research work has been focusing on customer preference study in vehicle purchase using discrete choice model, in which preference coefficients are estimated from survey data, it would be interesting to see the backward realization and therefore validate our approach of discrete choice model.
The guiding questions we want to answer with this midsize vehicle market model are as follows:
How do customers make their choices when purchasing the vehicle?
How does dealer�s pricing strategy influence their sales?
How do manufacturers� vehicle designs influence their market share?
How does customers� shift from conventional cars to alternative fuel cars, hybrid cars in this case, respond to interactions between customers, i.e. the �word of mouth� effect?
In the context of customer behavior study, we assume that every customer makes rational decision in purchasing products, i.e. he / she chooses one product that maximize his / her utility among all available alternatives (in this case, all available choices). The utility is formulated as a function of price, brand, vehicle attributes, and demographic attributes (gender, age, income, etc.). For example, the utility of customer i for alternative j can be written as follows:
U_ij = A * price_j + B * brand_j + C * vehicle attribute_j + D * demographic attribute_i + ?_ij
In Equation 1, A, B, C, D are parameter coefficients of the utility function. Usually, they are calibrated by estimating a discrete choice model using customer satisfaction survey data. In order to test the robustness of this utility function, simulation of changing coefficient values within certain range are conducted. In other words, we can make small changes in coefficient values in the utility function to see whether it will lead to different customer choices. For price_j, coefficient A is negative, as customers prefer lower price. The brand_j variable represents the preference for different brands. The vehicle attribute_j can be expanded to a set of engineering attributes, e.g. front headroom of the driver seat. Similarly, the demographic attribute_i includes a set of characteristics of the respondents, such as age, gender, etc. The random term ?_ij follows a normal distribution with zero mean, which introduces uncertainty into the utility function.
In the midsize vehicle market model simulation, the fluctuations of transaction price are observed. At the beginning of each week, dealers adjust their selling price according to the sales in the last three weeks and their inventory level. Since price is an important factor in the utility function, different pricing strategy will have impact on the sales.
Moreover, this model can also be used to predict market share of manufacturers. Let�s assume that there are M automotive manufacturers in the midsize vehicle market. Each of them has one car model in the midsize market segment. Each car model has different vehicle attributes. At the beginning of simulation, manufacturers can determine the vehicle price and attributes by plugging in the value into corresponding input windows.
Furthermore, the process of how customers shift their choice from conventional vehicle to alternative fuel vehicle (we only consider hybrid cars) is another interesting focus in today�s market. Most of the automotive manufacturers have launched alternative fuel vehicles in the past few years. Although many customers have chosen alternative fuel vehicles, the majority are still driving conventional vehicles. There are many reasons behind their choices. Study shows that the much higher selling price and customers� uncertain attitude toward new technology are two of the most important reasons. Adding customers� attitudes towards �green vehicles� in the utility function, and allowing interactions between customers enable customers� shift from conventional cars to alternative fuel cars.
AGENTS
Cars
�Cars� turtles are cars for sale at each dealer. In current version, we assume that each manufacturer has only one car model in the midsize vehicle market segment. Therefore, the car turtles are not actually used at the moment. However, as they are critical in expanding the model to the multiple-car-model scenario, I decided to keep them in the model.
Cars are represented as little car shaped turtles with the color representing their brands. They have properties like �price� (selling price), �front headroom� (front headroom of the driver seat), �MPG� (stands for mileage per gallon), �green?� (true indicates it�s an alternative fuel car, false indicates it�s a conventional car), �sold?� (true indicates it�s sold, false indicates it�s still in market), and �brand� (brand).
Customers
�Customers� turtles are buyers in the market. Customers arrive at the market each week following a Poisson distribution. Individual customer characteristics are generated based on a predetermined distribution of age, gender, income, etc. Each customer visits four randomly selected dealers and purchases a car offered by the dealers in a week and then leaves the market. The decision making rule is to always pick the car that maximizes the utility.
Customers are represented as white little person in NetLogo world. They have properties like �home-x� (x coordinate value of home address), �home-y� (y coordinate value of home address), �age� (age), �gender� (1 for female and 0 for male), �income� (annual household income /10k), �c_hybrid� (preference for hybrid cars, 100 for potential adopters, 0 otherwise), �found-dealer?� (a local indicator for the use of visiting dealers), �early-adopters?� (an indicator for whether he/she owns a hybrid car), �potential-adopters?� (an indicator for whether he/she is influenced by neighbors who are early-adopters).
Dealers
�Dealers� turtle represents franchised dealers selling cars of a particular brand. They are spread out randomly in the world and cannot move during the simulation. At the beginning of each sales week, they can adjust their price according to the sales volume in the past 3 weeks and their inventory value. At the end of each sales week, they order new cars from the manufacturers.
Dealers are represented as house shaped turtles standing in the world. Their properties of interest includes: �BSC� (brand specific constants in the utility function, reflecting customers� preference in brands), �ccar-price� (selling price of the car they offer), �ccar-front-head-room� (front headroom dimension of the car they offer), �ccar-MPG� (mileage per gallon of the car they offer), �inventory� (inventory level), �sales-volume� (sales volume so far), �sales-volume-t� (sales volume this week), �sales-volume-t-1� (sales volume last week), �sales-volume-t-2� (sales volume 2 weeks ago), �revenue� (revenue so far), �revenue-t� (revenue this week), �utility� (value of utility function), �invoice price� (invoice price from the manufacturer), �order� (number of vehicles ordered from manufacturer), �hybrid?� (an indicator of whether it is a hybrid car dealer), �hybrid� (dummy variable of hybrid car dealer for the use in utility function).
Manufacturers
�Manufacturers� turtles are manufacturers in the vehicle market. Each manufacturer produces only one unique car model and has a couple of franchised dealers selling their cars. At the end of each sales week, manufacturers receive orders from their dealers and provide certain incentives, i.e. discount of invoice price, according to the order size.
Manufacturers are represented as car shaped turtles at the lower left corner of the world. Different color represents their brands. Their properties are interest includes: �sales-volume� (summation of sales volume over all their dealers), �revenue� (summation of revenue over all their dealers), �incentive-rate� (discount rate of invoice price they offer to the dealers)
RULES
If I am a customer, I arrive at the market at the beginning of each week following a Poisson distribution. My age, gender, and income are randomly generated. I wiggle around until to find a dealer. At the dealer, I�ll calculate the value of utility function of buying the car. Then I continue to wiggle around and repeat these steps until I visited as many dealers as I want. I will make a choice, i.e. buy from the dealer that maximizes my utility function. At the end I�ll go home and hide myself.
When the alternative fuel car option is turn on, if I am a customer and I am influenced by my early-adopter neighbors (the probability of me getting influenced by my neighbor is determined by the �adopt-rate� slider), I become a potential adopter, turn yellow, and have strong preference for hybrid car. If I decide to buy a hybrid car, I become an early adopter. If I do not buy a hybrid car, I will stay a majority buyer.
If I am a dealer, I will order new cars from manufacturers. I take the average sales volumes in the past three weeks as my order size, as shown in Equation 2. Then I�ll adjust my price at the end of each week. If the inventory level is larger than the maximum inventory, I�ll lower the price by 100 dollars; if the inventory level is less than the minimum inventory, I�ll increase the price by 100 dollars.
If I am a manufacturer, I will provide incentive to my dealers. The incentive rate is randomly generated from 0 to 1. The new invoice price is calculated by: invoice price_t+1=invoice price_t-incentive rate*(order-10). Any order size larger than 10 will induce a decrease in invoice price, vice versa.
Green people represent the early adopters, while the remaining are majority buyers. Yellow people represent the potential buyers, as they are influenced by their early adopter neighbors (most of them are hidden, so that we cannot see them).
On the left hand side, there are six sections. The procedure section contains �setup� button, �go forever� button, and �go once� button. The customers section contains �number-of-customers� slider and �choice-set-size� slider to set up the initial number of customers and choice set, respectively. The dealers section contains �number-of-dealers� slider, �show-price?� switch, �min-dealer-inventory� and �max-dealer-inventory� slider to set up initial number of dealers, turn on/off price label of the dealer, set up the minimum and maximum inventory level, respectively. The manufacturer section contains �number-of-manufacturer� slider and �show-incentive?� switch to set up the initial number of manufacturers and turn/off incentive label of the manufacturers, respectively. The alternative fuel car section includes �alternative-fuel?� switch and �adopt-rate� slider to turn on/off hybrid car option and change adopt-rate, respectively. In the results section on the lower left corner, brand market share and population percentage are plotted over time, together with four monitors of customer population construction, namely, early adopters, potential adopters, majority buyers, and total customers.
On the right hand side, a set of input windows are organized to initialize vehicle parameters including price, front headroom, and MPG. Before simulation, reasonable values are typed into each of the spots.
Click on SETUP button, several manufacturers are created in the market, each with its own unique brand color. Similarly dealers are created to representing each of the brands.
Click on GO or GO ONCE button, a new sales week starts. Customers arrive at the market, visit the dealers, make their choice and leave the market (become invisible). Dealers adjust their price and place order on new cars. Manufacturers give incentive to their dealers.
How does the market share respond to change in price?
How does the market share respond to change in vehicle attributes, for example front headroom?
How does the market share respond to change in MPG?
By turning on the alternative-fuel-car switch, you can explore customers' shift from conventional car to hybrid car. You can change the choice-set-size slider, the adopt-rate slider or change the attributes of hybrid car, and observe how this influences the population composition.
First, more comprehensive pricing strategy can be implemented into the model.
Second, multiple hybrid cars of different brand can be introduced to the market, competing with the conventional car of the same brand.
Third, alternative fuel station construction can be modeled, as availability of alternative fuel is a critical factor in the utility function.
globals [ brands A-brand B-brand C-brand D-brand E-brand F-brand G-brand H-brand p1 ; parameter 1 in utility function p2 ; parameter 2 in utility function p3 ; parameter 3 in utility function p4 ; parameter 4 in utility function p5 ; parameter 5 in utility function p6 ; parameter 6 in utility function p7 ; parameter 7 in utility function u_price u_fhr u_MPG u_age u_gender u_income u_hybrid temp-color plot-sales-volume A-sales-volume B-sales-volume C-sales-volume D-sales-volume E-sales-volume F-sales-volume G-sales-volume H-sales-volume total-sales-volume A-market-share B-market-share C-market-share D-market-share E-market-share F-market-share G-market-share H-market-share orders incentives local-hybrid %-MB ; percentage of majority-buyers in population %-EA ; percentage of early-adopters in population ] breed [cars car] breed [customers customer] breed [dealers dealer] breed [manufacturers manufacturer] cars-own [ price ; selling price, set by dealer at the beginning of each week front-head-room ; vehicle attributes - front headroom in the utility function MPG ; vehicle attributes - mileage per gallon in the utility function green? ; indicates whether it is an alternative fuel vehicle sold? ; status, true = sold, false = for sale brand ; brand, responding to manufacturer ] customers-own [ home-x ; home address x cor home-y ; home address y cor age ; age, from 20 to 80 gender ; gender, either female (1) or male (0) income ; annual household income, unit: 10k c_hybrid ; preference for hybrid cars, 100 for potential adopters, 0 otherwise found-dealer? ; indicates whether they found a dealer nearby early-adopters? ; indicates whether he/she owns a hybrid car potential-adopters? ; indicates wheterh he/she is influenced by neighbors who are early-adopters ] dealers-own [ BSC ; brand specific constants in utility function, reflecting customers' preference in brands ccar-price ; price of conventional car it offers ccar-front-head-room ; front headroom of conventional car it offers ccar-MPG ; MPG of conventional car it offeres inventory ; inventory level, number of cars at the dealers sales-volume ; sales volume so far sales-volume-t ; sales volume this week sales-volume-t-1 ; sales volume last week sales-volume-t-2 ; sales volume 2 weeks ago revenue ; revenue so far revenue-t ; revenue this week utility ; utility value invoice-price ; invoice price from manufacturer order ; number of vehicles ordered from manufacturer hybrid? ; indicates whether it is a hybrid car dealer hybrid ; dummy variable of hybrid car dealer for the utility function ] manufacturers-own [ sales-volume ; summation of sales volume over all dealers revenue ; summation of revenue over all dealers inventory ; inventory level incentive-rate ; discount rate of invoice price for dealers ] ;************************************************** ;****************** INITIALIZE ****************** ;************************************************** to setup clear-all ;; initialize parameters initialize ;; set up brands set brands [red green brown yellow blue pink grey turquoise] ; at most 8 brands in the model ;; initialize manufacturers set-default-shape manufacturers "car" let i 0 repeat number-of-manufacturers [ create-manufacturers 1 ask manufacturer i [ set size 1.5 setxy min-pxcor + 0.5 min-pycor - i + 8 ; align manufacturers in the lower left corner set color item i brands ] set i (i + 1) ] ;; create dealers set-default-shape dealers "house" ask n-of number-of-dealers patches [ sprout-dealers 1 [ set size 1.8 set color item random number-of-manufacturers brands ; set to different color representing different brands ifelse alternative-fuel? [ ifelse color = green [ set hybrid? true set hybrid 1 ] [ set hybrid? false set hybrid 0 ] ] [ set hybrid 0 ] set inventory random max-dealer-inventory ; set initial inventory levels set sales-volume 0 ; starts with zero sales set sales-volume-t 0 set sales-volume-t-1 0 set sales-volume-t-2 0 set revenue 0 set revenue-t 0 set invoice-price (19000 + random 1000) ;show inventory ; #debug set-up-vehicle-data ; set up vehicle data of each brand ] ] ;; create cars ; set-default-shape cars "car" ; update-variables set %-MB 100 set %-EA 0 ; setup-SD do-plots end ;******************************************* ;****************** RUN ****************** ;******************************************* to go ;; old customers leave the market ask customers [ set hidden? true ] ;; new customers enter the market initialize-customers ask customers with [not hidden?] [ ask dealers [ set utility -100000 ] ifelse alternative-fuel? [ if (potential-adopters? = true) and (random 100 < adopt-rate) [ set c_hybrid 10000 ] ] [ set c_hybrid 0 ] visit-dealers make-a-choice go-home ] set %-MB count customers with [not early-adopters?] / count customers * 100 set %-EA 100 - %-MB ;; at the end of each sales week ask dealers [ order-from-manufacturer adjust-price if show-price? [ set label ccar-price ] set sales-volume-t-2 sales-volume-t-1 set sales-volume-t-1 sales-volume-t set sales-volume-t 0 set revenue-t 0 ] ;; manufacturers gives incentives to dealers according to their order size ask manufacturers [ give-incentives if show-incentive? [ set label incentive-rate * 100 ] ] ; go-SD ;; updates variables update-variables tick do-plots end ;; initialize parameters to initialize set A-brand 0 set B-brand 0.1 set C-brand 0.2 set D-brand 0.3 set E-brand 0.4 set F-brand 0.5 set G-brand 0.6 set H-brand 0.7 set p1 1 set p2 0 - (1 / 20000) set p3 (1 / 40) set p4 (1 / 22.5) set p5 (1 / 50) set p6 (1 / 0.5) set p7 (1 / 10) end ; to set up vehicle attributes of each brand to set-up-vehicle-data ifelse color = red [ set BSC A-brand set ccar-price A-price set ccar-front-head-room A-front-head-room set ccar-MPG A-MPG ] [ ifelse color = green [ set BSC B-brand set ccar-price B-price set ccar-front-head-room B-front-head-room set ccar-MPG B-MPG ] [ ifelse color = brown [ set BSC C-brand set ccar-price C-price set ccar-front-head-room C-front-head-room set ccar-MPG C-MPG ] [ ifelse color = yellow [ set BSC D-brand set ccar-price D-price set ccar-front-head-room D-front-head-room set ccar-MPG D-MPG ] [ ifelse color = blue [ set BSC E-brand set ccar-price E-price set ccar-front-head-room E-front-head-room set ccar-MPG E-MPG ] [ ifelse color = pink [ set BSC F-brand set ccar-price F-price set ccar-front-head-room F-front-head-room set ccar-MPG F-MPG ] [ ifelse color = grey [ set BSC G-brand set ccar-price G-price set ccar-front-head-room G-front-head-room set ccar-MPG G-MPG ] [ set BSC H-brand set ccar-price H-price set ccar-front-head-room H-front-head-room set ccar-MPG H-MPG ] ] ] ] ] ] ] end to order-from-manufacturer set order (sales-volume-t + sales-volume-t-1 + sales-volume-t-2) / 3 set orders order ask manufacturers with [[color] of self = [color] of myself] [ set inventory (inventory - orders) ] set inventory (inventory + order) end to adjust-price if ccar-price > invoice-price + 500 [ ifelse inventory > max-dealer-inventory [ set ccar-price (ccar-price - 100) ] [ if inventory < min-dealer-inventory [ set ccar-price (ccar-price - 100) ] ] ] end to give-incentives set incentive-rate random 100 / 100 set incentives incentive-rate * 10 ask dealers with [[color] of self = [color] of myself] [ set invoice-price (invoice-price - incentives * (order - 10) ) ] end to initialize-customers set-default-shape customers "person" create-customers random-poisson number-of-customers [ setxy random-xcor random-ycor set home-x xcor set home-y ycor set color white ifelse random 100 < 50 [set gender 1] [set gender 0] set age (20 + random 60) set income (5 + random 10) set found-dealer? false set early-adopters? false ifelse any? customers in-radius 3 with [early-adopters? = true] [ set potential-adopters? true set color yellow ] [ set potential-adopters? false ] ] end ; customers visit the first 4 dealers they see to visit-dealers repeat choice-set-size [ while [not found-dealer?] [ wiggle if any? dealers-here with [inventory >= 1] [ set found-dealer? true ] ] calculate-utility set found-dealer? false ] end to wiggle forward random 3 rt (random 180 - 90) end ;; calculate utility for customer i and brand j to calculate-utility set u_age age set u_gender gender set u_income income set u_hybrid c_hybrid ask one-of dealers-here [ set utility ( p1 * BSC + p2 * ccar-price + p3 * ccar-front-head-room + p4 * ccar-MPG + p5 * u_age + p6 * u_gender + p7 * u_income + u_hybrid * hybrid + random-normal 0 1 ) ; if utility > 100 [show utility] ; here utility is a function of brand specific constants, car price, car frontheadroom, car MPG, customer age, customer gender, cusomter income and hybrid dummy, plus random error term. ] end ; customers make a choice among 4 cars to make-a-choice ask one-of dealers with-max [utility] [ if hybrid? = true [ set local-hybrid 1 ] set sales-volume (sales-volume + 1) set sales-volume-t (sales-volume-t + 1) set revenue (revenue + ccar-price) set revenue-t (revenue-t + ccar-price) ;show sales-volume set inventory (inventory - 1) ;show inventory ] if local-hybrid = 1 [ set early-adopters? true set potential-adopters? false set color green ] set local-hybrid 0 end to go-home setxy home-x home-y end to update-variables set total-sales-volume sum [sales-volume] of dealers ;show total-sales-volume ask manufacturer 0 [ set temp-color color set sales-volume sum [ sales-volume ] of dealers with [color = temp-color] set inventory sum [ inventory ] of dealers with [color = temp-color] set A-sales-volume sales-volume set A-market-share (A-sales-volume / total-sales-volume) * 100 ] ask manufacturer 1 [ set temp-color color set sales-volume sum [ sales-volume ] of dealers with [color = temp-color] set inventory sum [ inventory ] of dealers with [color = temp-color] set B-sales-volume sales-volume set B-market-share (B-sales-volume / total-sales-volume) * 100 ] ask manufacturer 2 [ set temp-color color set sales-volume sum [ sales-volume ] of dealers with [color = temp-color] set inventory sum [ inventory ] of dealers with [color = temp-color] set C-sales-volume sales-volume set C-market-share (C-sales-volume / total-sales-volume) * 100 ] ask manufacturer 3 [ set temp-color color set sales-volume sum [ sales-volume ] of dealers with [color = temp-color] set inventory sum [ inventory ] of dealers with [color = temp-color] set D-sales-volume sales-volume set D-market-share (D-sales-volume / total-sales-volume) * 100 ] ask manufacturer 4 [ set temp-color color set sales-volume sum [ sales-volume ] of dealers with [color = temp-color] set inventory sum [ inventory ] of dealers with [color = temp-color] set E-sales-volume sales-volume set E-market-share (E-sales-volume / total-sales-volume) * 100 ] ask manufacturer 5 [ set temp-color color set sales-volume sum [ sales-volume ] of dealers with [color = temp-color] set inventory sum [ inventory ] of dealers with [color = temp-color] set F-sales-volume sales-volume set F-market-share (F-sales-volume / total-sales-volume) * 100 ] ask manufacturer 6 [ set temp-color color set sales-volume sum [ sales-volume ] of dealers with [color = temp-color] set inventory sum [ inventory ] of dealers with [color = temp-color] set G-sales-volume sales-volume set G-market-share (G-sales-volume / total-sales-volume) * 100 ] ask manufacturer 7 [ set temp-color color set sales-volume sum [ sales-volume ] of dealers with [color = temp-color] set inventory sum [ inventory ] of dealers with [color = temp-color] set H-sales-volume sales-volume set H-market-share (H-sales-volume / total-sales-volume) * 100 ] end to do-plots set-current-plot "market-share" set-current-plot-pen "1" plot A-market-share set-current-plot-pen "2" plot B-market-share set-current-plot-pen "3" plot C-market-share set-current-plot-pen "4" plot D-market-share set-current-plot-pen "5" plot E-market-share set-current-plot-pen "6" plot F-market-share set-current-plot-pen "7" plot G-market-share set-current-plot-pen "8" plot H-market-share set-current-plot "populations" set-current-plot-pen "early-adopters" plot %-EA set-current-plot-pen "majority-buyers" plot %-MB end ;************************************************** ;************* System Dynamics ****************** ;************************************************** ;to setup-SD ; set-current-plot "populations" ; clear-plot ; ;; call procedure generated by aggregate modeler ; system-dynamics-setup ; system-dynamics-do-plot ;end ; ;to go-SD ; system-dynamics-go ; set-current-plot "populations" ; system-dynamics-do-plot ;end