news 2026/10/2 2:10:23

HowToCook 决策吃什么:用数学公式与规则约束解决每日点菜难题

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
HowToCook 决策吃什么:用数学公式与规则约束解决每日点菜难题
  • 文档
  • 教程

【免费下载链接】HowToCook

Programmer's guide about how to cook at home.

项目地址:https://gitcode.com/GitHub_Trending/ho/HowToCook
点击查看免费下载

每天面对厨房和菜谱,最难的不是烹饪本身,而是"今天到底吃什么"。在 HowToCook 项目(README.md 中将其列为入门准备文档之一)中,这个问题被严肃对待:与其靠灵感随缘,不如用一条可复现的数学模型把"点菜"变成一次确定性的计算。本文以 如何选择现在吃什么 为核心骨架,完整推导荤素配比公式,并结合仓库数百道菜谱的目录分类,给出从"人数"到"具体菜品"的完整决策链路。

为什么需要形式化决策

做饭前的最大难题是选择吃什么。HowToCook 项目的核心理念是"用更清晰精准的描述来整理常见菜的做法"(见 README.md),它对菜谱格式本身也提出了严格约束:菜谱模板要求包含预估难度星级、卡路里、原料定量与可复现步骤(参考 示例菜)。决策吃什么同样遵循这一精神——用数学语言描述,把主观纠结变成约束求解。

计算荤菜和素菜数量

两条基本规则

决策的第一步是确定这一餐做几道菜,以及荤素配比:

  • 菜的数量 = 人数 + 1。
  • 荤菜比素菜多一个,或一样多即可。

由此得到荤菜数量和素菜数量,再在菜谱中选择即可。

形式语言描述

当有人数N时,设素菜数为a,荤菜数为b,N、a、b均为整数。此时有下列不等式组:

  • a + b = N + 1
  • a ≤ b ≤ a + 1

方程组的第一条约束保证菜的总数与人数匹配(多出 1 道,兼顾丰盛度),第二条约束保证荤菜数量不高于素菜数量加 1、也不低于素菜数量,即荤菜要么与素菜持平、要么只多一道。

解得:

const a = Math.floor((N + 1) / 2); const b = Math.ceil((N + 1) / 2);

Math.floor向下取整得到素菜数,Math.ceil向上取整得到荤菜数,两者恰好互补。代入几个典型值验证:1 人用餐时a=1, b=1(一荤一素共 2 道);2 人时a=1, b=2(一素两荤共 3 道);4 人时a=2, b=3(两素三荤共 5 道);8 人时a=4, b=5(四素五荤共 9 道)。可见随着人数增长,素菜与荤菜数量几乎同步增加,仅差 0~1 道,符合"荤菜比素菜多一个或一样多"的约束。

边界情况讨论

  • 当N+1为偶数(即人数为奇数)时,a = b,一桌菜荤素持平;
  • 当N+1为奇数(即人数为偶数)时,b = a + 1,荤菜恰好多一道。

这个模型的本质是保证"荤素均衡且总量可控",避免出现一桌全是肉的失衡搭配。

菜的选择:从数量到具体菜品

得到荤素数量后,第二步是在 HowToCook 仓库的菜谱库中挑选具体菜品。仓库按目录对菜谱做了清晰的分类(见 README.md),正好与荤素决策衔接:

  • 素菜目录 dishes/vegetable_dish:收录酸辣土豆丝、西红柿炒鸡蛋、蒜蓉西兰花等数十道快手素菜;
  • 荤菜目录 dishes/meat_dish:收录小炒肉、红烧肉、宫保鸡丁等以猪、牛、羊、禽为主的菜肴;
  • 水产目录 dishes/aquatic:收录清蒸鲈鱼、油焖大虾、小龙虾等鱼类与虾蟹类;
  • 此外还有汤粥、主食、半成品加工等独立分类,可作为配菜与主食的补充。

在此基础上,原文档给出了几条经验性的选择约束:

  • 如果人数超过 8 人,考虑在荤菜中增加鱼类荤菜(对应仓库 dishes/aquatic 分类,大型聚餐中鱼类兼具分量与仪式感);
  • 如果有小孩,考虑增加有甜味的菜(可参考 糖醋排骨、糖醋里脊、拔丝土豆 等酸甜口菜品);
  • 考虑增加特色菜、拿手菜(即自己最擅长的稳定发挥);
  • 注意决策荤菜时不要全部使用同一种动物的肉,考虑顺序为:猪肉、鸡肉、牛肉、羊肉、鸭肉、鱼肉;
  • 不要选择奇奇怪怪的动物做荤菜。

其中"荤菜动物多样性"约束在仓库分类中同样有迹可循:荤菜目录下猪肉类(小炒肉、红烧肉、糖醋排骨)、鸡肉类(宫保鸡丁、黄焖鸡、可乐鸡翅)、牛肉类(酱牛肉、黑椒牛柳)、羊肉类(萝卜炖羊排、煎烤羊排)、鸭肉类(啤酒鸭、血浆鸭)各自成菜,按顺序轮换即可保证餐桌肉类的多样化,也兼顾了采购与烹饪的常规性。

补充工具:仍然拿不准怎么办

如果完成上述计算与筛选后仍然拿不准,原文档建议使用 今天吃什么? 工具来选择。该工具在仓库 README.md 的"衍生作品推荐"中同样被收录,定位为"今天吃什么?的决策工具,帮助你快速选择合适的菜谱",可作为数学决策之外的随机兜底方案。

决策流程总结与扩展思考

完整的决策流程可以归纳为三步:

  1. 定量:由人数N通过a = floor((N+1)/2)、b = ceil((N+1)/2)计算素菜数与荤菜数;
  2. 定型:按人数、用餐对象(是否有小孩)、特色菜偏好等约束过滤候选菜;
  3. 定菜:荤菜按猪肉→鸡肉→牛肉→羊肉→鸭肉→鱼肉的顺序轮换,避免同质化,最终在 dishes/vegetable_dish、dishes/meat_dish、dishes/aquatic 等目录中落定具体菜谱。

值得注意的是,原文档的数学模型只约束了"数量与荤素比",并未对卡路里、烹饪时间、厨房现有原料做约束。HowToCook 的菜谱本身携带了预估烹饪难度、预估卡路里与定量原料信息(如 小炒肉 标注难度 ★★★ 与卡路里 2873 大卡,酸辣土豆丝 标注难度 ★★ 与卡路里 374 大卡),因此可以推断:当决策进入"同品类多选一"的环节时,结合这些元数据做二次筛选,是这一决策模型自然的外延——这也与本仓库"精准化、可复现"的整体风格保持一致。

最终,把"吃什么"从一道开放式主观题转化为"输入人数、输出菜谱清单"的确定性计算题,是这份文档对程序员群体最直接的贡献。

  • 文档
  • 教程

【免费下载链接】HowToCook

Programmer's guide about how to cook at home.

项目地址:https://gitcode.com/GitHub_Trending/ho/HowToCook
点击查看免费下载
上一篇:StreamFX插件终极指南:免费提升OBS直播效果的完整教程
下一篇:Open-Falcon falcon-plus API 实战:删除监控策略(DELETE /api/v1/strategy/:sid)完全指南

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/2 2:09:54

CentOS Stream 10 vsftpd虚拟用户配置全解析:PAM认证与SELinux避坑

接着上一篇说。CentOS Stream 10 上跑 FTP 服务器,基础安装大家都能搞定,但真正到了生产环境、多人共享这一层,基本都会转向「虚拟用户访问」。上一篇里我们已经把 vsftpd 装好、匿名和本地用户也调通。这回来硬核的:虚拟用户。说…

作者头像 李华
网站建设 2026/10/2 2:09:33

Hadoop核心组件原理、伪分布式搭建与HA高可用实战指南

如果你正准备学大数据,随便打开一份学习路线图,大概率第一个跳出来的名字就是Hadoop。Hadoop在大数据领域的地位,有点像操作系统里的Linux、编程语言里的C语言,不把它搞明白,后面学Hive、Spark、Flink都会有一种悬在半…

作者头像 李华
网站建设 2026/10/2 2:09:06

缓存与数据库一致性实战:从Cache Aside到延迟双删

你翻过线上日志没?我翻过。凌晨两点,用户明明支付成功了,状态却一直显示“未支付”,后台查订单数据库里状态明明是“已支付”,但用户页面读到的还是旧值。最后定位出来,不是支付接口的问题,是缓…

作者头像 李华