|
楼主 |
发表于 2012-11-9 04:36:16
|
显示全部楼层
交易价值计算专题
AI交易浅析
可供交易物品- 钱
- 回合金
- 地图?
- 资源(奢侈/战略)
- 开边
- 共同防御
- RA
- 贸易协定(未使用)
- 永久同盟
- 投降
- 停战
- 和平协议
- 第三方战争
- 第三方和平
- 第三方禁运(未使用)
- 大使馆
- 友谊声明(在人类玩家之间)
- 城市
复制代码 交易概念引入
这里需要引入一个抽象的概念,iValue,在AI眼里所有自己提供给别的玩家的物品都是有一个iValue的,在AI自己计算的时候iValue的值就是你实际付出的价值(或者说 金钱),人类玩家视作无任何修正的玩家。即人类手里的钱1金=1iValue。
注意!以下讨论除非特别提出,否则都是讨论的AI拿出某种东西(钱,奢侈品,GPT)的时候这种东西的价值!
钱到底值多少钱
首先分析最简单的现金交易,AI手里的钱和我们手里的钱到底有什么区别?
首先,无论是你提供给AI的现金或者AI提供给你的现金都会被态度和看法这两个点修正:- 态度修正值M1:
- 敌视(HOSTILE):150
- 提防(GUARDED):110
- 其余100
- 看法修正值M2:
- 不可原谅(UNFORGIVABLE):200
- 敌人(ENEMY):140
- 竞争者(COMPETITOR):115
- iValue=金钱*态度修正*看法修正/(100*100)
复制代码 同时在实际AI间交易中,AI会考虑折衷值,即对于这笔钱计算与之交易AI眼中的iValue并且取平均。
回合金值多少钱
回合金态度态度修正和看法修正同金钱一样
但是在处理之前需要打八折。
也就是说- 玩家提供给AI的GPT的价值=GPT*回合数*0.8
复制代码 但是- AI提供给玩家的价值=GPT*回合数*0.8*1.4
复制代码 故- iValue=GPT*回和数*1.12*(态度修正*看法修正)/(100*100)
复制代码
1
资源值多少钱
资源分为两种,奢侈资源和战略资源
对于奢侈资源这就是240的来历:1*4*30*2=240
同时,如果这一奢侈资源为唯一资源:
baseValue*3
但是(对于荷兰)如果奢侈资源卖掉后还有剩余快乐则
baseValue/2
这也是为啥荷兰可以360买独有奢侈的原因
对于战略资源
首先判断对于自己这个资源是不是已经过多了
判断公式是:- 需要资源个数=min(5,max(AI拥有城数-提供资源个数,0))
复制代码 这个式子说明,战略资源最多一次交易卖5个,多余5个对AI来说是没有交易价值的
然后判断这个资源是否过期:
如果没过期则- baseValue=需要资源个数*持续回合*1.5
复制代码 这就是45的来历 1*30*1.5=45
同样地,在获得baseValue后,需要加上态度与看法修正- 初始修正值iModifier=0
- 看法修正值:
- 不可原谅(UNFORGIVABLE):1000
- 敌人(ENEMY):400
- 竞争者(COMPETITOR):175
- 其余100
- 态度修正值:
- 敌视(HOSTILE):+300
- 提防(GUARDED):+150
- 畏惧(AFRAID):200
- 中立(NEUTRAL):+100
- 朋友(FRIENDL):200
- (注意朋友和畏是直接改成200)
复制代码 最后价值计算为- iValue=baseValue*iModifer/200
复制代码 返回iValue
城市能卖多少钱
城市的基本价值由三个方面决定:人口,地块数目,地块资源(很奇怪和建筑无关,而且事实上代码注释里面关于这个的吐槽)
注意:基本价值计算是同时适用于人类和AI的城市的!- 基本价值=人口基本价值+地块基本价值+地块改造价值+资源价值
复制代码 基本价值计算
人口基本地块价值
首先获得对于这个玩家的单个地块基本价值(goldPerplot)
这个单个地块基本价值很奇怪- 单个地块基本价值=(50+5*购买地块数)*修正值
复制代码 (注意购买地块数这个地方,搜索所有代码只有赋值为1的个代码段,故前面括号值据推测应该在这里恒定为55,存疑)
修正值包括:政策/奇观(吴哥窟)/UA(存疑)
最终- 基本地块价值=(城市地块数-7)*单个地块基本价值
复制代码 需要去除移民坐下的7块地
地块改造价值- 地块改造价值=城市改造地块数*单个地块基本价值*25/100
复制代码 地块资源价值- 轮询所有地块
- 如果当前地块具有奢侈资源
- 资源价值+=奢侈带来快乐*剩余回和数*2
- (剩余回合数=max(120,游戏最大回和数-当前回和数))
- 如果是AI的城市且城市具有AI唯一快乐资源
- 资源价值+=奢侈带来快乐*剩余回和数*4
- 如果当前地块具有战略资源且非过期战略资源
- 资源价值+=资源数目*60*150/100
复制代码 其他修正
对于AI自己拿出来的城市的iValue,还需要额外的加成
对于有世界奇观的城市则:
基本价值*2
然后获取对于当前玩家的战争计划程度决定修正值- WAR_PROJECTION_DESTRUCTION:100
- WAR_PROJECTION_DEFEAT: 180
- WAR_PROJECTION_STALEMATE: 220
- WAR_PROJECTION_UNKNOWN: 250
- WAR_PROJECTION_GOOD: 400
- WAR_PROJECTION_VERY_GOOD: 400
- AI城市价值=基本价值*修正值/100
复制代码 对于人类玩家城市的iValue则:- 遍历自己城市,获得离目标城市距离最近的城市距离iBestDistance,且这个iBestDistance不小于5
- 人类城市价值=基本价值/(iBestDistance-5)
- 如果结果小于100
- 人类城市价值=100
复制代码
[ 本帖最后由 sweetrryy 于 2012-12-8 13:10 编辑 ] |
|