《完美的模拟城市》

Lobsters Hottest 工具

摘要

分析《模拟城市》的评分系统,利用开源移植版和算法策略设计高分高人口城市。

<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,但得先办许可证

Hacker News Top

Show HN 介绍了一款名为 Permit Pending 的城市模拟游戏,玩家扮演市长,所有建设决策都需经过听证、上诉和选举等政治流程,而非传统模拟城市的‘上帝视角’。

CityBehavEx: 一个可扩展且经实证验证的LLM辅助城市仿真平台

arXiv cs.CL

CityBehavEx是一个可扩展的LLM辅助城市仿真平台,它结合了成熟的人类移动模型与微调后的交叉编码器,为城市规模的人口生成真实且经实证验证的移动模式。在单个消费级GPU上,不到一小时即可模拟100,000个智能体在75天内的行为。

罗马并非一回合建成:面向长时程 Freeciv 智能体的基于回放的奖励信号

arXiv cs.AI

该论文介绍了 CivHarness,一个基于回放、用于在 Freeciv 中生成长时程反馈的系统,以及 CivTelescope,一个预测哪种游戏局面能带来更好结果的大语言模型评判器,旨在解决游戏内分数具有误导性的“积分榜陷阱”问题。使用 CivTelescope 作为密集奖励(CivMarshmallow)后,智能体在游戏中期取得了 8.94 分的提升,比最佳基线高出 77%。