8 -GINI系数计算与 如何使用行为空间做实验
 
 
首先,我们加入保底机制。
对于每一个agent,都有一个随机的保底比例 s(每个agent的 s 不都一样,且s初始化之后不会改变)
进行交易时,双方会保留一部分的财富作为保底财富,只拿一部分出来交易。
 
 
 
GINI系数的计算
它是以下图中 S 面积的两倍。
用积分的思想,底乘高
( i/num_ag ents)* (wealth_so_far/total_wealth)
 
 
经过修改后的模型代码:
turtles-own [
money
save_rate ;; 新增了一个保底比例
] to setup clear-all
create-turtles agent_num[
setxy random-xcor random-ycor
set money (total_money / agent_num)
set save_rate random-float ;;对于每一个人来说,这个保底比例不一样 ]
reset-ticks
end to go
ask turtles[
let agsets other turtles-here
if count agsets >= [
transaction (one-of agsets)
]
forward
]
tick
end to transaction [trader]
let deltam
let money1 ([money] of trader)
let epsilon (random-float )
set deltam (epsilon - ) * money + epsilon * money1
if money + deltam >= and money1 - deltam >=
[
set money money + deltam
ask trader[
set money money1 - deltam
] ]
end to go2
ask turtles[
let agsets other turtles-here
if count agsets >= [
transaction2 (one-of agsets)
]
forward
]
tick
end to transaction2 [trader] ;; go2 按钮调用的函数
let deltam
let money0 ( ( - save_rate) * money) ;; 自己拿出来交易的财富
let money1 ( ( - ([save_rate] of trader)) * ( [money] of trader)) ;; 另外一个人拿出来交易的财富
let epsilon (random-float ) ;; 随机分割财富的系数
set deltam (epsilon - ) * money0 + epsilon * money1
if money + deltam >= and ([money] of trader) - deltam >=
[
set money money + deltam
ask trader[
set money money - deltam
] ]
end to to-update-plot
 let lst [money] of turtles
 set-histogram-num-bars
 if not empty? lst [
set-plot-x-range max lst
histogram lst
] end to save-file
file-open "ag.txt"
let wealths""
ask turtles[
set wealths (word wealths money "\r\n")
]
file-print wealths
file-close
end to lorenz-plot
clear-plot
set-current-plot-pen "equal"
plot
plot set-current-plot-pen "dominant"
plot-pen-down
plotxy
plotxy
plotxy
plot-pen-up set-current-plot-pen "lorenz"
set-plot-pen-interval / agent_num
plot let sorted-wealths sort [money] of turtles
let total-weath sum sorted-wealths
let weath-sum-so-far
let index
let gini-s ;;
repeat agent_num [
set weath-sum-so-far (weath-sum-so-far + item index sorted-wealths)
plot (weath-sum-so-far / total-weath)
set index (index + ) set gini-s gini-s + ((index / agent_num) - (weath-sum-so-far / total-weath)) / agent_num
;; ]
set-current-plot "吉尼系数"
 plot gini-s *
end to-report compute-gini ;;行为空间调用的重复函数
let sorted-wealths sort [money] of turtles
let total-weath sum sorted-wealths
let weath-sum-so-far
let index
let gini-s
repeat agent_num [
set weath-sum-so-far (weath-sum-so-far + item index sorted-wealths)
plot (weath-sum-so-far / total-weath)
set index (index + ) set gini-s gini-s + ((index / agent_num) - (weath-sum-so-far / total-weath)) / agent_num ]
set-current-plot "吉尼系数"
 report gini-s *
end
 
 
 
行为空间
用处:
  • 为了找出哪组参数控制下的 某个参数最高,我们需要重复实验,但是手动太麻烦了,我们可以用netlogo 自带的 “行为空间” 工具
新建一个行为空间
 
  • 实验名称
  • 组合起来不同的参数。
有两种方法:
1. 列出参数的取值;
示例: [ "para" 1, 3 ,8 ,9 ]
2. 指定参数的 初值、增量、终值(需要额外的中括号)。
示例: ["agent_num" [10 10 100]]
  • 对于每一组参数的实验,需要 重复多次
  • 调用报告函数 ,这个函数负责绘制每一组参数下的 gini 系数
  • 设置每一次实验的 终止时间步数
 
  • 实时更新 视图
  • 实时更新 绘图 和 监视器
  • 最大并行运算数
  • 然后会让你选择需要存放 csv 数据表格的目录
  • 取消 这两项实时更新的话,数据会跑的比之前快很多
 
 
行为空间的函数:
to-report compute-gini ;; 这个函数是需要输出的
let sorted-wealths sort [money] of turtles
let total-weath sum sorted-wealths
let weath-sum-so-far
let index
let gini-s
repeat agent_num [
set weath-sum-so-far (weath-sum-so-far + item index sorted-wealths)
plot (weath-sum-so-far / total-weath)
set index (index + ) set gini-s gini-s + ((index / agent_num) - (weath-sum-so-far / total-weath)) / agent_num ]
set-current-plot "吉尼系数"
 report gini-s *
end
 
 

《Netlogo多主体建模入门》笔记8的更多相关文章

  1. 《Netlogo多主体建模入门》笔记 2

    从自带的模型库开始     财富分配模型 黄色代表稻谷,有的人消化快,有的慢,稻谷的积累代表财富的积累,不涉及交易行为.   点击setup后 ,点击 go   红线--穷人: 绿线-- 中产 : 蓝 ...

  2. 《Netlogo多主体建模入门》笔记4

    4- 从Langton的蚂蚁看Turtle与Patch的交互   这只蚂蚁从10000步开始,就会自发地 “建桥”     Turtle与Patch就好比是,一个方块和一个格子的关系. 一个格子上可以 ...

  3. 《Netlogo多主体建模入门》笔记3

    3- 用“生命游戏”认识Patch     代码:   patches-own[living] to setup clear-all ask patches [ < 0.3[ set pcolo ...

  4. 每天成长一点---WEB前端学习入门笔记

    WEB前端学习入门笔记 从今天开始,本人就要学习WEB前端了. 经过老师的建议,说到他每天都会记录下来新的知识点,每天都是在围绕着这些问题来度过,很有必要每天抽出半个小时来写一个知识总结,及时对一天工 ...

  5. ES6入门笔记

    ES6入门笔记 02 Let&Const.md 增加了块级作用域. 常量 避免了变量提升 03 变量的解构赋值.md var [a, b, c] = [1, 2, 3]; var [[a,d] ...

  6. [Java入门笔记] 面向对象编程基础(二):方法详解

    什么是方法? 简介 在上一篇的blog中,我们知道了方法是类中的一个组成部分,是类或对象的行为特征的抽象. 无论是从语法和功能上来看,方法都有点类似与函数.但是,方法与传统的函数还是有着不同之处: 在 ...

  7. React.js入门笔记

    # React.js入门笔记 核心提示 这是本人学习react.js的第一篇入门笔记,估计也会是该系列涵盖内容最多的笔记,主要内容来自英文官方文档的快速上手部分和阮一峰博客教程.当然,还有我自己尝试的 ...

  8. redis入门笔记(2)

    redis入门笔记(2) 上篇文章介绍了redis的基本情况和支持的数据类型,本篇文章将介绍redis持久化.主从复制.简单的事务支持及发布订阅功能. 持久化 •redis是一个支持持久化的内存数据库 ...

  9. redis入门笔记(1)

    redis入门笔记(1) 1. Redis 简介 •Redis是一款开源的.高性能的键-值存储(key-value store).它常被称作是一款数据结构服务器(data structure serv ...

随机推荐

  1. 什么是redis事务

    一.什么是redis事务? 可以一次性执行多条命令,本质上是一组命令的集合.一个事务中的所有命令都会序列化,然后按顺序地串行化执行,而不会被插入其他命令 二.Redis 事务可以做什么? 一个队列中, ...

  2. git合并分支到主干

    1.从当前分支切换主干 git checkout master 2.更新主干内容到本地 git pull 4.提交分支,并将分支merge到主干 git merge dev 5: i键后输入备注  输 ...

  3. Navigating to current location ("/") is not allowed

    main.js import Router from 'vue-router' // 这个是为了避免一个报错 const originalPush = Router.prototype.push; R ...

  4. StringBuilder为什么线程不安全(面试必问)

    文章转载自:https://juejin.im/post/5d6228046fb9a06add4e37fe 作者:千山qianshan 1.引言 周五去面试又被面试的一个问题问哑巴了 面试官:Stri ...

  5. jsp页面 将数据以Json 格式保存到数据库

    1:jsp页面 <div class="control-group form-group all_activity"> <c:choose> <c:w ...

  6. 线程安全Collections.synchronizedList

    ollections.synchronizedList引发的线程安全问题 有些容器是线程安全的(Vector,ConcurrentLinkedQueue等),有些则不是(list等),利用类 似 pr ...

  7. 在idea中设置指向源代码(scala)

    1.到官网下载scala源代码 点击如下链接下载源码:http://www.scala-lang.org/download/all.html 选择需要的版本点击进行下载,我选择的是2.11.8版本,如 ...

  8. 通过修改select的value值

    1 <input type="button" id="btn" value="按钮"/> 2 <select name=& ...

  9. Autoit里用多进程模拟多线程

      一直以来Autoit都不支持多线程,因此一些需要同时运行多个循环的操作也就无法实现.这个问题在其它的某些语言里也经常出现,解决的方法就是使用多进程. 所谓多进程,就是同时运行多个子进程,每个子进程 ...

  10. Linux之系统优化配置

    Linux系统优化配置 更新国内镜像源 国内速度快的常用更新源如下: ​ http://mirrors.sohu.com ​ http://mirrors.163.com [root@greymous ...