# ecar

No preview image

Model was written in NetLogo 6.1.0
•
Viewed 72 times
•
Downloaded 12 times
•
Run 0 times

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

## Comments and Questions

Please start the discussion about this model!
(You'll first need to log in.)

Click to Run Model

;; 2 semicolon ha tozihat satr hastand (ghabel hazf hastand) ;; 1 semikolon ha dar barname taghyir ijad mikonad breed [consumers consumer] globals[ pop-level-1 pop-level-2 pop-level-3 TR sen-random temp-feature-D temp-price-D temp-promo-D temp-place-D temp-feature-F temp-price-F temp-promo-F temp-place-F s ] consumers-own [ ;social-level ***************************************** be kar narafte ast price-sen feature-sen promo-sen SI-sen PRE-1 PRE-2 PRE buy-ok feature-index-D price-index-D promo-index-D SI-index-D feature-index-F price-index-F promo-index-F SI-index-F t ;;reset buy-ok after 100 tick ;;social: adoptee-neighbors random-thresh p; change: exogenouce factors p1 p2 p3 p4 q; change: endogenouce factors ] patches-own [ feature-D price-D promo-D SI-D feature-F price-F promo-F SI-F ] to setup clear-all goods ;;goods = patches setup-pa ;index ask consumers [ set p1 random-normal 4 3 ;p1-mean p1-SD ; entekhab adadi ba miangin p1-mean va enheraf meyar p1-SD set p2 random-normal 4 3 ;p2-mean p2-SD set p3 random-normal 4 3 ;p3-mean p3-SD set p4 random-normal 4 3 ;p4-mean p4-SD set p (p1 + p2 + p3 + p4) / 4 ] ; change p can be replaced by latent-thresh ask consumer random total-population [set color red] reset-ticks end to go if not any? consumers [ stop ] if ticks = maxticks [stop] change consumer-move social-interact ;;social: update-local-search decide-adopt index preferences tick end to consumer-move ask consumers [ rt random 90 lt random 90 fd 1 ] end to index ask consumers[ if pcolor = blue [ set feature-index-D feature-sen * battry-distance set price-index-D -1 * price-sen * charge-time set promo-index-D promo-sen * max-speed set SI-index-D SI-sen * charge-cost set PRE-1 feature-index-D + price-index-D + promo-index-D + SI-index-D ;si-sen baraye meghdar avaliye ast va badan SI-index nashi az interact ezafe mishavad. ] if pcolor = yellow[ ;Foreign set feature-index-F feature-sen * battry-distance2 set price-index-F -1 * price-sen * charge-time2 set promo-index-F promo-sen * max-speed2 set SI-index-F SI-sen * charge-cost2 set PRE-2 feature-index-F + price-index-F + promo-index-F + SI-index-F ] set PRE max (list PRE-1 PRE-2) ] end to make-node [old-node] ;set-default-shape consumers "person" set total-population total-population set darsad-taxi-driver darsad-taxi-driver set darsad-employee darsad-employee set darsad-engineer darsad-engineer if (darsad-taxi-driver + darsad-employee + darsad-engineer) != 1[ show "error: population percent is not true"] set pop-level-1 darsad-taxi-driver * total-population set pop-level-2 darsad-employee * total-population set pop-level-3 darsad-engineer * total-population let clist [] let c1 count consumers with [label = 1] let c2 count consumers with [label = 2] let c3 count consumers with [label = 3] if c1 <= pop-level-1 [set clist lput 1 clist ] if c2 <= pop-level-2 [set clist lput 2 clist] if c3 <= pop-level-2 [set clist lput 3 clist] if clist = [] [set clist lput 1 clist ] let c one-of clist if c = 1 [ ;;level-1 Groups: create-consumers 1[ set label 1 setxy random-xcor random-ycor ;;;social;;; set color red if old-node != nobody [ create-link-with old-node [ set color green ] ;; position the new node near its partner move-to old-node fd 8 ] ;;social;; set sen-random random-normal sen-batry1 0.065624 set feature-sen sen-random set sen-random random-normal sen-charget1 0.183302 set price-sen sen-random set sen-random random-normal sen-speed1 0.024031 set promo-sen sen-random set sen-random random-normal sen-chargCost1 0.083501 set SI-sen sen-random set PRE-1 feature-index-D + price-index-D + promo-index-D + SI-index-D set PRE-2 feature-index-F + price-index-F + promo-index-F + SI-index-F set buy-ok 0 set t 0 set size 0.75 ] ] if c = 2 [ ;;level-2 Groups: create-consumers 1 [ set label 2 setxy random-xcor random-ycor ;;;social;;; set color red if old-node != nobody [ create-link-with old-node [ set color green ] ;; position the new node near its partner move-to old-node fd 8 ] ;;social;; set sen-random random-normal sen-batry2 0.026539 set feature-sen sen-random set sen-random random-normal sen-charget2 0.11829 set price-sen sen-random set sen-random random-normal sen-speed2 0.046191 set promo-sen sen-random set sen-random random-normal sen-chargCost2 0.149441 set SI-sen sen-random set PRE-1 feature-index-D + price-index-D + promo-index-D + SI-index-D set PRE-2 feature-index-F + price-index-F + promo-index-F + SI-index-F set buy-ok 0 set t 0 set size 0.75 ] ] if c = 3 [ ;;level-3 Groups: create-consumers 1 [ set label 3 setxy random-xcor random-ycor ;set color white - 5 ;;;social;;; set color red if old-node != nobody [ create-link-with old-node [ set color green ] ;; position the new node near its partner move-to old-node fd 8 ] ;;social;; set sen-random random-normal sen-batry3 0.021685 set feature-sen sen-random set sen-random random-normal sen-charget3 0.196543 set price-sen sen-random set sen-random random-normal sen-speed3 0.18422 set promo-sen sen-random set sen-random random-normal sen-chargCost3 0.044505 set SI-sen sen-random set PRE-1 feature-index-D + price-index-D + promo-index-D + SI-index-D set PRE-2 feature-index-F + price-index-F + promo-index-F + SI-index-F set buy-ok 0 set t 0 set size 0.75 ] ] set c1 0 set c2 0 set c3 0 set clist [] ;ask consumers [set buy-ok 0 set t 0 set size 0.75] ;ask consumer random total-population [set color red] ;;social end to goods ask patches [ set pcolor gray if random 100 < 3 and pcolor = gray [set pcolor blue ] ;; 3 % khanehaye patch abi rang (Domestic) mishavand. if random 100 < 3 and pcolor = gray [set pcolor yellow ] ;; 3 % khanehaye patch abi rang (Foreign) mishavand. ] ask patches [ if pcolor = blue[ ;Goods inputs ;;Domestic Goods set battry-distance battry-distance set temp-feature-D battry-distance set charge-time charge-time set temp-price-D charge-time set max-speed max-speed set temp-promo-D max-speed set charge-cost charge-cost set temp-place-D charge-cost ] ;foreign Goods if pcolor = yellow [ set battry-distance2 battry-distance2 set temp-feature-F battry-distance2 set charge-time2 charge-time2 set temp-price-F charge-time2 set max-speed2 max-speed2 set temp-promo-F max-speed2 set charge-cost2 charge-cost2 set temp-place-F charge-cost2 ] ] end to change ;;goods parameters change ask patches [ if temp-feature-D != battry-distance [set battry-distance battry-distance set temp-feature-D battry-distance set s 1] if temp-price-D != charge-time [set charge-time charge-time set temp-price-D charge-time set s 1] if temp-promo-D != max-speed [set max-speed max-speed set temp-promo-D max-speed set s 1] if temp-place-D != charge-cost [set charge-cost charge-cost set temp-place-D charge-cost set s 1] if temp-feature-F != battry-distance2 [set battry-distance2 battry-distance2 set temp-feature-F battry-distance2 set s 1] if temp-price-F != charge-time2 [set charge-time2 charge-time2 set temp-place-F charge-time2 set s 1] if temp-promo-F != max-speed2 [set max-speed2 max-speed2 set temp-promo-F max-speed2 set s 1] if temp-place-F != charge-cost2 [set charge-cost2 charge-cost2 set temp-place-F charge-cost2 set s 1] ] end to preferences ;SI-prosseces ask consumers [if buy-ok != 0 [set t t + 1]] ;if t = 50 [set buy-ok 0]] set TR random-normal adoption-threshold 0.1 ask consumers [ ;set TR random-normal adoption-threshold 1 if s = 1 [ change ask consumers [ set PRE-1 feature-index-D + price-index-D + promo-index-D + SI-index-D set PRE-2 feature-index-F + price-index-F + promo-index-F + SI-index-F set PRE max(list PRE-1 PRE-2) ] ] ;] ;set TR adoption-threshold ;ask consumers [ if buy-ok = 0[ if pcolor = blue or pcolor = yellow [ ;;if moshtari rooye khaneyi (patch) bashad k kala hast. ifelse PRE-1 >= TR and PRE-2 >= TR [ ;set PRE max (list PRE-1 PRE-2) ifelse PRE >= TR [ if PRE = PRE-1 [set buy-ok 1 beep] if PRE = PRE-2 [set buy-ok 2 beep] ] [show "Error when PRE calculate" stop] ] [ ;;else if PRE-1 < TR and PRE-2 < TR [ set buy-ok 0 ;set color white ;;buy-ok : 2 for foreign , 1 for Domestic ] if PRE-1 >= TR [ ;;******** sath income ra be nahvi bayad vared konim va buy-ok ra sefr gharar dahim. sath income ra be mizan entezar dar amad (vam o ...) niz vabaste konam set buy-ok 1 ;set color yellow + 2 beep ] if PRE-2 >= TR[ set buy-ok 2 ;set color white beep ] ] ] ] ;if buy-ok != 0 [set t t + 1] ;if t = 50 [set buy-ok 0] ] end ;;;;;;;;;;;;;;;;;;;;; ;;;Social Function;;; ;;;;;;;;;;;;;;;;;;;;; to setup-pa ;set-default-shape consumers "person" ;; make the initial network of two consumers and an edge make-node nobody ;; first node, unattached make-node consumer 0 ;; second node, attached to first node repeat total-population [ go-pa ] ask consumers [set color white] ask links [set color yellow] reset-ticks ask consumers [ set q count link-neighbors] ; change: calculating the degree of centrality of each node ask consumers [ set q count link.... end to go-pa ask links [ set color yellow ] make-node find-partner ;; find partner & use it as attachment ;; point for new node ;tick if layout? [layout-pa] end to-report find-partner let total random-float sum [count link-neighbors] of consumers let partner nobody ask consumers [ let nc count link-neighbors ;; if there's no winner yet... if partner = nobody [ ifelse nc > total [ set partner self ] [ set total total - nc ] ] ] report partner end to social-interact ask consumers [ set PRE-1 PRE-1 - SI-index-D set PRE-2 PRE-2 - SI-index-F ] ask consumers with [ label = 1] [ let SI-index-1 0 ask link-neighbors with [label = 1] [ set SI-index-1 SI-index-1 + 0.4 * sen-chargCost1] ask link-neighbors with [label = 2] [ set SI-index-1 SI-index-1 + 0.5 * sen-chargCost2] ask link-neighbors with [label = 3] [ set SI-index-1 SI-index-1 + 0.1 * sen-chargCost3] set SI-index-D (SI-index-D + SI-index-1) / count link-neighbors * charge-cost set SI-index-F (SI-index-F + SI-index-1) / count link-neighbors * charge-cost2 set PRE-1 PRE-1 + SI-index-D set PRE-2 PRE-2 + SI-index-F ] ;;;;;; label 2 ask consumers with [ label = 2] [ let SI-index-2 0 ask link-neighbors with [label = 1] [ set SI-index-2 SI-index-2 + 0.3 * sen-chargCost1] ask link-neighbors with [label = 2] [ set SI-index-2 SI-index-2 + 0.4 * sen-chargCost2] ask link-neighbors with [label = 3] [ set SI-index-2 SI-index-2 + 0.3 * sen-chargCost3] set SI-index-D (SI-index-D + SI-index-2) / count link-neighbors * charge-cost set SI-index-F (SI-index-F + SI-index-2) / count link-neighbors * charge-cost2 set PRE-1 PRE-1 + SI-index-D set PRE-2 PRE-2 + SI-index-F ] ;;;;;; label 3 ask consumers with [ label = 3] [ let SI-index-3 0 ask link-neighbors with [label = 1] [ set SI-index-3 SI-index-3 + 0.1 * sen-chargCost1] ask link-neighbors with [label = 2] [ set SI-index-3 SI-index-3 + 0.3 * sen-chargCost2] ask link-neighbors with [label = 3] [ set SI-index-3 SI-index-3 + 0.6 * sen-chargCost3] set SI-index-D (SI-index-D + SI-index-3) / count link-neighbors * charge-cost set SI-index-F (SI-index-F + SI-index-3) / count link-neighbors * charge-cost2 set PRE-1 PRE-1 + SI-index-D set PRE-2 PRE-2 + SI-index-F ] end ;;;;;;;;;;;;;; ;;; Layout ;;; ;;;;;;;;;;;;;; to layout if not layout? [ stop ] ;; the number 10 here is arbitrary; more repetitions slows down the ;; model, but too few gives poor layouts repeat 10 [ do-layout display ;; so we get smooth animation ] end to do-layout layout-spring (consumers with [any? link-neighbors]) links 0.4 6 1 end ;;;;;;;;;;;;;; ;;; Layout ;;; ;;;;;;;;;;;;;; ;; resize-nodes, change back and forth from size based on degree to a size of 1 to resize-nodes ifelse all? consumers [size <= 1] [ ;; a node is a circle with diameter determined by ;; the SIZE variable; using SQRT makes the circle's ;; area proportional to its degree ask consumers [ set size sqrt count link-neighbors ] ] [ ask consumers [ set size 1 ] ] end to layout-pa ;; the number 3 here is arbitrary; more repetitions slows down the ;; model, but too few gives poor layouts repeat 3 [ ;; the more consumers we have to fit into the same amount of space, ;; the smaller the inputs to layout-spring we'll need to use let factor sqrt count consumers ;; numbers here are arbitrarily chosen for pleasing appearance layout-spring consumers links (1 / factor) (7 / factor) (1 / factor) display ;; for smooth animation ] ;; don't bump the edges of the world let x-offset max [xcor] of consumers + min [xcor] of consumers let y-offset max [ycor] of consumers + min [ycor] of consumers ;; big jumps look funny, so only adjust a little each time set x-offset limit-magnitude x-offset 0.1 set y-offset limit-magnitude y-offset 0.1 ask consumers [ setxy (xcor - x-offset / 2) (ycor - y-offset / 2) ] end to-report limit-magnitude [number limit] if number > limit [ report limit ] if number < (- limit) [ report (- limit) ] report number end to update-local-search ask consumers [ set adoptee-neighbors count link-neighbors with [color = red] ;set label adoptee-neighbors set label-color 45 - adoptee-neighbors ];green ] end to decide-adopt ;; adoption means to turn red ;; based on comparing a random number between 0 and 100 to the various effects ;; these effects, in total, must exceed the random num for diffusion to occur let nadopt count consumers with [color = red] ask consumers [ ;set shape "person" if color = white [ set random-thresh random 100 if random-thresh < p + ( q * (nadopt / number-of-nodes ) ) + ( adoptee-neighbors * cohesion-effect ) [ ; if random-thresh < constant-effect + ( endogenous-effect * (nadopt / number-of-nodes ) ) + ( adoptee-neighbors * cohesion-effect ) [ set color red set shape "person"] ;; adopt if random number (0-100) is lower than ;; constant hazard + proportion adopted * endogenous hazard ;; note, cohesion-fx doesn't seem to work yet ] ] end

There are 2 versions of this model.

## Attached files

No files

This model does not have any ancestors.

This model does not have any descendants.