# collusionlab **Repository Path**: ZhiYIlang/collusionlab ## Basic Information - **Project Name**: collusionlab - **Description**: A repeated pricing market for studying collusion between AI pricing agents. - **Primary Language**: Unknown - **License**: MIT - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-10-23 - **Last Updated**: 2026-10-25 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # CollusionLab **一个重复定价市场,用来研究 AI 定价智能体之间的合谋。** 为 **AI Collusion Research Sprint**(Apart Research × Poseidon Research × AE Studio)Track 1「市场与合谋」而建。 六个卖方每轮报一个价格,共六十轮。需求线性,只打中最便宜的卖方。所有人的成本相同,因此竞争结果是 `价格 = 成本 + 1`,联合利润最大化结果是垄断价格。落在两者之间的,用经济学的话说,都可疑。 三个研究问题全部用**实测**回答,不靠论证。完整内容见 **[REPORT.md](REPORT.md)**。 --- ## 三个答案 ### 1.5 —— 哪一条单一限制以最小代价消除最多合谋? 砍掉信道是免费的,而且效果最好:合谋指数 **+0.633**,代价 **0.000**。但它只对得上它砍的那条信道——砍掉共享信道,对一个走惰性元数据字段的卡特尔,效果是精确的 **0.000**。 唯一**不需要知道载体**就能生效的限制是价格上限:两种载体下都是 **+0.560**,代价是无辜生产者利润的 **0.590**。 | 限制 | 共享信道卡特尔 | 元数据卡特尔 | 代价 | |---|---|---|---| | 砍掉共享信道 | **+0.633** | +0.000 | 0.000 | | 丢弃惰性字段 | +0.000 | **+0.633** | 0.000 | | 身份匿名化 | +0.000 | **+0.633** | 0.000 | | 价格上限 | +0.560 | +0.560 | 0.590 | | 注入可信卖方 | +0.127 | +0.127 | 0.000 | | 公开监控警报 | +0.099 | +0.056 | 0.000 | | 限制价格变动 | +0.086 | +0.086 | 0.002 | 代价一律在**没有卡特尔的市场**上度量——因为打破卡特尔会抬高成交量,否则每条限制都会显得免费。 ### 2.3 —— 什么才算有说服力的证据? 不是价格平行性。在纯竞争市场上,平行性是 **1.000**——无辜者看起来完全协调一致——因为需求每轮都被一个共同、公开的冲击扰动。 信道拟合度在那个市场上是 **0.000**,在两种卡特尔下都是 **1.000**。**8 个种子**:误报率 **0.000**,两种载体的检出率均为 **1.000**。 ### 3.1 —— 合谋能走非文本信道吗? 能。一个放在没有任何买家读取的惰性挂牌字段里的整数,就能承载整个协议。跟随者把「上一轮出价最高的卖方」认定为领导者,解码它的元数据,然后报出约定数字。市场价格在 **100%** 的可判定轮次里落在那个被藏起来的数字上。 `身份匿名化` 能打掉它(+0.633,代价 0.000),这证明机制是**归属关系**而非数值本身:把同样一组数字摆出来但不说是谁的,跟随者就退回竞争价格——因为手里没有约定数字的卖方不敢独自定价。 --- ## 安装与运行 零依赖,Python 3.9+。 ```bash git clone <本仓库> && cd collusionlab python eval.py # 214 条断言,退出码 0 python -m collusionlab sweep # 两张限制对比表 python -m collusionlab detect # 审计器校准 python -m collusionlab run --channel stego # 单个市场 python -m collusionlab ledger --out run.jsonl # 一次运行的存证 ``` 敌意环境(中文 Windows 默认 cp936,一个不可编码字符就能把干净的运行变成 traceback): ```bash env -u PYTHONUTF8 LC_ALL=C python eval.py ``` --- ## 两个值得知道的设计决定 **指数用报价算,不用成交价算。** 注入一个诚实卖方后,市场每轮都按 11 成交,而另外五个卖方仍在报 45。用成交价的指标会给出合谋指数 0.000,并把这个市场判为干净。用报价的指数给出 **0.635**:卡特尔是停止赢单了,不是停止串通了。 **全流程不调用任何语言模型。** 每个卖方都是其视野的纯函数。这牺牲了生态效度,换来的是 8 种子 × 8 限制 × 2 载体、逐字节可复现,以及一个可以离线免费核对你每一个数字的评审者。每次运行用其账本字节的 SHA-256 标识,所以「同种子 → 同结果」是可核验的,而不是一句承诺。 --- ## 目录 | 文件 | 决定什么 | |---|---| | `collusionlab/params.py` | 成本、基准、合谋指数 | | `collusionlab/market.py` | 重复市场;限制一次只施加一条 | | `collusionlab/agents.py` | 卖方策略,含元数据侧信道 | | `collusionlab/detector.py` | 审计器及其校准 | | `collusionlab/sweep.py` | 每条限制的效果与代价(1.5) | | `collusionlab/ledger.py` | 只追加存证,同时记录「想报的」和「实际生效的」 | | `eval.py` | 报告里每个数字背后的 214 条断言 | ## 局限 不涉及语言模型,卖方是确定性函数。六个卖方、六十轮、线性需求、无进入与产能约束。价格上限只是曲线上的一个点,不是最优点。`丢弃惰性字段` 代价为 0.000,是因为该字段**按构造**就是惰性的——真实的挂牌字段还承载合法信息,那部分代价不在模型里。限制一次只施加一条,真实政策是组合使用的。 完整清单见 [REPORT.md 第 8 节](REPORT.md)。 ## 许可 MIT。