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

用户3787524

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

set A:= (1, 2, 3) (4, 5, 6);
set B:= a b c;
var x{A,B} binary;    
**some_objective** ;
subject to constraint   { (i,j,k) in A, b in B   }:  x[i,b] + x[j,b] + x[k,b] <= 1;  

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

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个约束)。

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

subject to constraint   { (i,j,k) in A   }:  prod {   b in B   }    (x[i,b] + x[j,b] + x[k,b])    <= 1;  

这将导致:

{(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,这是一个很好的改进!另一个改进是从逻辑约束方面:

subject to constraint   { (i,j,k) in A   }:  forall {   b in B   }   (   (x[i,b] + x[j,b] + x[k,b])    <= 1  ); 

这将导致:

{(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可以解决)?

也可以这样说,x[1,a] + x[1,b] + x[1,c] = 1这对于A中的任何其他元素都是正确感谢您的帮助,并在此先感谢您。

维他命

首先,我想指出的是,使用乘积的约束不等于原始约束。例如,x[1,a] = 1, x[2,a] = 1, x[3,a] = 1其余x等于零的解决方案满足prod因为制定的约束(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]) = 3 * 0 * 0 = 0 <= 1,但不满足原始约束x[1,a] + x[2,a] + x[3,a] = 3 <= 1

您可以使用逻辑&&forallIBM / ILOG CPLEX CP优化器(ilogcp),它适用于所有幅度/ CPLEX用户,但我怀疑这会好于具有独立的限制。您可以ilogcp“逻辑”和“约束编程扩展”页面找到更多信息,该页面还包括有关如何获取它的信息(如果您拥有CPLEX许可证,那么您也应该可以获得ilogcp)。该求解器将接受以下形式的约束:

subject to c{(i,j,k) in A}: forall {b in B} (x[i,b] + x[j,b] + x[k,b] <= 1);

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

AMPL将集合中的整数和所选元素的数量最小化

来自分类Dev

将Scipy最小化(scipy.optimize.minimize)与大相等约束矩阵配合使用

来自分类Dev

Scipy最小化约束功能

来自分类Dev

使用Python中的二次编程/最小化来最小化受线性约束的规范

来自分类Dev

优化:最小化会议数量

来自分类Dev

优化:最小化会议数量

来自分类Dev

我可以将“最小化”按钮操作更改为“隐藏”,而不是Mac中的默认“最小化”吗?

来自分类Dev

R:如何使用DEoptim将数据最小化

来自分类Dev

如何判断是否使用GJS将窗口最小化?

来自分类Dev

最小化使用的内存

来自分类Dev

如何最小化UI中的操作

来自分类Dev

如何使用具有约束和动态功能的Scipy最小化

来自分类Dev

如何使用两个约束最小化R中的函数?

来自分类Dev

当我使用JQuery切换时,脚本仅将迭代器中的第一个值最小化?

来自分类Dev

负对数可能性最小化的参数约束

来自分类Dev

Scipy最小化..“不平等约束不兼容”

来自分类Dev

用没有简单表达的约束使Scipy最小化

来自分类Dev

constrOptim:使用自适应势垒算法将受线性不等式约束的函数最小化

来自分类Dev

如何使用Deap最小化功能?

来自分类Dev

使用R最小化目标函数

来自分类Dev

使用FXML最小化JavaFx窗口

来自分类Dev

使用FXML最小化JavaFx窗口

来自分类Dev

最小化gme中的AI使用

来自分类Dev

如何使用Deap最小化功能?

来自分类Dev

如何最小化openvpns带宽使用?

来自分类Dev

使用向下滚动最小化

来自分类Dev

如何使用Webpack最小化JavaScript?

来自分类Dev

最小化numpy数组操作的运行时

来自分类Dev

如何在HTML中操作最小化的属性值

Related 相关文章

热门标签

归档