《完美的模拟城市》
摘要
分析《模拟城市》的评分系统,利用开源移植版和算法策略设计高分高人口城市。
<p><a href="https://lobste.rs/s/r4egb5/perfect_simcity">评论</a></p>
查看缓存全文
缓存时间: 2026/08/28 09:48
# 完美模拟城市 · 文章
来源:https://www.jeffquast.com/post/a-perfect-simcity/
##### 2026年8月22日
## 完美模拟城市
玩了35年《模拟城市》,我依然无法定义何为“完美”城市。游戏评估界面会显示0到1000分的评分,我曾努力冲击900分却始终不解其构成因素。通过游戏玩法探索这些因素正是模拟游戏的乐趣所在,而此游戏的优势在于源代码也是开放的。
唐·霍普金斯(https://donhopkins.medium.com/)一直维护着《模拟城市》(1989) (https://archive.org/details/msdos_SimCity_1989) 的FOSS移植版本:Micropolis (https://github.com/SimHacker/micropolis) 与MicropolisCore (https://github.com/SimHacker/MicropolisCore),忠实复现了原版规则集。我利用gym-city (https://github.com/smearle/gym-city)提供的Python接口进行了大量实验,并在此分享结果,展示五座高评分城市和五座高人口城市——它们通过算法设计,采用了下文所述的策略。
### 速度
图1. 十座算法生成的城市:五座最高评分城市(bigscore1至5),以及五座人口达70万的城市(bigpop1至5)。
## 市民需要更少的道路
完美评分城市的人口在1.2-1.6万之间。其人口水平、犯罪率、污染和地价达到完美平衡,仅需维持1%的税率。道路和铁路稀少且不连贯。完美评分城市无需任何消防部门,且bigscore2至5甚至没有警察局。
| 城市 | 评分 | 人口 | 犯罪率 | 污染 | 地价 | 失业率 | 年收入 |
|---|---|---|---|---|---|---|---|
| bigscore1 | 949.5 | 16,560 | 13 | 36 | 126 | -93 | +6 |
| bigscore2 | 940.0 | 18,400 | 22 | 41 | 124 | -99 | +147 |
| bigscore3 | 940.0 | 12,440 | 22 | 35 | 122 | -96 | +93 |
| bigscore4 | 939.0 | 12,400 | 16 | 30 | 128 | -95 | +86 |
| bigscore5 | 937.0 | 14,640 | 20 | 41 | 127 | -98 | +117 |
住宅区和工业区的出行需求简单,它们读取周围12个地块是否有道路或铁路来决定是否发展。若无,区域会衰退。
商业区需要送货——车辆从外围道路出发,最多行走30步,到达开发地块旁即可算完成。**该区域自身地块也计算在内**,因此30步内的任意环形铁路都能满足需求。商业区通常位于市中心,因为引擎提供**市中心加成**:从+64开始,至地图远角处衰减为-64惩罚。
《PC模拟城市手册》(https://archive.org/details/simcity_ibm_manual) 推荐铁路,这也是玩家最容易自行发现的策略。道路承载交通并排放污染,抑制住宅区发展。铁路不产生污染且不计入交通流量。
道路和铁路会产生年度维护费,警察和消防是巨大预算项。若资金不足会严重影响评分,因此必须保证100%资金。不设立这两个部门是最低年度成本,从而允许最低税率。将税率提高至2%会因直接和间接因素导致评分下降近30分。
## 市民需要更多人口
在超级任天堂版(https://en.wikipedia.org/wiki/SimCity_(1989_video_game)#Super_NES)中,游戏奖励*人口数*——巨型都市的最终奖励在人口达到50万时发放。休闲玩家在SNES平台通常达到60-70万人口,有玩家报告达到91.12万 (https://gamefaqs.gamespot.com/boards/588657-simcity/79143601)。
Micropolis (https://github.com/SimHacker/micropolis) 可能难以达到91.12万。超级任天堂版是唯一提供礼物(https://gamefaqs.gamespot.com/snes/588657-simcity/faqs/68878#section2)的版本,放置礼物可提升地价,允许在负*市中心加成*区域实现更高密度开发。
我也尝试通过算法优化人口,通过自动代码能达到70万。
| 城市 | 人口 | 评分 | 税率 | 犯罪率 | 污染 | 年收入 |
|---|---|---|---|---|---|---|
| bigpop1 | 709,405 | 467.0 | 2% | 140 | 174 | +2,206 |
| bigpop2 | 694,670 | 468.5 | 5% | 175 | 179 | +7,944 |
| bigpop3 | 688,435 | 458.5 | 5% | 218 | 171 | +7,568 |
| bigpop4 | 682,590 | 525.0 | 2% | 116 | 168 | +470 |
| bigpop5 | 670,950 | 461.5 | 3% | 219 | 171 | +4,194 |
## 市民需要更多住房
评分分两阶段计算,第一阶段使用七个惩罚项:
- 犯罪率(全市犯罪平均值)
- 污染(全市污染平均值)
- 住房(全市平均地价)
- 税率
- 交通(全市交通平均值)
- 失业率
- 火灾(当时燃烧的地块数)
*图2. 七个评分项。六项以0为下限只能扣分,交通项最高可达576。失业率无下限,负值可提升分数。*
七项中有六项以0为下限,但失业率无下限:
```
失业率 = (住宅人口 / (8 × 岗位数) - 1) × 255
```
当岗位数超过规划住宅人口时,**失业率项变为负值并提升分数**,提供约128分的奖励。这是游戏中最强力的杠杆。
第二阶段评分由另外九项惩罚减少:
*图3. 每项惩罚应用于上一项的剩余分值,因此靠后的相同因子价值递减。右列显示各项对940分城市造成的损失。*
前三项是未建造特殊区域的惩罚:超过500居民需建体育场,100商业区需建机场,70工业区需建海港。体育场位置不影响评分(无交通/污染),但机场和海港会因高密度污染降低总分,因此不建造。
## 市民需要喷泉
前述七个惩罚项均为平均值,地价扫描算法(scan.cpp (https://github.com/SimHacker/MicropolisCore/blob/6811ae03b419949650e782331021cbb1f16a5486/packages/micropolis-engine/src/scan.cpp#L274))通过地块ID决定每个2×2方格的纳入范围。草地、森林和公园树木ID低于64,对评分不可见,但**ID为840的喷泉会参与评分计算,尽管无人居住!**
这些2×2方格本身不承载人口,却会使犯罪惩罚项降低33分。
| 地块ID | 类型 | 地价 | 是否计入评分 |
|---|---|---|---|
| 0 | 泥土 | 无 | 否 |
| 2-20 | 水域 | +15 | 否 |
| 21-43 | 森林、公园树木 | +15 | 否 |
| 44-63 | 废墟、洪水、火灾 | 无 | 否 |
| 64-65 | 桥梁 | 无 | 是 |
| 66-79 | 道路 | 无 | 是 |
| 840 | 公园喷泉 | **无** | **是** |
*图5. 仅当2×2方格包含ID≥64的地块时才会计入评分,而地价加成仅来自ID<44的地块。公园建造工具有五分之一几率生成ID 840的喷泉。放置喷泉可降低总犯罪惩罚。*
## 公园溢出效应
许多攻略推荐用公园减少或吸收污染,但在Micropolis (https://github.com/SimHacker/micropolis)中公园根本不减少污染。然而污染会降低地价,地价影响犯罪率,因此公园通过提升周边地价间接降低犯罪率。
水域、公园和树木地块均能提升地价,引擎按4×4方块计算。每个此类地块为其方块加15点地价,最终地价加成为这些点数之和加上市中心加成减去污染值。
但地价加成以单字节存储,scan.cpp (https://github.com/SimHacker/MicropolisCore/blob/6811ae03b419949650e782331021cbb1f16a5486/packages/micropolis-engine/src/scan.cpp#L503)中的smoothTerrain()函数会在相除前与相邻方块混合,导致高绿化方块可能*与邻居相加后溢出255并循环*,反而反直觉地降低地价。
*图6. 4×4方块中水域/公园/树木地块数量与地价加成关系。16格中恰好8格绿化是最优值。达到9格时与邻居求和可能开始降低地价。*
《PC模拟城市手册》(https://archive.org/details/simcity_ibm_manual) 声称“公园与森林、水域一样,可提升周边区域地价”,但**过多公园或树木反而会压低地价并推高犯罪率。**
## 市民需要更多产业
常见策略是沿地图边缘布置工业区,这对最大化人口也有效。《SNES模拟城市手册》(https://archive.org/details/sim-city-usa)写道:“沿边缘建设工业区的最大好处是:一半污染落在地图外,不影响城市。这对高污染工业、机场和燃煤电厂至关重要。”
这仅是部分事实。Micropolis (https://github.com/SimHacker/micropolis)引擎从每个污染源向外扩散污染,将地图划分为4×4方块,然后仅对包含污染的方块计算平均值:
```
污染平均值 = 污染总量(ptot) / 污染方块数(pnum)
```
低污染地块通过平均计算有助于降低总污染值——小型高分城市应自留轻度污染。模型表明,最大化人口的城市应出于其他原因将工业区置于边缘:那些区域地价太低,不适合其他类型区域。
## 市民需要人文关怀
杰·莱特·福雷斯特的《城市动态》(Urban Dynamics (https://archive.org/details/urbandynamics0000forr))(1969)常被提及影响了《模拟城市》(SimCity (1989) (https://archive.org/details/msdos_SimCity_1989))首席设计师威尔·莱特。《城市动态》本质是城市纸质模拟游戏。Micropolis (https://github.com/SimHacker/micropolis)模拟可模糊识别为《城市动态》模型的简化版,并加入了福雷斯特模型缺乏的邻域地块空间价值微改进。有趣的是,两者殊途同归:改善城市的最大杠杆是*减少*可用住房:
> 同步减少过剩住房绝对必要。它为新建就业结构提供土地。同样重要的是,由此产生的住房短缺创造了稳定人口的压力,使经济复苏得以在不被人口增长淹没的情况下进行。——杰·福雷斯特,《社会系统的反直觉行为》(https://ocw.mit.edu/courses/15-988-system-dynamics-self-study-fall-1998-spring-1999/65cdf0faf132dec7ec75e91f9651b31f_behavior.pdf),1971
《苏美尔游戏》(The Sumerian Game (1963)) (https://en.wikipedia.org/wiki/The_Sumerian_Game)作为城市建设游戏鼻祖,包含相同反模式,我曾发现最佳策略(https://www.jeffquast.com/post/hamurabi_bas/)是系统性饿死3%人口。我认为在2026年,很难找到支持所有三个模型所建议的住房与人口短缺优化方案的人。
← (https://www.jeffquast.com/post/perfecting-terminal-character-width-using-correction-tables/)
相似文章
Show HN:SimCity,但得先办许可证
Show HN 介绍了一款名为 Permit Pending 的城市模拟游戏,玩家扮演市长,所有建设决策都需经过听证、上诉和选举等政治流程,而非传统模拟城市的‘上帝视角’。
Maxis的生命与时代,第1部分:SimEverything
回顾了Maxis的历史和SimCity的开发过程,探讨了1990年代硬核玩家的游戏保存努力与休闲游戏实际商业成功之间的脱节。
@thesupermanmx: 日本研究人员创建了一个系统,通过生成多达100万名虚拟居民来模拟整个城市,这些居民……
日本研究人员开发了CitySim,这是一个由大型语言模型(LLM)驱动的城市模拟器,它能够在东京的数字孪生中填充多达100万个自主AI代理,并准确预测通勤和购物行为等现实世界模式。
CityBehavEx: 一个可扩展且经实证验证的LLM辅助城市仿真平台
CityBehavEx是一个可扩展的LLM辅助城市仿真平台,它结合了成熟的人类移动模型与微调后的交叉编码器,为城市规模的人口生成真实且经实证验证的移动模式。在单个消费级GPU上,不到一小时即可模拟100,000个智能体在75天内的行为。
罗马并非一回合建成:面向长时程 Freeciv 智能体的基于回放的奖励信号
该论文介绍了 CivHarness,一个基于回放、用于在 Freeciv 中生成长时程反馈的系统,以及 CivTelescope,一个预测哪种游戏局面能带来更好结果的大语言模型评判器,旨在解决游戏内分数具有误导性的“积分榜陷阱”问题。使用 CivTelescope 作为密集奖励(CivMarshmallow)后,智能体在游戏中期取得了 8.94 分的提升,比最佳基线高出 77%。