320 likes | 496 Views
Agent-Based Modeling and Simulation (ABMS) Bertan Badur badur@boun.edu.tr Department of Management Information Systems Boğaziçi University. Thetelemarketer Model. Chapter 13, 14, of Agent-Based and Individual-Based Modeling: A Practical Introduction , by S. F. Railsback and V. Grimm
E N D
Agent-Based Modeling and Simulation (ABMS) Bertan Badur badur@boun.edu.tr Department of Management Information Systems Boğaziçi University
Thetelemarketer Model • Chapter 13, 14, of Agent-Based and Individual-Based Modeling: A Practical Introduction,by S. F. Railsback and V. Grimm • NetLogo User Menual
Outline • 13.
4. The Telemarketer Model • ODD Description • Purpose • Entitie, States Variables, and Scales • patches – poterntial customers • called in one time step – boolean – color black or red • turtles – telemarketers • location – xcor, ycor • size – staff, telephone,... • bank-balance – money • Time – weeks 200 steps • no wraping in x and y, max-x 200, max-y 200
NetLogo Code globals [n-telemar] turtles-own [bank-bal] to setup ca set n-telemar 200 crt n-telemar [ set bank-bal 0.0 ] reset-ticks end to go tick if ticks > 200 [stop] end
Process Overview and Scheduling (1) • For actions in each time step • First: set calling “no” – with a color • Second: sales – make sales • order is important – each time random • call customers in radius proportional with size • if a customer not called previously in the same week • then buy • else not buy
Process Overview and Scheduling (1) • Third: accounting • revenue form sales • fixed cost proportionla with size • update bank balance • updete size if bank balance is high enough • die if bank balance is lessw then 0 • Forth: output • marketers in business at each time • size distribution and total sales
NetLogo Code - go to go tick if ticks > 200 [stop] ask patches [set pcolor black] ask turtles [ sales account ] output end
NetLogo Code - submodels to sales end to account end to output end
Design Concepts • Basic principles • Emergence • Adaptive behavior • Prediction • Sensing • Interraction • Stochasticity • Observation
Initialization • Telemarketers: • bank balance 0.0 • size 1.0 • color random • lacation random • chape circle • Potential customers: • called no – color black
NetLogo code to setup ca set n-telemar 200 crt n-telemar [ set bank-bal 0.0 set sıze 1.0 setxy random-xcor random-ycor set shape "circle" ] ask patches [ set pcolor black ] reset-ticks end
Submodels - sales • radius: 10 times square root of size • max number of calls: 100 times size • if potential cust > nax number of calls • select nax number of calls of them • else • select all of them • if poterntial customer is not called • sell to the poterntial customers • change its call to yes – color to red
NetLogo code - sales to sales let radius 10 * sqrt sıze let max-call floor ( 100 * sıze ) let pot-custs patches in-radius radius if count pot-custs > max-call [ set pot-custs n-of max-call pot-custs ] ask pot-custs [ if pcolor = black [ set pcolor red ] ] end .
Submodels - account • cost: 50 times size • income: 2 times succesful sales • update bank balance • if bank balance is greater then growth param • bank balance – growth param is used to increase size • size is added: excess money times 0.001 • if size less then zero • the telemarketer goes out of business
NetLogo code - updates globals [n-telemar growth-param size-param ] turtles-own [bank-bal n-sales] to setup ca set growth-param 1000 set size-param 0.001 • add tot the sales set n-sales count pot-custs with [pcolor = black] ...
NetLogo code - account to account let cost 50 * sıze let income 2 * n-sales set bank-bal bank-bal + income - cost if bank-bal > growth-param [ set sıze sıze + size-param * ( bank-bal - growth-param ) set bank-bal 1000 ] if bank-bal < 0 [ die ] end
Submodels - output • number of telemarketers • size and bank balance distribution
add a ploter plot count turtles
5. Direct Interraction: Mergers in the Telemarketing Model • update balance depends on have a parent or not • if bank balance less then zero and not have a parent • select a parent with • size greater then ist own size and • bank balance greater then its deficit • or go out of business • if balance < 0 and have a parent • get subsidize or die
netLogo code – account modififed to account let cost 50 * sıze let income 2 * n-sales let profit income - cost ifelse parent != nobody [ set bank-bal bank-bal + 0.5 * profit ask parent [set bank-bal 0.5 * profit ] ] [ set bank-bal bank-bal + profit ] if bank-bal > growth-param [ set sıze sıze + size-param * ( bank-bal - growth-param ) set bank-bal 1000 ]
netLogo code – account modififed if bank-bal < 0 and parent != nobody [ output-show parent let bank-bal-par [bank-bal] of parent ifelse bank-bal-par > ( -1 * bank-bal ) [ ask parent [set bank-bal bank-bal + [bank-bal] of myself ] set bank-bal 0.0 ] [die stop] ]
netLogo code – account modififed if bank-bal < 0 and parent = nobody [ let pot-parents other turtles with [ sıze > [sıze] of myself and bank-bal > -1 * [bank-bal] of myself ] ifelse any? pot-parents [ set parent one-of pot-parents ask parent [set bank-bal bank-bal + [bank-bal] of myself ] set bank-bal 0 ] [die stop] ] end
updates turtles-own [bank-bal n-sales parent] crt to setup ... crt n-telemar [ ... set parent nobody
Using links to reach parents • if aparent set a directed link
NetLogo code -account to account let cost 50 * sıze let income 2 * n-sales let profit income - cost ifelse any? my-out-links [ set bank-bal bank-bal + 0.5 * profit ask one-of out-link-neighbors [set bank-bal 0.5 * profit ] ] [ set bank-bal bank-bal + profit ] if bank-bal > growth-param [ set sıze sıze + size-param * ( bank-bal - growth-param ) set bank-bal 1000 ]
NetLogo code -account if bank-bal < 0 and any? my-out-links [ let bank-bal-par [bank-bal] of one-of out-link-neighbors ifelse bank-bal-par > ( -1 * bank-bal ) [ ask one-of out-link-neighbors [set bank-bal bank-bal + [bank-bal] of myself ] set bank-bal 0.0 ] [die stop] ]
NetLogo code -account if bank-bal < 0 and not any? my-out-links [ let pot-parents other turtles with [ sıze > [sıze] of myself and bank-bal > -1 * [bank-bal] of myself ] ifelse any? pot-parents [ create-link-to one-of pot-parents ask one-of out-link-neighbors [set bank-bal bank-bal + [bank-bal] of myself ] set bank-bal 0 ] [die stop] ] end
6. The Customers Fight Back: Remembering Who Cslled • custmers talernce limit • if cals from a marketer exceeds taht limit • reject call
NetLogo code - sales to sales let radius 10 * sqrt sıze let max-call floor ( 100 * sıze ) let pot-custs patches in-radius radius if count pot-custs > max-call [ set pot-custs n-of max-call pot-custs ] set pot-custs pot-custs with [pcolor = black] set pot-custs pot-custs with [ accept-call myself] set n-sales count pot-custs ask pot-custs [ set pcolor red ] end
NetLogo code – accept-call to-report accept-call [marketer] let num-calls length filter [? = marketer] caller-list set caller-list fput marketer caller-list report num-calls <= tol-lim end
NetLogo code – initilalizations patches-own [caller-list tol-lim] to setpu ... ask patches [ set pcolor black set tol-lim 5 + random 16 set caller-list [] ] end