问题标签 [ampl]

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 回答
656 浏览

ampl - Summing specific elements in AMPL

Hello fellow optimizers

I'm intending to add a constraint which prohibits the flow between two specific cities to be too high.

I'm intending to this using the following in the .mod file:

However this gives me errors. How to do I properly conduct this summarization?

Thanks in advance!

0 投票
1 回答
729 浏览

optimization - AMPL 中不可能推导出的上限

我打算进行优化,我想最大化系统中的流量受到一些时间限制和一些“必须满足这些路线”的限制。第一个时间限制规定每辆车不得超过 24 小时的工作量(以分钟为单位)。第二个时间约束是一个子旅游消除约束,它还指出在车辆有时间行驶之前不能激活“访问”节点的开始时间等。约束3描述了K1和N1之间的道路必须使用不超过9次,使用任何车辆 k。最后一个约束条件是来自特定节点的所有车辆必须在一天结束时返回。

Constraint3 和 EndNode 具有多个相同类型的约束(只是与其他“预定义位置”,例如 K1 和 N2 之间的道路不能超过 4 次访问等等)。

我的问题是我得到了错误 Impossible deduced bounds x[K1,K1,1] has lower bound = 0 and upper bound = -76 我理解这源于冲突的约束。然而,我的问题是:如何?几乎完全使用二进制变量,我看不出上面的代码为什么不起作用。我是否误解了我在模型中实际所做的事情?

我注意到编译器只在 i=j 时抱怨,所以我检查了我的 .dat 文件并注意到当 i=j 时 i 和 j 之间的旅行时间非常大(所以程序不会选择那些路线)。但是,自动编辑该 .dat 文件以不再超过 TimeConstraints 限制仍然给我同样的错误(虽然更小,现在上限是 -1 而不是 -76)。

我希望有人可以对此有所了解

提前致谢

0 投票
1 回答
669 浏览

ampl - AMPL:当命令文件中不能包含数据和模型命令时,如何使用 NEOS Server 打印变量输出?

我正在使用一个模型进行一些优化,其约束和变量的数量超过了学生版的上限,比如 AMPL,所以我找到了一个网页 [ http://www.neos-server.org/neos/ solvers/milp:Gurobi/AMPL.html]可以解决我的模型类型。

然而,我发现当使用解算器时,您可以提供命令文件(我假设它与 .run 文件相同),NEOS 服务器的文档告诉您应该查看输入文件的文档。我正在使用 AMPL 输入,根据 [ http://www.neos-guide.org/content/FAQ#ampl_variables]应该能够使用具有以下外观的命令文件打印决策变量:

问题是 NEOS 声称您不能添加:

命令进入 .run 文件,导致编译器找不到变量。

有谁知道解决这个问题的方法?提前致谢!

编辑:如果其他人有这个问题(我相信很多人都有基于我的互联网搜索)。尝试删除任何最终重置;来自 .run 文件的命令!

0 投票
1 回答
21 浏览

optimization - AMPL 缩写形式

因为我对 AMPL 不是很熟悉,所以我定义了一些变量,比如

如果我能以更短的方式定义这些约束,那就太好了。如

但我无法让它工作。我想知道你们是否有任何想法。

提前致谢,

0 投票
0 回答
66 浏览

ampl - AMPL:模拟车辆“每 n 小时”出发

我想模拟一个节点的离开只能以“每n小时”的方式发生。我已经开始使用两个变量对此进行建模 - starttime[i,j,k] 显示车辆 k 何时以 j 作为目的地离开 i,x[i,j,k] 是一个二进制变量,如果车辆 k 从i 到 j,否则为 0。型号为:

所讨论的约束是“Constraint1”,其中 i 是源节点,j 是目标节点,k 是车辆。索引 g 用于表明较晚的出发点可以到任何目的地节点。TimeInterval 对应于预期的间隔,即如果 i 处的 TimeInterval 为 2 小时,则从 i 出发的下一辆车的开始时间不得少于前一次出发的 2 小时。起源对应于特定产品(仅可从所述起源节点获得),而我希望车辆不被绑定到特定起源节点 - 它们应该能够在节点之间跳转以利用回程等。换句话说,我想进行这种约束不受车辆本身的约束,而是对原始节点的约束。

“最大化旅行时间”的目标函数可能看起来很奇怪,但目标函数实际上已经过时了。如果满足约束条件,则解决方案就足够了。最大化旅行时间只是试图“强制” x 变量变为 1。

问题是:我该怎么做?使用这个公式,所有 x[i,j,k] 变量都会从答案中消失(没有这个约束,一些二元变量 x 变为 1,而另一个变为 0。解决方案满足 maxVisits 要求。在约束下,所有 x 变量变为0 并且所有开始时间也变为 0。MINTO(求解器)也没有说明问题是不可行的。另外,如何分离车辆以便程序识别它是所有出发之间的比较?我宁愿不包括时间维度,它会提供更多的变量。

编辑:在使用非线性求解器尝试新模型后,我看到了一些奇怪的结果。具体来说,我使用限制 1440(分钟)作为车辆每天可以运行多长时间的上限。使用下面的这个模型,每个变量的解都是 0,但是 i、j、k 的所有组合的开始时间是 720(1440 的一半)。是否有人对导致此解决方案的原因有任何线索?此约束如何消除 starttime 高于 0 要求 x 必须为 1 之间的联系。

0 投票
1 回答
153 浏览

python - AMPL:数据集和规范中的一个大集

我现在正在做一个模型,我需要进行很大的调整。基本上我需要扩展我当前的集合 V,它是一组城市,成为一组城市和时间。例如,V 中的元素 Kir 必须从简单的 "Kir" 扩展到 "Kir1"、"Kir2"、...、"Kir72" 以表示城市 Kir 以及由数字指定的时间范围。

我已经开始将其定义为(在 .mod 文件中): set V; 将 K 设置在 V 内;

在 .dat 文件中,我很不确定如何写这个。如果没有简单的方法在集合 K 中包含“字符串”Kir,我想我会写:

例如。我的问题是我该怎么做?我可以包括城市名称 Kir 吗?具体来说,我已经定义了原始 V 集中城市之间距离的数据透视表。例如,城市 Kir 和 Sto 之间的原始集合 V 中的距离必须与扩展集合中 Kir1 和 Sto1 之间的距离相同。Kir1 和 Sto72 之间的距离也必须相同。原始距离必须相同,即与它所处的时间范围无关。在 AMPL 中是否有一种简单的方法可以做到这一点?

编辑:添加了标签 Python。我想这也可以在 Python 中实现。我已经设法定义了新的集合,使用:

例如。我被困在距离矩阵上

0 投票
1 回答
58 浏览

ampl - AMPL:目的地城市内的模型终端

我遇到了一个问题,我没有找到任何解决方案来阅读集的 AMPL 文档。

我想建模的是,一个城市,比如 Kir,必须有来自另一个城市的例如 9 个交付,例如 Sto。但是,这些货物必须在某些特定的航站楼到达 Kir ,每个航站楼每天只开放一小段时间(大约 2 分钟)。源节点也必须如此。必须从特定终端指定来自 Sto 的路线(因此可以在结果中“遵循”路径)。

我已经开始对集合使用“在 K 中设置 V”操作进行建模,但这要求 V 必须是相同的集合,或者 K 的子集,其中 K 是表示“节点”的集合 - Kir、Sto 等on 和 V 是终端“Terminal1”、“Terminal2”等名称的集合。

我已经开始检查例如定义为例如“设置 K 维 4”:

其中集合 K 表示应该从哪个城市(例如 Sto)驱动交付(例如 Kir),其中 Sto 的出发终端是 Terminal1,Kir 的交付终端是 Terminal2。这样做的缺点是必须手动指定大量组合(仅 Kir 就有大约 22 个终端等)。我也不知道如何对约束进行建模。例如我之前的“一维”集:

其中 V 是单独的城市集,H 是车辆集,maxVisits 表示从城市 i 到城市 j 的最大交付量,如果使用车辆 k 从 i 到 j 进行交付,则 x 为 1。我不明白如何使用四维集 K 对其进行建模。

问候,

0 投票
2 回答
1457 浏览

matlab - 将 MATLAB 与 AMPL 结合使用

我有一系列用 AMPL 和 GAMS 编写的优化问题。我在 Matlab 中有一个算法。如何用 Matlab 中的算法解决这些问题?我已经阅读了 GAMS 的 GDMXRW 接口,但据我了解,它只能在 Matlab 和 GAMS 之间交换数据?那么是否有必要在 GAMS 中执行所有梯度、导数等计算,然后将这些结果提供给 Matlab?也许有人知道如何连接这个?

0 投票
1 回答
3110 浏览

ampl - AMPL:无效的下标

我打算进行优化,但我得到一个我找不到原因的错误。编译器抱怨 servicetime、startlimit 和 endlimit 不是无效的。特别是编译器在约束 TimeConstraint 中抱怨 servicetime['ORIGINS'] 没有值。

有问题的约束是:

在哪里:

.dat 文件是:

我看不出这怎么行。对我来说,这看起来很准确。希望有人可以对此有所了解!问候,

0 投票
1 回答
705 浏览

ampl - 输入为数组时的gmpl(glpsol)参数错误

我正在尝试用 glpsol 解决最小化问题。我有真实世界的数据,我一直在努力包含这些数据。我尝试使用 -d data.dat 包含数据但没有成功,然后我尝试将所有数据重写为参数值,但出现错误: data.dat:7: oh[0] already defined

我的代码:

我刚开始使用glpsol。我一直在阅读文档,但无法弄清楚出了什么问题。感谢帮助。