Simsocial 第二步 Hard Decision

Simsocial 序章
Simsocial 第一步

前两步做完之后中间停了很长时间,因为下一步实在是比较困难。之前一直都感觉无法下手,最近终于有了进展。
Simsocial 最关键的地方就是在于
任务的产生,发布,执行。这个过程要受到城镇自身属性的影响,也要受到市民属性的影响,如何把各种属性的影响引入?如何定出要发布的任务,如何定出任务酬劳,市民又如何衡量这个任务该不该接受。这些都是问题。而这一切都是一个Decision的问题。城镇要做出自己的决定,市民也要做出自己的决定。

为了简化这个过程,我先从最简单的任务入手 ——巡逻任务。城镇要了解自己的每块领地的状况,比如建筑物数量,农作物的生产效率等等,就要通过市民巡逻这些领地获取信息。所以上一步做的就是巡逻的基本过程。什么时候应该发布巡逻任务呢?当然是城镇觉得自己的领地信息有点过时的时候,这个时候就需要一个能够衡量每块土地的信息时效性的量。所以这样就到了下一个问题,如何衡量领地信息的时效性?

最直接的想法就是用当前时间减去信息更新时间。但是这个量的范围变化比较大,要想办法把这个量给归一化。要把值域从[0 - +无穷] 变到 [0 - 1]。这里我用了这样的一个函数 2/(e^timeDiff + e^(-timeDiff)),其中 timeDiff = currentTime - lastUpdateTime。这样就满足我的需求了。由于信息越旧这个值就越大,所以这个值被称作 unFreshness。

下面的工作就很直接了,如果城镇领地unFreshness 大于某个值,那么就发布巡逻任务。这个决定发布任务的临界值可以和城镇自身的属性相关。现在城镇的属性只设了下面几个

this.meanness=Math.random();// this variable discribe how mean the town is.
this.friendNess=Math.random();// this describe friendness to other towns
this.braveNess=Math.random();// this describe if the town is willing to take risk

这样如果一个城镇的冒险属性越高那么它可能就会把这个阈值设的比较高,如果一个城镇的吝啬属性值越高,那么它可能就会把报酬定的越低。这样城镇的属性就可以影响任务了。同样如果一直没有人接受任务,随着城镇的unFreshness的增加城镇也只能提高这个工作的酬劳。

剩下的就是具体实现的问题了。在之前写的巡逻任务中添加上城镇信息的变化,并重新计算信息的有效度就行了。

在线Demo
http://randoms.me/media/demo/patrol/simsocial/src/html/home.html

最开始消息的过时程度为0,并随着时间逐渐增加

图片

达到阈值的时候发布巡逻任务,市民接受任务开始巡逻,这时整的的unfreshness开始下降

图片


市民不断巡逻使得城镇的信息时效性保持在一个比较稳定的程度

图片


现在没有加入市民的决策,比如这个工作我要不要接受,这个也是我的整体想法的重点。
标签上篇: 简谱 次篇: 从复仇说起