问题标签 [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 回答
384 浏览

ampl - var AMPL中的每个后缀是什么意思

对于 AMPL,有一个变量可能的后缀列表,例如_var.ub哪个是变量的上限。

我得到了与 相关的可能后缀列表_var,我想知道它们的含义。

Possible suffix values for _var.suffix: astatus current defeqn derstage down dual init init0 int lb lb0 lb1 lb2 lrc lslack no rc relax slack sno sstatus stage status ub ub0 ub1 ub2 up urc uslack val

比如stage什么意思?

0 投票
1 回答
423 浏览

linear-programming - 如何将其转换为一组线性约束?

例如,给定一个二进制变量的一维数组

我想创建一个新变量y,这样y <= max(x). 换句话说

y = 0只有当sum(x) = 0.

y = 1只有当sum(x) > 0.

如何将其转换为一组线性约束?

我知道这一定是可能的,因为 IBM CP Optimizer Suite 可以自动处理它,但我无权访问它。

0 投票
0 回答
67 浏览

ampl - “宽松现金”难题的 AMPL/MathProg 约束

我尝试在 AMPL/MathProg 代码中阐述HE Dudeney 的“现金宽松”问题。

挑战“散钱”问题:

我口袋里能装的最大的钱是多少——全部是流通硬币,没有银元——如果我不能换一美元、半美元、25美分硬币、一角硬币或镍币找零?

问题我的方法不完整:

问题:如何...正确制定约束部分?

0 投票
1 回答
134 浏览

mathematical-optimization - AMPL 中的优化返回错误的结果

我是 AMPL“数学编程语言”的新手。我正在尝试解决一些方程式,但我发现答案在逻辑上不正确(或者据我所知!)。所以我的代码如下(发现问题后,我只好简化理解):

输出如下:

但如果我是对的,最大输出必须为 2(当 x = 0,y = 1,z = 1 时)。

现在,如果我切换变量声明顺序:

那么输出变为 3 (x=y=z=1) 并且不满足约束(如果 x = 1 则 (y+z) = 0)!

这个问题有点简单。我正在尝试对尽可能多的变量进行分组,以最大化输出并满足所有约束。

你能帮我理解吗?

0 投票
1 回答
320 浏览

mathematical-optimization - AMPL 最小化集合中整数的总和以及所选元素的数量

以前,我发布了一个问题,询问如何从集合中选择最小数量的整数,并且总和 >= 一个常数。我的代码如图所示:

我决定添加一个新的目标,即最小化总和。在前面的示例中,cplex 产生 12(7 和 5)。我希望它产生 11(7 和 4)。为此,我添加了这个目标:

不幸的是,我有一个学生版的 AMPL,所以我不能使用 2 个目标。现在我的新代码将解决这个问题,但我想问是否有解决方法或技巧将 2 个目标合并为 1 个但仍然具有相同的功能。

编辑:我更感兴趣的是尽量减少元素的数量,然后尽量减少总和。

0 投票
1 回答
1703 浏览

mathematical-optimization - AMPL 可变大小集迭代

我正在学习 AMPL,以便稍后在我的程序中使用它。我有一个小问题,虽然我还没有找到答案。

假设我有一个set,这个set将包含一些子集,这些子集的维度可能不同。例如:

等等 ..

现在我想编写一个约束,它必须处理每个子集中的所有元素(类似于一个循环,它将在第一个子集中的abc之间迭代,在第二个子集中的 ac之间迭代,依此类推)。问题是我们不知道每个的大小,所以我们不能使用以下内容:

有没有办法这样做?如果是,您能否提供一些示例代码或链接以供学习?提前致谢。感谢您的帮助:D

0 投票
1 回答
156 浏览

optimization - AMPL 使用迭代操作最小化约束数量

我正在学习 AMPL,以便稍后在我的程序中使用它。我有一个小问题想解决。正如标题所述,我正在尝试使用一些迭代操作来最小化约束的数量。所以问题如下:假设我有 2 套AB并假设我有代码:

现在,如果我们扩展之前的约束,将形成以下约束:

x[1,a] + x[2,a] + x[3,a] <=1;

x[1,b] + x[2,b] + x[3,b] <=1;

x[1,c] + x[2,c] + x[3,c] <=1;

x[4,a] + x[5,a] + x[6,a] <=1;

x[4,b] + x[5,b] + x[6,b] <=1;

x[4,c] + x[5,c] + x[6,c] <=1;

这意味着,对于A中的y子集和B中的z元素,我们将得到总共y*z约束(在我们的例子中是 2 x 3 = 6 个约束)。

现在,如果我们将约束更改为:

这将导致:

{(x[1,a] + x[2,a] + x[3,a]) * (x[1,b] + x[2,b] + x[3,b]) * (x[1,c] + x[2,c] + x[3,c])} <= 1;

{(x[4,a] + x[5,a] + x[6,a]) * (x[4,b] + x[5,b] + x[6,b]) * (x[4,c] + x[5,c] + x[6,c])} <= 1;

它应该与之前的形式具有相同的结果,但我们将约束数量从y*z减少到y,这是一个很好的改进!另一个改进是逻辑约束:

这将导致:

{(x[1,a] + x[2,a] + x[3,a]) <= 1} && {(x[1,b] + x[2,b] + x[3,b]) <= 1} && {(x[1,c] + x[2,c] + x[3,c]) <= 1};

{(x[4,a] + x[5,a] + x[6,a]) <= 1} && {(x[4,b] + x[5,b] + x[6,b]) <= 1} && {(x[4,c] + x[5,c] + x[6,c]) <= 1};

问题是,当我们这样做时,我们正在将问题从线性或二次方程变为非二次方程,而cplex无法再解决它:/

是否有任何解决方法或任何技巧使我能够做到这一点而不将问题转换为非二次问题(至少要使用cplex解决)?

这么说也很有用,这对于Ax[1,a] + x[1,b] + x[1,c] = 1中的任何其他元素都是如此。感谢您的帮助,并提前感谢您。

0 投票
1 回答
521 浏览

mathematical-optimization - AMPL 难以使用“计数”从约束中编写目标

我正在尝试解决 AMPL 中的一个小问题,但我遇到了一个我无法将其转化为约束的困难。问题是:假设我有 3 组ABC。我想将A中的元素链接到B中的元素,这样如果A中的 2 个元素存在于 C 的 1 个子集中则不超过 2 个元素链接到B中的单个元素( C的任何子集中的 3 个元素中最多 2 个是链接到B中的 1 个元素)。我已经做了这部分

假设我写了这个约束:

subject to constr {(i,j,k) in C, b in B}: x[i,b] + x[j,b] + x[k,b] <= 2;

我希望代码的目标是最大化以下情况 {(i,j,k) in C, b in B}: x[i,b] + x[j,b] + x[k,b] <= 1;

或者换句话说,尽量减少以下情况:

{(i,j,k) in C, b in B}: x[i,b] + x[j,b] + x[k,b] = 2;.

我该如何写这个目标?如果我想将(约束为= 2)<= 的次数设为常数(例如 MAX),我该怎么做呢?以下是我到目前为止编写的代码。我正在使用 AMPL 的学生版和 cplex 的学生版。感谢您的帮助,并提前感谢您。

我试过了,但没有用(numberof 也没有用):

subject to constr2 {b in B}: count {(i,j,k) in C} ( (x[i,b] + x[j,b] + x[k,b]) = 2 ) <= MAX;其中 MAX 声明为:

0 投票
1 回答
1729 浏览

option - AMPL:对 cplex 使用选项“timelimit”后的结果是否满足所有约束?

我有一个虚拟问题,我需要知道它的答案。我正在做一个需要 AMPL 和 CPLEX 作为求解器的项目。现在这个问题通常需要140多秒才能解决。在我搜索时,我进入了一个名为timelimit. 我将此选项与 value 一起使用option cplex_options 'timelimit=5',结果在 5 秒内显示。现在我的问题是,输出是否满足所有约束并且在我在代码中设置的范围内?还是我只是终止了进程,结果是当前“正在处理”的数据?感谢您的帮助。

0 投票
1 回答
445 浏览

cplex - 索引表达式中的 AMPL 连续变量

我正在解决 AMPL 中的一个小问题,我遇到了一个小问题。我有 4 组ABCD 维数 3和 1 个变量x{A,B} binaryy{B,C} binary

D的子集的元素都来自A

A 的每个元素都必须从B中分配一个元素。[这部分完成]

B的指定值中的每个元素都必须从C中指定一个元素。【问题来了】

出于这个原因,我必须定义一个新变量map{A},它将元素从A映射到B(这意味着如果 x[a,b] = 1 则 map[a] = b)。

我想写这样的东西:y[ map[a],c]where {a in A, c in C} 这意味着 A in B的映射 b在A但是 cplex 给了我错误"continuous variable in index expression"

反正有这样做吗?提前致谢。感谢您的帮助。

进一步说明:

假设以下代码: