问题标签 [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.
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。
有任何想法吗?
python-3.x - 如何在不返回仓库的情况下定义 TSP?
使用 depot 参数初始化路由模型
但是如果我不关心仓库是哪个节点呢?我怎样才能允许开始和结束节点不同?
python - 在 Google or-tools 上定义出现次数
我正在尝试在 Python 上使用 Google Or-tools 构建一个非常简单的测试用例。我有一个包含 20 个整数变量的插槽的列表,我试图设置的唯一约束是从 0 到 4 的每个值都被看到 3 次。
例如,这将是一个解决方案:
我尝试了以下示例:
但是,它没有找到任何解决方案(如果我不设置时间限制,它永远不会完成)。
如果我用 删除约束Sum
,则完成(根本没有约束)。
由于这个约束非常微不足道,我希望我写它的方式不正确。关于如何解决它的任何想法?
optimization - 具有边缘投资成本的最小成本流
我想使用 python Min-Cost Flow 求解器来构建新的网络。这意味着我有一个初始完整图,顶点是供应商或有需求。使用该算法应该告诉我,根据他们的成本,将使用哪些边来解决所有需求。与现有问题不同的是,一条边在使用时的成本不仅用单位成本来描述,而且还有与流量无关的这条边的投资。我一直在研究 networkx 和 or-tools 的源代码,但无法弄清楚如何调整它们以实现边缘的投资成本。有人有更好的主意或可以帮助我调整代码吗?
最好的问候贾斯图斯
python-3.x - GlobalSpanCoefficient 背后的直觉
我正在研究将车队中“最慢卡车”的成本降至最低的车辆路线问题。
所以现在目标函数应该涉及两个量:
- 所有车辆的所有过渡的总和(总距离),以及
- 最昂贵路线的成本
这些价值观是如何结合起来的?我假设全局跨度系数
distance_dimension.SetGlobalSpanCostCoefficient(100)
参与?那是加权和的系数吗
最慢的A
卡车的成本B
是多少?所有卡车的总距离是多少?
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 上构建)。希望有任何解决此问题的建议。谢谢你。
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 的值必须是50
or 60
,在上面的示例中?
是否有关于我使用 or-tools 的路由模型的数学模型的论文或详细页面?
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
每个索引都没有松弛变量。那正确吗?为什么不?
感谢您阅读这篇过多的帖子。这里有两个问题:
- 是否可以定义站点的到达和离开时间窗口?
- 如何正确读取所有节点(包括 depo)的时间窗口的松弛?
python-3.x - 如何在 ortools 中更改约束参数的类型
我不知道我的问题是否可能。我正在使用 ortools 来解决优化问题,并且我知道在部分条件中,参数应该以双精度类型定义,如下所示:
但我的问题是,我不想在创造条件时使用这种类型的论据。例如,我想要一个列表。
所以我在我的代码中写了这个:
我得到了这个错误:
有没有办法改变条件参数的类型?
python-3.x - 如何在 ORTool 中使用多处理创建约束
我正在使用 ORTools 来解决优化问题。因为我的约束数量太多而且需要很多时间,所以我决定使用多处理来创建和定义它们。这是我的代码的一部分:
但我得到了这个错误:
出了什么问题,我该如何解决?