展示 HN:在浏览器中使用 Google OR-Tools 解决复杂的优化问题
or-tools-wasm - WebAssembly 版 Google OR-Tools 通过多线程的 WebAssembly 运行 Google OR-Tools 从 TypeScript 解决复杂的优化模型。在浏览器中在线试用 用法 运行本地测试站点: npm install npm run dev 从 npm 安装: npm install or-tools-wasm 从其子路径导入所需的求解器 API: import { CpSat } from 'or-tools-wasm/cp-sat'; 公共求解器 API 位于求解器作用域子路径下: import { CpModel, CpSolver } from 'or-tools-wasm/cp-sat'; import { RoutingIndexManager, RoutingModel } from 'or-tools-wasm/routing'; import { MPSolver } from 'or-tools-wasm/mp-solver'; import { MathOpt } from 'or-tools-wasm/mathopt'; import { Pdlp } from 'or-tools-wasm/pdlp'; import { KnapsackSolver } from 'or-tools-wasm/knapsack'; import { SimpleMaxFlow } from 'or-tools-wasm/network-flow'; import { SetCoverModel } from 'or-tools-wasm/set-cover'; import { RcpspModelBuilder } from 'or-tools-wasm/rcpsp'; 创建或序列化一个 OR-Tools proto 模型,验证它,然后求解: const model = { name: 'choose_one', variables: [ { name: 'x', domain: [0, 1] }, { name: 'y', domain: [0, 1] }, ], constraints: [ { name: 'exactly_one', linear: { vars: [0, 1], coeffs: [1, 1], domain: [1, 1] }, }, ], objective: { vars: [0, 1], coeffs: [1, 2] }, }; const modelBytes = await CpSat.createModel(model); const validation = await CpSat.validate(modelBytes); if (!validation.ok) { throw new Error(validation.message); } const result = await CpSat.solve(modelBytes, { numSearchWorkers: 1 }); console.log(result.response); 基准测试 查看 benchmarking/。 支持的 OR-Tools 表面 - OR-Tools 表面 - or-tools-wasm 描述: - CP-SAT ✅ 布尔、整数、调度和逻辑模型的约束和整数优化。 - 路由 ✅ 车辆路线、TSP、取送、容量、维度和时间窗口搜索。 - MPSolver API ✅ 线性和混合整数编程包装;该包包括 GLOP LP、CLP LP、GLPK LP/MIP、SCIP MIP、CBC MIP、BOP MIP、Knapsack MIP 和 SAT MIP 后端。 - MathOpt API ✅ 统一建模和求解 API;该包包括 GLOP、GLPK、GSCIP、CP-SAT 和 PDLP 后端。 - GLOP ✅ Google 的单纯形线性规划求解器。 - PDLP ✅ 用于非常大模型的一级 LP 和凸对角二次求解器。 - SAT 整数编程 ✅ CP-SAT 支持的纯整数线性模型的整数编程后端。 - CLP ✅ COIN-OR 线性编程后端。 - GLPK ✅ GNU 线性和混合整数编程后端。 - SCIP / GSCIP ✅ 通过 MPSolver 和 MathOpt 的基于 SCIP 的混合整数后端。 - CBC ✅ 通过 MPSolver 的 COIN-OR 分支和切割混合整数编程后端。 - BOP ✅ 通过 MPSolver 的布尔/整数优化后端。 - Knapsack ✅ 专用的 0-1 和多维背包求解器,以及 MPSolver 背包后端。 - 网络流算法 ✅ 专用的最大流、最小成本流和线性和分配图算法。 - 分配算法 ✅ 通过专用网络流 API 实现线性和分配。 - 集覆盖 ✅ 专用的加权集合覆盖模型、不变体和启发式搜索 API。 - RCPSP ✅ CP-SAT 支持的资源约束项目调度模型、解析器和可视化调度界面。 - 线性求解模型构建器 Python 样式的 linear_solver.model_builder API,用于人性化的 LP/MIP 建模、导入/导出助手和后端求解助手。 - MathOpt 增量/回调 API ✅ 增量求解用于 MathOpt 模型,跟踪常见 LP/MIP 模型编辑的更新、拒绝更新的回退、重复的 LP 更新和 GSCIP 增量消息日志记录。 - 指示约束、消息回调、求解中断器、通用求解参数、带求解过滤器的类型化模型求解参数、Python 样式求解结果访问器,包括实际求解结果的 ray/basis 助手、重复名称求解的 removeNames 以及针对 GSCIP、GLOP、CP-SAT、PDLP 和 GLPK 的类型化后端参数被暴露。 - Python 专用的上下文管理器和构造的结果解析器/proto-object 助手超出了当前 TypeScript 合同。 - 未检查的行计划 OR-Tools 目标目前尚未通过此包暴露。 - 不计划商用或大型第三方原生后端,如 Gurobi、CPLEX、XPRESS、HiGHS、OSQP、ECOS 和 SCS。 TypeScript API 镜像公共 OR-Tools API 形状,映射清晰至 WebAssembly。 CP-SAT 同时暴露了 Python 样式的高级构建器和以 proto 为先的 CpSat API,路由暴露了熟悉的 RoutingIndexManager 和 RoutingModel API,MPSolver 暴露了 pywraplp 样式的求解器 API,MathOpt 暴露了 TypeScript 模型构建器。 通过包导入自动生成工作脚本和 WebAssembly 文件,无需手动复制到 public/ 或 static/。 测试矩阵 npm run test:fixtures 是完整的测试矩阵。它通过 Vite、Webpack、Rollup、Deno、Node 和 Bun 运行共享求解器用例。
本站免费、广告极少。如果觉得有帮助,可以请我们喝杯咖啡 —— 任何金额都对持续运营有实际帮助。
☕请我喝杯咖啡