问题标签 [or-tools]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
2354 浏览

python-3.x - How to use ortools to solve quadratic programming in Python?

For example, how can I simply find the minimum of (x-1)^2 via ortools in Python?

I read the document of ortools, but I cannot find it. I knew it does not belong to linear optimization, but I cannot find a proper type in its document.

0 投票
0 回答
140 浏览

c# - C# Google 或工具将 LinearSolver 输出重定向到字符串

我已经使用 Google 或工具 LinearSolver 实现了几个模型。在后端它是 SCIP,我正在使用

如果我将我的应用程序作为控制台应用程序运行,则输出将直接进入控制台。我尝试设置Console.SetOut为自定义 TextWriter 实现,但这似乎不起作用。

我的问题是,我在 ASP.NET 项目的 BackgroundWorker 中使用求解器,并且需要在求解时从求解器获取输出。(如关于 MIP-GAP LB 等的状态报告)

0 投票
1 回答
152 浏览

python-3.x - 使用 ORTools 实现自定义酸洗代码

我正在使用多处理,并且我知道 pickle 模块实现了用于序列化和反序列化 Python 对象结构的二进制协议。

而且我还知道可以腌制哪些类型的数据,例如 Integer、List、Set 和 ...。

但是,如果我想使用其他不是 pick_able 的数据,我应该怎么做?

更准确地说,我想使用多处理来并行 ORTools 中的创建约束。打击是我的代码:

但我得到了这个错误:

我应该怎么做才能解决这个问题?

0 投票
1 回答
54 浏览

or-tools - 在 MinCostFlow 求解器中,如果最大成本幅度太高,我如何提前预测?

我在一个程序(特别是库中的 MinCostFlow 类)中使用 Google OR-tools 库(v6.4)。根据我的要求,我的成本矩阵由浮点值组成。但是,由于此类的实例只能接受具有整数成本的弧,因此我将每个成本乘以 10 的幂的比例因子(目前为 10 16),然后将其作为弧的成本传递。

问题是当节点数量很高时(例如:10000 个源和 10000 个接收器),我在运行时收到以下错误:

在运行算法之前,如何预测给定节点数量的特定成本值是否太高?这将允许我适当地选择比例因子,以防止运行时失败。

0 投票
2 回答
1289 浏览

python - 如何在 ORTools 中删除约束

有没有办法在不清除求解器并首先创建约束的情况下从求解器中删除定义的约束?

假设我的问题是最大化三个变量的总和,其中两个约束

约束 1:变量 2 应介于 8 - 10 之间

约束 2:变量 3 应介于 5 - 10 之间

现在在第二次运行我的代码时,我想删除约束编号 2,但我找不到任何操作来执行此操作,唯一的方法是清除求解器并首先定义约束。

在这个半代码中,约束的数量是有限的,但实际上,在我的真实代码中,约束的数量很多,我不能从一开始就定义它们。

0 投票
1 回答
1163 浏览

optimization - 我如何向 Google ortools 添加一组值而不是下限和上限?

在文档和我能找到的所有示例中......至少在护士调度方面,每个人都只是在 {1,4} 的搜索空间内声明班次值,让我们说班次 1,2,3,4....

我想在调用时避免使用值范围solver.IntVar(lowerbound, upperbound, ...)

我想IntSolver([available values that you can choose], ...)

我创建了一个包含所有班次的矩阵,作为从第一天到最后一天的列。我的行索引无关紧要,但在每一天/班次列中,我有护士的索引值,按该班次出价最高的降序排列。然后我想创建一个约束,如果我选择一名护士,我会选择通过列中的其他约束允许的最高出价,但是鉴于 python 的文档或工具有限,我不知道如何做到这一点IntVar

0 投票
2 回答
830 浏览

python - 使用 Google or-tools 安排员工排班

我是谷歌或工具的新手,目前我正在解决员工调度问题。该问题有一个约束条件,即根据轮班的客流量,将员工分配到轮班。每个员工从 1 到 n 进行排名,并被分配到班次,这样排名更高的员工就会被分配到更高的班次。我有轮班优先级和员工等级的数据,但我无法继续处理要提供给求解器的约束。请帮忙。

0 投票
0 回答
57 浏览

or-tools - 为什么改变起始位置的顺序会导致不同的解决方案?

我有一个案例,其中路线应从特定的起始位置开始并结束到一个位置。

我发现包含所有节点(包括开始位置和结束位置)的位置数组,我发现开始位置顺序对于解决方案确实很重要。

为了更容易解释,这里是我在关闭节点之后插入开始位置的解决方案: 开始位置排序

这是我在位置列表中交换起始位置顺序时的解决方案: 以不同顺序开始位置

无论我使用什么策略,正如我在这里解释的那样:

视频缩略图
在YouTube上

视频缩略图
在YouTube上

我得到的解决方案是:

任何想法?

0 投票
1 回答
757 浏览

python - 车辆在仓库重新装载并继续

我尝试使用 ORTOOL 和 Python 生成交付计划。我的限制如下:

  1. 每辆车都有一个开始时间和一个结束时间
  2. 每辆车都有自己的存储物品容量,在仓库取走
  3. 每辆车都有自己的速度。

对于 1 和 3,使用 AddDimensionWithVehicleTransits 可以正常工作。对于第二个约束,如果车辆是空的,它必须返回仓库取回物品并重新开始。

我已经看过 refuel 示例,因此设置容量 < 0 的节点可以正常工作。但在我的情况下,仓库是加油点,求解器不会让车辆返回它。

我的维度是这样设置的:

基本上,最大容量为 4:

我需要的:

关于如何将加油点放到仓库的任何想法?

问候

0 投票
0 回答
1149 浏览

python - 最小化车辆之间的最大距离

建议使用跨度成本系数来最小化车辆之间的最大距离

取自https://developers.google.com/optimization/routing/vrp#example

当成本函数不是基于距离(即燃料使用)而是基于行驶时间并且目标是让最后一辆车尽早返回站点时,这尤其有用。

Q1:我可以将目标函数定义为车辆之间的最大成本(而不是总成本和全局跨度的总和)吗?

如果这是不可能的,我想知道原因是什么。我可以想象A)很难实现这样的约束或B)我错过了一些导致不良解决方案的隐含缺点(与使用跨度约束相比)。

我注意到全局跨度约束,即使我将其设置为 1000(但这意味着什么?),甚至不能保证所有车辆都在使用。当然,我可以通过使用更多车辆来改进该解决方案,对吧?

编辑:这是一个最小的工作示例。5 辆车可用于服务 20 个站点。我将停靠点之间的统一行驶时间定义为 1 小时,因此最佳解决方案是每条路线包含 4 个停靠点,并且所有车辆在 4 小时后返回站点。在没有全局跨度约束的情况下,一辆车完成所有工作的总时间为 20 小时。使用全局跨度约束(系数 = 1000),两辆车各服务 10 个站点。

解决方案绘图仪的输出:

车辆 0 的路线:0 -> 11 -> 12 -> 13 -> 14 -> 15 -> 16 -> 17 -> 18 -> 19 -> 0 路线的持续时间:10 小时

车辆 1 的路线:0 -> 10 -> 0 路线 1 的持续时间:2 小时

车辆 2 的路线:0 -> 0 路线 2 的持续时间:1 小时

车辆 3 的路线:0 -> 0 路线 3 的持续时间:1 小时

车辆 4 的路线:0 -> 9 -> 8 -> 7 -> 6 -> 5 -> 4 -> 3 -> 2 -> 1 -> 0 路线 4 的持续时间:10 小时

所有路线的总时长:24 小时