问题标签 [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 投票
4 回答
3555 浏览

java - Google OR-Tools:无法运行 java 示例 java.lang.UnsatisfiedLinkError:java.library.path 中没有 jniortools

我是Java新手,我想尝试用google or-tools解决车辆路线问题

只需尝试从这里运行 java 示例

但我得到了这个例外:java.lang.UnsatisfiedLinkError: no jniortools in java.library.path

有一行代码加载系统库“jniortools”。但我不知道从哪里得到那个库。

我正在使用 mac osx。

有任何想法吗?

0 投票
1 回答
532 浏览

python-3.x - 如何在不返回仓库的情况下定义 TSP?

使用 depot 参数初始化路由模型

但是如果我不关心仓库是哪个节点呢?我怎样才能允许开始和结束节点不同?

0 投票
1 回答
410 浏览

python - 在 Google or-tools 上定义出现次数

我正在尝试在 Python 上使用 Google Or-tools 构建一个非常简单的测试用例。我有一个包含 20 个整数变量的插槽的列表,我试图设置的唯一约束是从 0 到 4 的每个值都被看到 3 次。

例如,这将是一个解决方案:

我尝试了以下示例:

但是,它没有找到任何解决方案(如果我不设置时间限制,它永远不会完成)。

如果我用 删除约束Sum,则完成(根本没有约束)。

由于这个约束非常微不足道,我希望我写它的方式不正确。关于如何解决它的任何想法?

0 投票
1 回答
294 浏览

optimization - 具有边缘投资成本的最小成本流

我想使用 python Min-Cost Flow 求解器来构建新的网络。这意味着我有一个初始完整图,顶点是供应商或有需求。使用该算法应该告诉我,根据他们的成本,将使用哪些边来解决所有需求。与现有问题不同的是,一条边在使用时的成本不仅用单位成本来描述,而且还有与流量无关的这条边的投资。我一直在研究 networkx 和 or-tools 的源代码,但无法弄清楚如何调整它们以实现边缘的投资成本。有人有更好的主意或可以帮助我调整代码吗?

最好的问候贾斯图斯

0 投票
1 回答
901 浏览

python-3.x - GlobalSpanCoefficient 背后的直觉

我正在研究将车队中“最慢卡车”的成本降至最低的车辆路线问题。

所以现在目标函数应该涉及两个量:

  1. 所有车辆的所有过渡的总和(总距离),以及
  2. 最昂贵路线的成本

这些价值观是如何结合起来的?我假设全局跨度系数

distance_dimension.SetGlobalSpanCostCoefficient(100)

参与?那是加权和的系数吗

最慢的A卡车的成本B是多少?所有卡车的总距离是多少?

0 投票
1 回答
1001 浏览

java - 即使在成功加载所需的目标文件后,在加载 JNI 依赖项时也会在 Java 中出现 UnsatisfiedLinkError(未定义符号)

我正在为一个项目使用 Google OR-tools 库(v6.4)(尽管我的问题并不特定于这个库)。这由一个 jar 组成,它有一些本地依赖项(一堆“.so”/“.dylib”对象文件,取决于操作系统)。我的项目的这个构建是在 Ubuntu 14.04 上进行的

我面临的问题:在尝试在运行时(使用System.load())加载特定的目标文件时,我得到了一个 UnsatisfiedLinkError ,消息为“未定义的符号”(我在下面添加了堆栈跟踪)。但是,我正在加载在此之前定义此符号的目标文件,因此我不确定为什么会引发此错误。

我正在通过以下方式加载依赖项:目标文件在构建期间被打包到 Maven 创建的 jar 中,并System.load()在运行时被提取和加载(使用)。方法如下:

在所有依赖项的静态块内调用此方法:

在运行System.load()libdimacs.so 时,抛出 UnsatisfiedLinkError。堆栈跟踪:

但是,这个符号“_ZN6google14FlagRegistererC1IbEEPKcS3_S3_PT_S5_”存在于 libortools.so 中,它在 libdimacs 之前被加载。我通过运行以下命令验证了这一点:

这给了我以下输出:

System.load()因此,除非在加载包含目标文件时出现问题,否则似乎应该在调用时定义符号。为了检查目标文件是否已正确加载,我使用了此解决方案中详述的方法。除了该答案中详述的类之外,我在System.load()调用后添加了以下几行EnvironmentUtils.loadResourceFromJar()以打印最近加载的库名称:

输出(直到 UnsatisfiedLinkError 之前)如下:

所以 libortools.so 似乎加载正确,这意味着符号应该加载到内存中。完全相同的代码与相应的 Mac (".dylib") 依赖项完美配合(在 MacOS Sierra 10.12.5 上构建)。希望有任何解决此问题的建议。谢谢你。

0 投票
1 回答
1199 浏览

python-3.x - 时间窗口路由中松弛变量的定义

时间窗口约束定义为

time_dimension.CumulVar(node).SetRange(time_window[0], time_window[1])

和时间维度

routing.AddDimension(evaluator, slack_max, capacity, fix_start_cumul_to_zero, name)

CumulVar(node)和的允许值之间有什么关系slack_max?例如,假设时间窗口为(50,60),松弛时间为5。这是否意味着 cumul var 的45值也是可接受的,或者松弛是否与范围内的值有关?是否max_slack=0意味着 cumul var 的值必须是50or 60,在上面的示例中?

是否有关于我使用 or-tools 的路由模型的数学模型的论文或详细页面?

0 投票
1 回答
1537 浏览

python - VRPTW:如何处理特殊仓库节点的时间窗口和松弛?

我发现阅读了一个作业的所有值,从

时间窗口的路由问题非常棘手。首先,有节点和索引。我通过以下方式获得车辆(路线)的索引

对应的节点由下式获得

对于具有 5 个停靠点的特定路由问题,depot=0求解器找到具有以下索引和节点的分配:

所以索引比节点多三个,因为每辆车都在仓库开始和结束。我为每次运输定义了 1 的成本,并通过以下方式读取成本值

似乎工作:

但是当我添加时间限制时,我遇到了问题。我们先来看定义问题的代码。时间单位是分钟。

因此,每次行程需要 30 分钟,车辆可能会在停靠站闲置 40 分钟 ( slack_max=40),并且每个停靠站应在上午 9 点至上午 10 点之间提供服务。通过实施的范围限制time_windows[0]旨在定义早上每次旅行的开始时间。但由于站点是每条路线的第一站最后一站,因此也可以将其解释为晚上的到达时间。

所以这是我使用时间窗口的第一个困难:站点在每条路线上出现两次,但范围约束是在节点上定义的。我假设路由模型的设计不是为仓库占用两个窗口?

让我继续讨论我的问题的第二部分。我设置fix_start_cumul_to_zero = False了路线可以随时开始。另请注意,这routing.AddToAssignment(time_dimension.SlackVar(node))应该让我稍后可以访问松弛变量。现在,当我检查每个索引的时间值时,通过

用日期时间格式化,我得到合理的结果:

求解器显然倾向于提前出发时间。给定 40 分钟的最大松弛时间,每辆车也可能会晚一点启动,例如早上 8 点。

当我尝试通过以下方式读取松弛变量时,麻烦就开始了

程序崩溃并显示以下消息:

SystemError:返回 NULL 而不设置错误

这表明time_dimension每个索引都没有松弛变量。那正确吗?为什么不?

感谢您阅读这篇过多​​的帖子。这里有两个问题:

  1. 是否可以定义站点的到达和离开时间窗口?
  2. 如何正确读取所有节点(包括 depo)的时间窗口的松弛?
0 投票
1 回答
1010 浏览

python-3.x - 如何在 ortools 中更改约束参数的类型

我不知道我的问题是否可能。我正在使用 ortools 来解决优化问题,并且我知道在部分条件中,参数应该以双精度类型定义,如下所示:

但我的问题是,我不想在创造条件时使用这种类型的论据。例如,我想要一个列表。

所以我在我的代码中写了这个:

我得到了这个错误:

有没有办法改变条件参数的类型?

0 投票
1 回答
511 浏览

python-3.x - 如何在 ORTool 中使用多处理创建约束

我正在使用 ORTools 来解决优化问题。因为我的约束数量太多而且需要很多时间,所以我决定使用多处理来创建和定义它们。这是我的代码的一部分:

但我得到了这个错误:

出了什么问题,我该如何解决?