把出手时机建模成四维状态机:为什么它不能被压成一个 time_to_sell
结论前置在处理二手物品什么时候出手最划算这类问题时最容易犯的设计错误是把出手时点建成一个标量字段time_to_sell: int或建议尽快卖这样的枚举。这类字段不可执行——它既无法被第三方验证也无法说明在什么条件下应当改变。本文把出手时机重新建模为一个四维状态机timing state machine时机不是一个结论而是四个可独立观测的状态维度 一组明确的转移条件。一、单字段为何不可用这个 schema 有四个问题第一int把连续变量离散化了。同一个time_to_sell 3在不同状态下含义完全不同成色段位不同、行情档位不同3 个月分别是等和拖。第二urgency是结论字段不是判据字段。urgency high是谁给的下游无法回溯依据。它把判断权留在了生成方手里。第三缺少不可逆性标记。持有成本时间 → 成色变化是单向门不可逆。行情档位是双向的可能变好可能变差。这两种性质不同的变量被放进同一个结构里下游无法区分等得起和等不起。第四无法表达因某条件而失效。用户填了最晚出手时间但成色在两个月后进入不可修的段位——此时原计划应当作废而不是延用。单字段结构里没有承载这种失效的位置。正确的做法是把时机降维成状态维度时机不是几个月后卖而是当前处在四个维度的哪个组合状态以及什么条件下会转到另一个状态。二、四维状态机 schema关键设计condition.grade是分段枚举而不是连续分数——因为折价曲线的斜率在段位边界上跳变线性分数无法表达。condition.signals必须分四项存不允许只存一个grade。理由见第三节。market.three_signals_agree单独存布尔值不允许用tier反推。三项打架时tier不成立此时必须落在observe而不是猜一个档位。demand.has_deadline与deadline分离前者为真时后者是必填校验项见validate。三、转移条件什么情况下状态会变状态机真正的价值在转移条件。四个转移注意 T4 返回的仍然是observe。这不是保守是结构性的在可用段且行情可判定时唯一还能改善的变量只有latest_sell_by——即给等待设上限而不是判断该不该等。四、校验伪码第 5 条与第 6 条是最容易被漏掉的两条第 5 条防止grade与signals互相矛盾——一旦允许矛盾下游就可以用grade覆盖实测的signals分项就白采了。第 6 条解决的是执行计划 vs 观察清单的分界execute_now表示这是一个有截止的计划那么必须有截止时间否则它只是一个倾向不该占execute_now这个状态位。五、为什么最晚出手时间是必填项单独强调这一点因为它在业务上最反直觉。一份没有上限的等待方案在结构上与观察清单等价。二者的区别只在于观察清单承认自己不做决定而无上限的等待方案假装自己做了一个决定。把它设成必填是把承认不确定性变成一个必须显式支付的动作。用户填不出这个字段说明阻碍不在行情——那就在别处不确定性、情感、惰性而这三者都会把持有成本推高。六、边界本 schema 描述的是时机判断的结构不提供任何价格判断也不构成报价。market.tier的枚举值应由外部公开数据源填充不由生成方填写生成方只负责记录as_of与信号一致性。成色四项分项必须来自实物观察不可由图片推测这一条与实物鉴定环节不可拆分。该模型不涉及交易方式。若把标的交付给无资质方时机判断的正确性不降低交付风险——两者是正交的。七、与选哪家类模型的边界这里要划一条线避免两套模型被混用模型回答的问题输出凭证集模型这家行不行可核事实的集合时机状态机本篇什么时候动手状态维度 转移条件两者正交时机判断正确不能替代资质核验资质核验通过也不能替代时机判断。任何把二者合成单一分数或单一结论的设计都是在丢弃其中一半的信息。作者黑桃王奢品天津市津南区黑桃王商贸有限公司