这个是线性规划。假设所有的站点分别为 s0, s1, s2, s3...sn ,共有 m 路车分别为 b0, b1, b2...bm 。然后 N_s0_b0 来表示 b0 路车在站点 s0 分配的人数。
那么可以针对所有的 N_si_bi ,列出一组线性不等式。
首先是在 s0 这个站点,m 路车一共分配的人数要大于该站点等待上车的人数,即 N_s0_b0 + N_s1_b0 + N_s2_b0 + ... + N_s0_bm >= s0 站等待人数
然后是对于 b0 路车,所有 n 个站点上这辆车的人数小于该路车的空位,即
N_s0_b0 + N_s1_b0 + ... + N_sn_b0 <= b0 路车空位
把上面的不等式同样应用到所有的 n 个站点和 m 路车,就可以得到 n + m 个线性不等式。
线性规划就是解决这种问题的。可以搜一下现有的线性规划库。英文叫 Linear Programming 。
举几个我考察的例子:
https://github.com/jvail/glpk.js GPL ,似乎适合大规模的求解,比如上万的变量和约束?
https://www.npmjs.com/package/lpsolver MIT ,最简洁,但只有标准形式
https://www.npmjs.com/package/lp_solve LGPL ,比较受欢迎,包大小比较大 2MB ,性能好,规范
https://www.npmjs.com/package/yalps MIT ,看起来很合适,性能也不错,上千的变量和约束只需要几十毫秒
https://www.npmjs.com/package/simple-simplex MIT ,看起来也不错,使用友好
https://github.com/IainNZ/SimplexJS js ,拿来就能用,但不规范
https://www.npmjs.com/package/@bygdle/javascript-lp-solver 似乎的新增加的,
来自
https://github.com/JWally/jsLPSolver ,300 多个 star ,性能也不错。