# 小卖部经营沙盘 · 规则设计 v1 > 用途:在可控的模拟环境里让 AI(或人)经营一家社区小卖部,改变条件、重复实验、观察结果,用来检验学术想法。 > 本文件是实现的唯一依据。所有数值都写进配置文件,可改。 > 数值来源标记:**[CCFA]** 来自行业报告;**[假设]** 是我定的初值,需要在校准阶段(第 11 节)验证。 --- ## 0. 总体结构 ``` 环境(居民、竞争对手、天气、供应商) │ 顾客到店、购买、离开 ▼ 小卖部(货架、库存、收银、设备)◀── 店长(规则版 / 人 / 以后接 RL、Claude) │ 每笔交易、每笔费用 ▼ 会计账簿(复式记账 → 三张报表) │ ▼ 记录器 → 可视化网页 / 实验统计 ``` - **时间粒度**:一步 = 一天。天内按分钟推进顾客事件(到店、挑货、排队、结账),以便营业时间、排队、时段促销这些决策有意义,也让俯视图回放的顾客是真实模拟结果。 - **随机性**:所有随机数来自一个种子,并按用途分成互不干扰的流,每天每条流按 [种子, 流编号, 日] 重新生成:天气、出行与选店、店内购物、居民记忆(知晓度、口碑、迁居)、事件各一条。对照组和实验组因此共用随机数(common random numbers):改动只影响它直接作用的那一环,其余抽样保持对齐,配对比较的方差小得多。 - **性能要求**:模拟一年 ≤ 5 秒(不开详细记录),保证一组实验跑几百次可行。 --- ## 1. 校准基准(真实数据) 来源:毕马威 × 中国连锁经营协会《2025 年中国便利店发展报告》(2024 年样本企业数据),原文抽取存于 `docs/sources/kpmg-cvs-report-2025.txt`。 | 指标 | 连锁便利店 2024 | 本沙盘小卖部目标(默认场景) | |---|---|---| | 单店日均销售额 | 4,634 元 [CCFA] | 2,000–3,500 元 [假设] | | 客单价 | 20.4 元 [CCFA] | 15–22 元 | | 毛利率 | 26.4% [CCFA] | 16–22%(小卖部香烟占比更高、无鲜食,毛利更低)[假设] | | 费用占销售额 | 电费 1.4%、职工薪酬 7.2%、房租 5.8%、其他 9.4% [CCFA] | 夫妻店无工资,房租占比更高 [假设] | | 净利率 | 2.5% [CCFA] | 会计净利率 3–12%(店主劳动不计薪);扣除店主劳动机会成本后的经济利润多半为负 [假设] | | 坪效 | 55.9 元/㎡/天 [CCFA] | 50–80 元/㎡/天 | | 品类结构 | 香烟 30.1%、鲜食 12.5%、生鲜 3.9%、咖啡 1.1% [CCFA] | 香烟 30–40%,无鲜食、咖啡 | | 时段收入分布(2023) | 6–10 点 16.8%、10–14 点 24.6%、14–18 点 21.8%、18–22 点 28.0%、22–24 点 8.9% [CCFA,0–6 点占比极小] | 形状一致 | | SKU 数 | 约 2,000 [CCFA] | 真实小卖部 500–1,000;沙盘用 60 个代表性 SKU(见 4.1) | --- ## 2. 周边市场(环境参数) ### 2.1 居民(按户生成,`population` 段) 默认场景不绑定具体城市,是"典型的中国城市社区":780 户、约 2,040 人住在店铺周边 600 米内,每人是一个智能体。同一户住在同一处、共享收入档。 | 属性 | 生成规则 | 数据来源 | |---|---|---| | 户规模 | 1–6 人户占比 25.4 / 29.7 / 21.0 / 13.2 / 6.2 / 4.5% | 七普:1、2 人户为公报值;3 人及以上按户均 2.62 人推算 | | 年龄 | 0–5 岁 7.0%、6–14 岁 11.0%、15–17 岁 3.3%、18–22 岁 5.5%、23–59 岁 54.5%、60–69 岁 10.2%、70+ 8.5%;每户至少一个成年人 | 七普 0–14 / 15–59 / 60+ = 17.95 / 63.35 / 18.70%;细分为推算 | | 性别 | 男 51.2% | 七普 | | 就业 | 18–59 岁中 75% 在业 | 推算:城镇就业人员 4.73 亿 ÷ 城镇 18–59 岁人口 | | 收入 | 每户随机分到五等份之一,相对收入 1 : 2.3 : 3.6 : 5.6 : 10.4 | 国家统计局 2024 年全国居民收入五等份 | | 价格敏感度 | 类型基准值 × (相对收入 / 中位数)^(−0.3) × 整体缩放 2.0 | 收入弹性指数 [假设];整体缩放见 2.3 | | 吸烟 | 15 岁以上,男 45%、女 2%(生成后总体约 24%) | 中国疾控中心成人烟草调查(2024 年现在吸烟率 23.2%;2018 年男 50.5%、女 2.1%) | **行为类型**由年龄和就业推出(不再手设占比): | 类型 | 谁 | 占比(生成后) | 日均到便利店次数 λ | 出行时段 | 价格敏感度基准 | 排队耐心 | |---|---|---|---|---|---|---| | 上班族 | 18–59 岁在业 | 46% | 0.30 | 早 7–9、午 12–13、晚 18–22 | 1.5 | 3 分钟 | | 学生 | 6–17 岁 | 13% | 0.30 | 放学 15–18、晚间 | 2.5 | 4 分钟 | | 老人 | 60 岁以上 | 18% | 0.20 | 上午 8–11 | 3.0 | 6 分钟 | | 家庭成员(未就业) | 18–59 岁未就业 | 17% | 0.25 | 白天、傍晚 17–20 | 2.0 | 4 分钟 | | 学龄前儿童 | 0–5 岁 | 6% | 0(不单独购物) | — | — | — | - **到店频率**:λ 是"到任何一家便利店/小店"的次数。参照艾媒咨询 2021–22 便利店消费者调查:一线城市 25.5% 的人每天至少去一次、21 岁及以下 22.5% 每天去、22–40 岁过半每周去多次;λ = 0.3 时约 26% 的人某天至少去一次。各类型 λ 的细分没有直接数据 [假设]。 - **品类偏好**按类型设定 [假设];艾媒调查中休闲零食是最常买的品类(71.1%),其次乳制品、日用品、现制食品,偏好排序与之一致。 - **一单买几样、哪些品类常一起买**:国内没有公开的便利店小票数据,这部分是假设(一单计划 1/2/3 个品类的概率 55/30/15%,品类之间独立)。研究宏观运营和财务时影响不大;研究品类组合、促销、引流定价时需要真实数据或做敏感性分析。 - **买烟**:烟民平均每天 0.38 次到小店买烟(其余从别处整条买),有固定偏好的品牌,断货时 60% 换别的牌子 [校准值]。 - **城市预设**:`config/regions/` 下有杭州、苏州、上海的人口参数,研究某个城市时用 `base:` 引入。 ### 2.2 出行生成(每天、每人) ``` 当天出行次数 ~ Poisson( λ_type × 星期系数 × 天气系数 × 节假日系数 ) 出行时刻 ~ 按类型的 24 小时偏好分布抽样(分钟级) ``` - 星期系数:上班族周末 0.8、其他类型 1.1 [假设]。 - 天气(2.4):雨天出行 ×0.95,但更不愿走远(见 2.3),且一单多买一个品类的概率 +15%(Tian、Cao、Song 2021:国内 146 家便利店,雨天篮子更大、销售高于阴天)。 - 节假日:春节 7 天,居民在家比例默认 0.6(城市人口返乡),其他法定假日 ×1.1 [假设]。 ### 2.3 选店(多项 Logit) 居民 i 每次出行在"可选店铺 + 不买(外部选项,代表网购/忍着/顺路别处)"之间选择: ``` U_ij = α_j − β_d · d̃_ij − β_p · ln(P̂_ij) + β_h · H_ij − β_s · S_ij − 品类缺口 + ε_ij d̃_ij = d_ij + e · (d_ij − min_k d_ik) e = 0.5·下雨 + 事件附加(疫情等) U_i0 = α_0 + ε_i0 (不买) ε ~ Gumbel(即标准 Logit 选择概率) ``` | 符号 | 含义 | 默认 | |---|---|---| | α_j | 店铺固有吸引力:超市品类全 +0.5,小卖部 0,本店随陈列整洁度/面积微调 | [假设] | | β_d | 距离厌恶,每公里 | 4.0 [校准值:本店顾客约 47% 住在 300 米内] | | d_ij | 步行距离(公里) | 坐标算出 | | P̂_ij | 居民感知的价格指数(1.0 = 市场参考价) | 见 2.5 | | β_p | 选店的价格敏感度 = 类型基准 × 收入系数 × 整体缩放 2.0 | 整体缩放按"利润最高点在参考价之上 5–20%(便利店方便溢价)"标定 [校准值] | | H_ij | 习惯存量 | 见 2.5 | | S_ij | 缺货失望存量 | 见 2.5 | | β_h | 习惯权重(只去这一家店的常客 +2) | 2.0 [假设] | | β_s | 缺货厌恶 | 1.5 [假设] | | α_0 | 外部选项吸引力 | −1.7 [校准值] | | 品类缺口惩罚 | 计划买的品类这家店不卖,每个品类扣的效用(`market.miss_penalty`) | 1.0 [假设] | - **下雨、疫情时更不愿走远**:额外的距离惩罚只加在"比最近那家店多走的距离"上,只改变去哪家店,不会把人凭空推去"不买"。 - **价格的短期与长期反应分开**:店内买不买、买几件的即时反应 = 品类弹性 × 0.1(短期很弱);长期反应通过选店体现:顾客每次光顾后更新对这家店的价格印象 P̂(平滑系数 0.85),价格印象再以 β_p 影响下次去不去。标定结果见第 11 节:整体提价 10%,8 周内件数 −7%(Hoch 等 1994 的实验为 −3%),一年内 −20%,利润最高点在参考价之上约 10%。 - **关门的店不可选**。居民到了本店发现关门(只发生在不知道营业时间的新居民,或店长刚改了营业时间的头 7 天),算一次失望,S_ij +1。 - 买烟需求只在持有烟草证的店之间选(超市有、本店默认有)。 ### 2.4 天气与季节 ``` 气温 T(d) = 17 + 12·sin(2π(d − 105)/365) + N(0, 3) (温带城市,℃) 下雨 ~ Bernoulli(0.15),夏季 0.25 ``` - 冷饮/冰淇淋需求 × exp(0.06·(T − 20))(26℃ 以上再 ×1.6);饮料 × exp(0.02·(T − 20));酒水 × exp(0.01·(T − 20))(Hirche 等 2021:最高气温 +10℃ 啤酒 +10%);方便食品 8℃ 以下 ×1.2;节假日酒水 ×1.4;冷柜饮料 25℃ 以上 ×1.3。系数都在 `seasonality` 段,除酒水外为 [假设],响应检验见第 11 节。 - 空调用电随季节变化(第 6 节)。 ### 2.5 居民的记忆(每天更新) ``` H_ij ← 0.9·H_ij + 0.1·(当天出行中去 j 店的次数 / 当天出行次数) 习惯:近期光顾占比,0–1,只在有出行的日子更新;只去一家店 → 趋近 1 S_ij ← 0.90·S_ij + 缺货次数 + 关门扑空 + 排队放弃 失望:随时间淡忘 P̂_ij ← 0.8·P̂_ij + 0.2·(本次所买非香烟商品 实付价/参考价 的加权平均) 只有去过才更新;香烟统一标价,不计入;临期折扣计入 ``` - **知晓度**:居民只有知道本店存在,才会把它放进选择范围。开业当天,距离 d 公里的居民以 0.5·exp(−d/0.35) 的概率已经知道;之后每天以 0.02·exp(−d/0.35)(路过看见)+ 0.03 ×(5 个近邻中已知道的比例)(邻居告知)的概率得知。迁入的新居民不知道。[假设] - **开业爬坡**:模拟开始前先空跑 90 天(本店未开),让居民对竞争对手形成习惯。本店开业时 H = 0,需要从对手那里把客人一点点争取过来,这和真实新店的爬坡期一致。 - 新居民(每月 2% 迁入迁出 [假设])对本店的 P̂ 初值 = 1.0,H = 0,S = 0。 - 口碑(v1 简化):每个居民每天以 5% 概率和邻居交换一次 P̂ 和 S 的信息,向邻居的值靠拢 20% [假设]。 ### 2.6 竞争对手 | 对手 | 距离店铺 | 价格指数 | 营业时间 | 品类 | 烟草证 | |---|---|---|---|---|---| | 社区超市 | 800 米 | 0.92 | 8:00–22:00 | 全 | 有 | | 另一家小卖部 | 350 米 | 1.00 | 7:00–23:00 | 与本店默认相同 | 有 | - 对手的价格、营业时间平时固定,不缺货;会因突发事件(价格战、新店开张)和下面的"对手反击"而变化。 - **对手反击**(`events.competitor_reaction`,默认开启):每周检查本店最近 28 天的市场份额,超过 50% 时,老王小卖部降价 8% 并前后各延长 1 小时营业,只反击一次 [假设]。对手改价后居民立即知道新价格。对手价格 = 原价 × 价格战折扣 × 反击折扣,价格战结束只撤掉价格战那部分。 - 外部选项 α_0 同时承担"即时零售外卖"的分流作用;粮油调味和日用品的 α_0 更高(这类东西常网购)。 --- ## 3. 店铺条件(环境参数) | 参数 | 默认 | 说明 | |---|---|---| | 面积 A | 40 ㎡ | 70% 为卖场,30% 为后仓与收银 | | 租金 | 110 元/㎡/月 → 4,400 元/月 | 2025 年上半年二线城市商铺均价约 100–130 元/㎡/月,门口位置取中上 | | 付款方式 | 押一付三 | 押金 1 个月计入其他应收款,房租按季预付后按月摊销 | | 物业等杂费 | 300 元/月 | | | 初始资金 | 按业态(见 3.1) | 店主投入,计实收资本;`store.initial_capital` 可统一覆盖 | | 信用额度 | 50,000 元,年利率 6% | 现金不足时自动借款,有余钱自动还款 | | 店址类型 | 小区门口 | 影响 α_j:街角 +0.2、巷内 −0.3 [假设] | | 烟草专卖零售许可证 | 有 | 没有就不能卖烟 | ### 3.1 业态:独立社区店还是连锁加盟 `store.format` 取三个值之一。业态改变的是**品牌吸引力、商品范围、进货成本、决策权和费用结构**,其他规则不变。 | 项目 | 独立社区店 `independent` | 轻加盟 `franchise_light`(美宜佳式) | 分成加盟 `franchise_share`(7-11 式) | |---|---|---|---| | 品牌吸引力 α 加成 | 0 | +0.3 | +0.5 | | 商品范围 | 第 4.1 节前 10 个品类 | 加鲜食、咖啡 | 加鲜食、咖啡 | | 进价(除香烟) | 批发市场价 ×1.00 | 总部供货 ×1.05(总部靠供货差价盈利) | 总部供货 ×0.95(规模采购) | | 起订单位 | 按箱 | 按件(总部配送可拆零) | 按件 | | 总部收费 | 无 | 加盟费 25,000 元 + 品牌使用费 1,000 元/月 | 加盟费 50,000 元 + **月毛利分档抽成**(累进):6 万以下部分 10%,6–8.3 万部分 45%,8.3–10.6 万部分 40%,以上 35% | | 加盟保证金 | 无 | 30,000 元 | 150,000 元(期满无息返还) | | 装修 | 30,000 元 | 50,000 元(统一形象) | 150,000 元 | | 门店 | 40 ㎡、14 组货架、2 台冷藏柜 | 同左 | **60 ㎡**(要求实用面积 ≥ 60 ㎡)、21 组货架、3 台冷藏柜 | | 定价权 | 店主自定 | 店主自定 | **总部定价**,店主只能做临期折扣 | | 必卖商品 | 无 | 总部核心清单占 SKU 的 50% | 占 80% | | 营业时间 | 自定 | 自定 | **必须 24 小时** | | 店主初始资金 | 150,000 元 | 300,000 元(报道中总投入 30–35 万) | 450,000 元(方案投资约 35 万 + 流动资金) | | 设备(货架、冷柜、收银等) | 自购 | 自购 | **总部提供**,不计入加盟商资产 | - 来源:美宜佳的费用结构(加盟费约 2.5 万元、保证金 1–3 万元、品牌使用费 1,000 元/月、不参与利润分成、进货价比市场高约 5%)来自媒体报道 [报道];7-11 式按 7-11 华南官网加盟方案 C(总部提供设备):毛利分档、保证金 15 万、加盟费 5 万、装修约 15 万、面积 ≥ 60 ㎡ [官网]。其余数值为 [假设]。 - 会计处理:加盟费计入长期待摊费用,按合同期 60 个月摊销;保证金计入其他应收款;品牌使用费和毛利分成计入"加盟费用"。毛利分成按月末计提增值税之后的不含税毛利计算。 - 香烟由门店自行向烟草公司订购,任何业态下进价都一样、零售价都按标价。 - 连锁店的规则版店长同样遵守总部约束(定价、必卖清单、营业时间)。 **开店一次性投入(默认,独立社区店)** | 项目 | 金额 | 会计处理 | |---|---|---| | 装修 | 30,000 元 | 长期待摊费用,按租期 36 个月摊销 | | 货架 14 组 | 800 元/组 | 固定资产,5 年直线折旧,无残值 | | 冷藏柜 2 台 | 3,500 元/台 | 同上 | | 冷冻柜 1 台 | 3,000 元/台 | 同上 | | 收银设备 | 2,000 元 | 同上 | | 首批进货 | 由店长决定 | 存货 | --- ## 4. 商品 ### 4.1 品类表(每个品类下有 4–8 个代表 SKU,共 60 个) | 品类 | 均价(参考零售价) | 进价/零售价 | 价格弹性 ε | 保质期 | 储存 | 冲动购买系数 | 季节 | 备注 | |---|---|---|---|---|---|---|---|---| | 香烟 | 22 元 | 0.90 | 0.2 | 不过期 | 常温 | 0 | — | **零售价固定为标价,不能改**;每周一订货 | | 饮料 | 4 元 | 0.68 | 1.2 | 270 天 | 常温/冷藏 | 中 | 夏旺 | 放冷藏柜的在气温 >25℃ 时需求 ×1.3 | | 酒水 | 8 元 | 0.78 | 0.8 | 365 天 | 常温 | 低 | 节假日旺 | | | 零食 | 6 元 | 0.68 | 1.5 | 180 天 | 常温 | 高 | — | | | 方便食品 | 5 元 | 0.80 | 1.0 | 180 天 | 常温 | 低 | 冬旺 | | | 乳制品 | 6 元 | 0.78 | 1.0 | 纯牛奶(UHT)180 天、乳饮料 270 天,常温;酸奶 21 天、鲜牛奶 7 天,冷藏 | 见左 | 低 | — | 酸奶、鲜奶短保 | | 面包 | 5 元 | 0.70 | 1.2 | 6 天 | 常温 | 中 | — | 短保 | | 冷饮冰淇淋 | 4 元 | 0.62 | 1.3 | 540 天 | 冷冻必需 | 高 | 夏 ×3、冬 ×0.3 | | | 日用品 | 10 元 | 0.75 | 0.8 | 不过期 | 常温 | 低 | — | | | 粮油调味 | 10 元 | 0.85 | 1.5 | 365 天 | 常温 | 0 | — | 超市竞争激烈 | 连锁业态额外品类: | 品类 | 均价 | 进价/零售价 | ε | 保质期 | 储存 | 冲动系数 | 备注 | |---|---|---|---|---|---|---|---| | 鲜食(饭团、便当、包子) | 9 元 | 0.62 | 1.0 | 1 天 | 鲜食柜(8,000 元,耗电 6 kWh/天) | 中 | 早餐、午餐高峰 | | 咖啡 | 12 元 | 0.35 | 1.2 | 现做,无损耗;原料出杯时按成本付现计入营业成本,不经过存货 | 咖啡机(15,000 元,耗电 3 kWh/天) | 中 | 上班族早高峰 | 以上均为 [假设],参考价设为"市场参考价"(P̂ = 1.0 的基准)。 ### 4.2 购买过程(顾客进店后) 1. **计划购买**:按居民类型的品类偏好抽 1–3 个品类(雨天、疫情时一单可能多一个品类),每个品类挑一个 SKU,权重 = 基础人气 × (排面/6)^0.2 × (价格比)^(−2.0):陈列多、相对便宜的更容易被挑中(品牌层面弹性取 Bijmolt 等 2005 元分析中位数约 −2.2)。 2. **找货**:SKU 没在架或缺货 → 50% 概率改买同品类其他在售 SKU(替代),否则这项需求落空,记一次缺货(S +1,并记入店铺"未满足需求"统计)。 3. **买不买、买几件**(总弹性 ≈ 名义 ε): ``` 价格比 r = 实付价 / 参考价 买的概率 = 1(r ≤ 1);r^(−ε/q0)(r > 1,贵了有人不买) 件数 = 1 + Poisson((q0 − 1) × r^(−ε) × 季节系数 × 气温系数),上限 6 件 ``` 两部分合起来,r = 1 附近的总价格弹性 = ε/q0 + ε(q0−1)/q0 = ε。疫情囤货期间,粮油调味和方便食品的件数部分再乘囤货系数。 4. **冲动购买**:顾客路过的每个陈列区,对其中每个 SKU: ``` P(冲动购买) = 品类冲动系数 × 陈列系数 m_s × (售价/参考价)^(−ε) ``` 冲动系数:高 0.006、中 0.003、低 0.001、零 0 [校准值:使冲动购买约占销量一成,零食占比落在合理范围]。 5. **结账排队**(第 7 节)。 ### 4.3 陈列效果 ``` m_s = (排面数 f_s / 6)^0.2 × 层位系数 × 区位系数 ``` - **排面弹性 0.2**:货架空间增加 1 倍,冲动销量约增加 15%。这一数量级来自经典的货架空间弹性研究(Curhan 1972 等,平均约 0.2)。 - **层位系数**(每组货架 5 层):视线层(第 2、3 层)1.2;顶层 0.9;第 4 层 1.0;底层 0.8 [假设]。 - **区位系数**:收银台旁 1.5(只能放小件:零食、口香糖类、冷饮);门口端架 1.3;店内深处 0.8;冷藏柜 1.0 [假设]。 - **顾客动线**:只买 1 件的顾客 60% 只走门口和收银区;其他顾客走完整动线。所以把高毛利冲动商品放在门口和收银台是有回报的,这也是研究"陈列"时观察的机制。 - **整洁度**:排面空置率 > 30% 时本店 α_j −0.2(看起来"没货、要倒闭")[假设]。 --- ## 5. 供应链与库存 | 规则 | 默认 | |---|---| | 订货截止 | 每天 22:00 前下单,次日 8:00 到货(香烟每周一下单、周二到) | | 起订量 | 按箱:饮料 24、零食 20、乳制品 12、面包 10、其他 12 件/箱 | | 进价折扣 | v1 无量大折扣 | | 付款 | 现结;饮料、酒水供应商月结 30 天(形成应付账款) | | 退货 | 不可退(面包供应商可选"临期回收 50%",配置开关) | | 库存上限 | 在架上限 = 排面数 × 深度 6;后仓总容量 = A × 0.3 × 60 件/㎡ [假设] | | 补货上架 | 店员有空时自动把后仓货补到货架(每人每分钟 2 件) | | 存货计价 | 先进先出,按批次记录到期日 | | 过期 | 每天开门前下架过期商品,按成本计入"存货报废损失" | | 失窃损耗 | 售出件数的 0.5%(22:00–6:00 时段 ×2,无人值守时 ×5)按成本计入损耗 [假设] | --- ## 6. 经营成本 | 成本 | 规则 | 默认 | |---|---|---| | 房租 | 固定,按月摊销预付款 | 6,000 元/月 | | 电费 | 冷藏柜 6 kWh/台·天(双门展示柜约 5–8 度)+ 冷冻柜 5 kWh/台·天 + 照明空调 0.025 kWh/㎡·营业小时 × 季节系数(夏 1.8、冬 1.4、春秋 1.0) | 1.0 元/kWh(商业电价) | | 水费 | 固定 | 50 元/月 | | 人工 | 店主每天最多工作 12 小时(可设),不计工资;超出部分雇店员 | 店员 22 元/小时 [假设] | | 支付手续费 | 90% 顾客用移动支付 | 费率 0.2%(个人经营收款码:非信用卡 0.1%、信用卡 0.38%,混合) | | 税费 | 小规模纳税人增值税:征收率 1%,月销售额(不含税)≤ 10 万元免征(财政部 税务总局公告 2023 年第 19 号,执行至 2027-12-31)。售价含税;超过免征额的月份,月末把 售价/1.01×1% 从营业收入转入应交税费,次月缴纳。经营所得税 v1 默认关闭 | 已核实 | | 利息 | 信用额度借款按日计息 | 年 6% | | 折旧摊销 | 见第 3 节 | | **机会成本(不进会计账,单独报告)**:店主劳动按 22 元/小时(与店员时薪相同,避免"用店员替换店主"凭空赚钱)、投入资本按年 3% 计算机会成本。报表同时给出"会计利润"和"经济利润",很多小卖部会计上赚钱、经济上不赚钱,这本身可以是研究点。 --- ## 7. 收银与排队 - 收银时间 = 20 秒 + 4 秒/件 [假设];每个在岗人员同时只能服务一个顾客(店员补货时不收银,有顾客时优先收银)。 - 顾客到收银台时估计等待时间 = 前面人数 × 平均收银时间;超过其排队耐心(2.1 节)则放下商品离开,S +1,这笔销售丢失。 - 营业中必须至少 1 人在岗;没人在岗的时段视为关门。 --- ## 7.5 突发事件 配置在 `events`。两种来源可同时使用: - **固定日程** `events.list`:做实验用,例如 `[{type: price_war, day: 120, duration: 30}]`,没写的参数取 `events.defaults`。 - **随机抽取** `events.random: true`:每年平均 3 次(`rate_per_year`),类型按权重抽,日期在开业第 30 天之后均匀抽,**强度和持续时间在 `events.ranges` 的范围内均匀抽取**。用来测试店长的抗风险能力,模型店长训练时默认开启。 - 同类事件进行中时,新的同类事件不叠加。 | 事件 | 效果 | 随机强度范围 [假设] | 店长能否提前知道 | |---|---|---|---| | 新竞争店开张 | 在距本店 d 公里处新增一家店,参与选店 | 吸引力 α −0.2–0.4(默认 −0.1,普通小店);价格指数 0.92–1.03;d 0.2–0.6 km;30% 带鲜食 | 提前 30 天公告 | | 房东涨租 | 月租上涨,已预付部分补差价 | 5–25% | 提前 60 天公告 | | 门前道路施工 | 本店吸引力下降 | α −0.4 至 −1.5,持续 20–90 天 | 突发 | | 供应中断 | 1–2 个品类停止到货(订单推迟到恢复后) | 持续 2–10 天 | 突发 | | 疫情封控 | 出行减少、居民更不愿走远、外卖网购也受限、囤货、一单买得多 | 出行 ×0.75–0.95(默认 0.75);距离惩罚附加 +0.3 至 +1.2;外部选项 −0.1 至 −0.6;粮油和方便食品件数 ×1.2–1.8;一单多买一品类的概率 +0.1 至 +0.5;持续 14–60 天 | 突发 | | 对手打价格战 | 某个对手降价 | 价格指数降到 0.80–0.92,持续 14–60 天 | 突发 | | 热浪 | 气温升高(影响冷饮、饮料、空调电费) | +4 至 +10℃,持续 5–15 天 | 突发(天气预报会体现) | | 差评风波 | 本店吸引力下降,按半衰期恢复,4 个半衰期后结束 | α −0.1 至 −0.5(默认 −0.25,约相当于评分降 1 星),半衰期 15–45 天 | 突发 | | 失窃激增 | 失窃损耗率倍增 | ×2–6,持续 14–45 天 | 突发 | - 店长的观察里有 `events`:进行中的事件(含剩余天数)和已公告的事件。规则版店长不理会事件,模型店长会把事件当作输入。 - 事件和对手反击都会记进回放的决策时间线。 ## 8. 店长:可做的决策 | 决策 | 频率 | 约束 | |---|---|---| | 订货:每个 SKU 订几箱 | 每天 | 起订量、库存上限、现金/信用额度 | | 定价:每个 SKU 的售价 | 每天 | 香烟不可改;必须 ≥ 0 | | 促销:临期折扣(距到期 N 天打 X 折)、品类限时折扣(时段、折扣率) | 每天 | 折扣后售价可以低于进价 | | 营业时间:开门、关门时刻,或 24 小时 | 每周 | 改动后前 7 天会有居民扑空 | | 排班:每个时段店员人数 | 每周 | 营业时段至少 1 人(店主或店员) | | 品类组合:上架/下架哪些 SKU | 每月 | 下架商品剩余库存可清仓 | | 陈列:每个 SKU 放哪个货架、哪一层、几个排面 | 每月 | 排面总数受货架数限制 | | 设备:增减冷藏柜、冷冻柜、货架 | 每月 | 占卖场面积;购买资本化 | ### 店长能看到的信息(信息不对称) 店长只能看到真实店主能看到的东西: - 本店每个 SKU 每天的销量、库存、到期分布、报废和损耗、空货架比例 - 本店每小时客流和销售额、排队放弃次数 - 现金余额、三张报表 - 天气预报(明天气温和是否下雨,带误差) - 竞争对手的价格和营业时间(公开信息) - 进行中的突发事件,以及已公告的新店开张和涨租 - 自己的经营参数(店铺、供应、陈列),看不到居民行为参数和未公告的事件日程 **看不到**:居民的内部状态(习惯、感知价格、失望值)、未满足需求的准确数量(只能看到"货架空了")、居民去了别家的次数和市场份额。代码里由 `engine.VISIBLE_KEYS` 统一过滤。 ### 店长接口 所有店长(规则版、人、以后的 RL 和 Claude)实现同一个接口: ``` daily_decide(observation) -> actions 每天开门前调用 ``` ### 规则版店长(基准,v1 必做) - 订货:(s, S) 补货策略;需求用 7 天指数平滑预测;短保商品按"预计 2 天卖完"订货。 - 定价:全部按参考价;香烟按标价。 - 临期:距到期 1 天的商品打 7 折。 - 营业 7:00–23:00,店主 7:00–19:00,店员 19:00–23:00。 - 陈列:每月按上月销售额比例分配排面;高冲动系数商品放收银台和门口。 --- ### 模型店长(强化学习,`manager.type: rl`) **分工**:每周日晚,策略网络读经营快照,定本周的 6 个策略参数;每天订几箱仍由规则版店长的补货逻辑按这些参数执行(老板定策略、伙计照做)。这样学习的问题只有 52 步/年,训练可行。 | 输入特征(25 维) | 输出动作(6 维) | |---|---| | 一年中的时间(正弦/余弦)、上周日均销售额及变化、客流、毛利率、客流比四周前的变化、空货架比例、报废、放弃排队、现金、借款、明天气温和是否下雨、开业多久、竞争店数量、9 种事件各自的状态(无 / 已公告 / 进行中)。全部是店主看得到的信息 | 冲动品类价格倍数 0.8–1.2;必需品类价格倍数 0.8–1.2;临期折扣 0–60%;备货倍数 0.5–1.5;开门 5–9 点;关门 22–24 点(店主排前 12 小时,其余由店员值班;分成加盟强制 24 小时) | - **网络**:25 → 16(tanh)→ 6(tanh),共 518 个参数。 - **训练算法**:进化策略(OpenAI-ES,Salimans 等 2017):每代 16 个对称扰动的候选策略,每个在 2 个随机种子上各经营一年,按名次打分,用 Adam 更新。不依赖额外的库,三进程并行。 - **训练目标**(可选):经济利润(默认)、会计利润、营业收入、存活。破产扣 10 万元。 - **三组种子互不重叠**:训练种子从 1,000 以上随机抽;**验证种子 201–230** 用来选第几代、调超参数;**考试种子 101–130** 只在最终报告时用一次。训练和评估的空跑期相同,都开启随机事件。 - **公平对照**:除规则版店长外,再训练一个**调优固定策略**(`--fixed`):同样调这 6 个参数,但全年不变、不看任何经营数据。模型店长赢规则版,可能只是参数更好;赢了调优固定策略,才说明它学会了随机应变。 - **防钻漏洞**:评估时报告**动作贴边比例**(策略参数落在上下限 2% 以内的比例,过高说明可能在钻边界);`--perturb` 把市场参数(如 β_p、β_d)扰动 ±20% 后重新考试,策略只在原参数下才赢就说明它学的是模拟器的特殊性。 - **评估结果**(`tools/final_eval.py`,`runs/rl_final_eval.json`;独立社区店、随机事件;训练 40 代,固定策略 25 代): | 年份 | 规则版 | 调优固定策略 | 模型店长 | 模型 − 规则 | 模型 − 固定 | |---|---|---|---|---|---| | 验证 201–230 | −47.6 | −38.6 | −30.2 | +17.4 [15.5, 19.3] | +8.4 [7.7, 9.2] | | **考试 101–130** | −41.9 | −32.0 | −24.2 | **+17.7 [15.8, 19.7]** | **+7.8 [6.9, 8.6]** | 单位:千元/年经济利润;括号为 95% 置信区间,配对 t 检验 p 均 < 10⁻¹⁷。扰动检验(验证年份 15 个,β_p ×0.8/1.2、β_d ×0.8/1.2、β_h ×0.6/1.4):模型店长对固定策略的优势在 +7.9 至 +11.2 千元之间,始终显著;动作贴边比例 1%。 学到的策略:开业头两个月冲动品降到 0.83–0.84 倍拉客,站稳后提到约 1.17 倍;必需品约 1.18 倍;备货约 1.3 倍;临期折扣约 44%(渗透定价)。固定策略的最优参数:冲动品 1.03、必需品 1.14、其余接近规则版。 - **标准接口**:`sim.rl.StoreEnv` 提供与 Gymnasium 相同的 reset / step,可接 PPO 等算法。每步在周日收档后应用动作,再跑动作生效的 7 天;奖励 = 这 7 天所有者权益变化 − 店主劳动机会成本。 ## 9. 会计 - **复式记账**:每笔交易生成分录,期末试算平衡必须为 0(自动检查,不平衡就报错停止)。 - **科目**:库存现金、银行存款(v1 合并为"货币资金")、存货、其他应收款(押金)、预付账款(房租)、固定资产、累计折旧、长期待摊费用、应付账款、短期借款、应交税费、实收资本、未分配利润;收入费用类:营业收入、营业成本、存货报废损失、存货盘亏(失窃)、房租、水电、职工薪酬、折旧、摊销、支付手续费、利息、税金及附加。 - **报表**:每月末出资产负债表、利润表、现金流量表(直接法),年末汇总。 - 新增科目:长期借款(经营贷)、业主提款(权益减项);费用类:所得税费用、资产处置损失、退租违约金。 ### 9.1 财务与租约(`finance`、`lease` 段) | 项目 | 规则 | 默认 | 依据 | |---|---|---|---| | 经营所得税 | 个体工商户查账征收:按本年度累计税前利润逐月计提、次月缴纳;应纳税所得额 = 累计利润 − 6 万元/年 × 已过月数/12;五级超额累进 5–35%(速算扣除);200 万元以内部分减半 | 开启 | 经营所得税率表;财政部 税务总局公告 2023 年第 12 号(至 2027-12-31) | | 店主取生活费 | 每月结账前取,现金低于 1 万元时少取或不取;记"业主提款",减少所有者权益,不是费用 | 5,000 元/月 | 城镇人均消费支出约 2,900 元/月 × 户均 2.4 人,扣除家人其他收入 [假设] | | 经营贷 | 店长动作 `loan: {amount, months}`,等额本息按月还 | 年利率 4.5% | [假设] | | 转让门店 | 店长动作 `exit: transfer`:转让费 = 近 6 个月平均月净利润 × 8(不为负);存货按成本 70% 作价;押金、预付房租退回;设备和装修随店转让,差额计资产处置损益;还清借款,经营结束 | — | 转让费倍数 [假设] | | 退租关店 | 店长动作 `exit: close`:无转让费;房租押金不退并付 3 个月房租违约金;加盟保证金退回 | — | [假设] | | 续租 | 租期(36 个月)到期自动续约,房租上涨 | +5% | [假设] | - **经济利润**照旧 = 净利润(已扣所得税)− 店主劳动 × 22 元/小时 − 实收资本 × 3%。店主提款不影响经济利润,但影响现金和抗风险能力。 - **开第二家店**(多店经营)还没做:需要同时模拟两家自有门店共享同一片居民,见第 13 节。 - **破产**:货币资金 < 0 且信用额度用尽,当天无法支付到期款项 → 店铺倒闭,模拟结束,记录存活天数。 --- ## 10. 实验运行器 一个实验 = 一个配置文件: ```yaml name: 收银台陈列冲动商品 base: default.yaml # 默认场景 days: 365 runs: 100 # 每组重复次数,种子 1..100,各组共用随机数流 manager: rule_based control: control groups: control: {manager.checkout_impulse: false} treatment: {manager.checkout_impulse: true} primary: net_profit # 事先指定一个主要指标 metrics: [net_profit, economic_profit, revenue, gross_margin, days_run, stockout_rate, spoilage_rate] # sweep: {param: market.beta_d, values: [3, 4, 5]} # 可选:敏感性分析,每个值都跑一遍各组 ``` - 参数路径必须存在于默认配置,写错立即报错(不会悄悄新建一个没人读的参数)。 输出: - 每次运行的指标表(CSV) - 组间比较(按种子配对):均值差、t 分布 95% 置信区间、配对 t 检验、效应量 dz(差值均值 / 差值标准差);0/1 指标(是否破产)用精确 McNemar 检验 - 多重比较:事先指定的主要指标单独报告;其余指标做 Holm 校正,结论按校正后 p 值 - 复现记录:summary.json 里存实验配置、种子列表、代码指纹(sim/ 与默认配置的哈希)、Python 和 numpy 版本、时间;每次运行另存到 `history/时间戳/`,不覆盖 - 选定几次运行保存完整事件记录,供可视化回放 **敏感性分析**:`sweep: {param, values}` 对一个参数做扫描,每个值都跑全部组;网页画出各组指标随该参数变化的曲线。**涉及定价的结论必须对价格敏感度(`market.types.*.beta_p`)做扫描**:利润最高的价格位置很依赖它,而它在中国没有直接数据。 --- ## 11. 校准与验收(规则版店长、默认场景、365 天) 模拟结果的中位数要落在以下范围,否则先调参数(主要调 α_0、λ、β_d)再做实验: | 检查项 | 目标 | |---|---| | 日均销售额 | 2,000–3,500 元 | | 客单价 | 15–22 元 | | 日均客流 | 120–220 人 | | 毛利率 | 16–22% | | 香烟销售占比 | 30–40% | | 时段收入分布 | 与第 1 节 CCFA 分布形状相近(各时段偏差 ≤ 5 个百分点) | | 会计净利率 | 3–12% | | 短保商品报废率 | ≤ 5% [假设](纯牛奶改为常温长保、每天到货后,规则版店长几乎不过期) | | 价格 | 利润对价格倍数存在内部最优(不在 0.8–1.2 的边界上),`tools/price_curve.py` | | 存活 | 规则版店长 365 天内破产率 < 10% | | 定性 | 雨天客流下降、夏季冷饮上升、关门越早晚间销售越少、提价后客流逐渐流失(不是瞬间) | | 会计 | 每月试算平衡;三张报表勾稽一致(现金流量表期末现金 = 资产负债表货币资金) | --- ### 实测结果(每种业态 12 个种子,`experiments/calibration.yaml`;居民按户生成、财务模块开启) | 指标 | 目标 | 独立社区店 | 轻加盟 | 分成加盟(60 ㎡) | 行业参照(CCFA 2024,连锁) | |---|---|---|---|---|---| | 日均销售额 | 2,000–3,500 | 2,810 | 3,815 | 4,832 | 4,634 | | 日均客流 | 120–220 | 173 | 237 | 298 | — | | 客单价 | 15–22 | 16.3 | 16.3 | 16.4 | 非加油站便利店 15–20(连锁平均 20.4,被加油站店拉高) | | 毛利率 | 16–22% | 19.8% | 22.0% | 26.4% | 26.4% | | 净利率(税后) | 3–12% | 7.7% | 10.4% | 7.7% | 2.5%(含总部费用) | | 香烟占比 | 30–40% | 38.8% | 33.8% | 34.3% | 30.1% | | 短保报废率 | ≤ 5% | 0.3% | 0.2% | 0.1% | — | | 破产率 | < 10% | 0 | 0 | 0 | — | | 坪效(元/㎡/天) | 50–80 | 70 | 95 | 81 | 55.9 | | 时段分布 | 与 CCFA 相近 | 7–10 点 19%、10–14 点 23%、14–18 点 21%、18–22 点 31%、22–23 点 6% | | | 2024:6–10 17.2 / 10–14 21.8 / 14–18 21.6 / 18–22 27.1 / 22–24 9.4% | 财务(种子 1,一年):独立店所得税约 550 元、店主提款 6 万元、期末现金约 13 万元;两种加盟店所得税约 3,600–3,900 元。 ### 响应检验(`tools/response_check.py`,目标在 `config/response_targets.yaml`,3 个种子平均) | 改变什么 | 模拟结果 | 实证目标 | 出处 | 结论 | |---|---|---|---|---| | 经营中途整体提价 10%,之后 8 周件数 | −7.4% | −2% 至 −8% | Hoch, Drèze & Purk 1994(86 家超市实验,约 −3%) | 通过 | | 同上,之后 1 年 | −20.5% | 无直接实证;要求利润最高点在参考价之上 5–20% | 便利店方便溢价 | 最高点约 ×1.1 | | 350 米外新开同业态便利店,60 天销售 | −21% | −10% 至 −22% | Nishida(冲绳便利店,−14~−18%);Arcidiacono 等 2020 | 通过 | | 疫情封控 30 天,客流 | −16% | −8% 至 −20% | CCFA/毕马威:2020 年来客 −13.5% | 通过 | | 疫情封控 30 天,营收 | −4% | −10% 至 +2% | 同上:营收 −2.5%、客单价 +11% | 通过 | | 雨天营收(相对附近同星期非雨天) | +4% | −5% 至 +12% | Tian、Cao、Song 2021(国内 146 家便利店:雨天高于阴天) | 通过 | | 气温每升 1℃,饮料件数 | +1.8% | +0.5% 至 +3% | Hirche 等 2021(啤酒约 +1%/℃) | 通过 | | 某商品排面加倍,其销量 | +5.1% | +5% 至 +20% | 货架空间弹性 0.17–0.21(Curhan 1972;Eisend 2014) | 通过(偏下沿:计划购买为主的商品对陈列不敏感) | | 差评(约降 1 星),30 天客流 | −10% | −4% 至 −15% | Luca 2016(独立门店每星 5–9%) | 通过 | | 改 24 小时营业,销售额 | +12% | 无实证 | — | 仅报告 | | 临期折扣 0% → 30%,报废 | 基数接近 0,无法测 | −15% 至 −25%(Atan 等) | — | 待有报废的经营设定时再测 | - 本店顾客约 47% 住在 300 米内(日本住宅区便利店 300–500 米内来客约 60–70%,口径不同,仅作参考)。 - 事件检查(`tools/event_check.py`,事件后 30 天日销相对无事件):新店开张 −14%、门前施工 −47% [无实证,假设]、疫情 −5%、差评 −8%、价格战 −4%、热浪 +1%、供应中断 0%、涨租不影响销售、失窃激增使失窃损失约 4 倍。 - 会计检查由 `tests/test_engine.py` 自动执行(8 项):试算平衡、资产负债表平衡、现金流量表合计 = 期末现金、存货科目 = 批次库存成本、增值税计提与缴纳、所得税计提金额、经营贷还清、转让与退租后资产清零。 ## 12. 可视化(网页) | 页面 | 内容 | |---|---| | 店内俯视图 | 货架、冷柜、收银台;顾客小人进店、按动线走动、停留、排队、结账或放弃离开;可叠加热力图(各货架销售额 / 停留次数 / 缺货频率) | | 街区地图 | 居民位置(按类型着色)、本店与竞争对手;当天出行流向;可按"习惯去哪家店"给居民着色,看市场份额的空间分布 | | 经营仪表盘 | 每日销售额、客流、客单价、毛利率、库存与缺货、报废、现金余额;月度三张报表 | | 决策时间线 | 店长每次调价、改营业时间、换陈列、订货的标记,和业绩曲线对齐 | | 实验对比 | 各组指标分布(箱线图)、差值和置信区间、敏感性曲线 | | 播放控制 | 暂停、1×/10×/100× 速度、拖动时间轴跳到任意一天 | | 亲自经营模式 | 你当店长:每天在网页里订货、定价、调陈列,和规则版店长同场景比成绩 | 技术:Python 写模拟引擎和实验运行器;本地小服务器给网页提供"亲自经营"的实时交互;回放读取保存的事件记录。 --- ## 13. 还没做的(后续版本) - **开第二家店**(多店经营):两家自有门店共享同一片居民、互相分流;需要你确认后再做。 - Claude 店长:读经营数据、用自然语言说明理由的大模型店长(需先在终端登录 Claude 命令行或提供 API key)。 - 社区生鲜超市业态:可用 2023 数学建模国赛 C 题的国内商超蔬菜流水估计生鲜定价、打折和损耗。 - 附加服务:快递代收、外卖平台接单、会员卡;品牌商免费冰柜、量大进货折扣。 ## 14. 数据缺口(研究时需做敏感性分析) | 参数 | 现状 | |---|---| | 一单买几样、品类搭配 | 国内无公开便利店小票数据,假设;宏观运营和财务研究影响小 | | 各类型到店频率 λ | 只有艾媒的总体频率分布,细分为假设 | | 长期价格敏感度(β_p 整体缩放) | 按"利润最高点在参考价之上 5–20%"标定,无直接实证 | | 门前施工的影响、转让费倍数、店主生活费 | 假设 |