AMPL支持第二类特殊有序集,不过也需要求解器的支持,比如cplex和gurobi就可以。贴段代码吧。
param N:=5;
param c{1..N};
var lambda{1..N} >=0 <=1;
suffix sosno integer IN;
suffix ref integer IN;
for{i in 1..N}
{
let lambda[i].ref :=i;
let lambda[i].sosno :=-1;
}
var x;
C1: x=sum{i in 1..N} i*lambda[i];
C2: sum{i in 1..N} lambda[i]=1;
maximize obj: sum{i in 1..N} c[i]*lambda[i]-(x-2.2)^2;
data;
param c :=1 1 2 2 3 2 4 2 5 2;
option solver gurobi;
solve;
display x,lambda;

本文通过一个具体的AMPL代码示例介绍了如何使用AMPL来定义和解决涉及特殊有序集(SOS)约束的问题。该示例展示了如何设置参数、变量、前缀及目标函数,并使用Gurobi作为求解器来解决此问题。
228

被折叠的 条评论
为什么被折叠?



