是否可以修改范围变量?
Is it possible to modify a range variable?
我需要求解一个模型,其中我有一个大小为 1..118 的数组,但我只想求解某些值(例如 1..9,11..60,62.. 115 和 117..118)。我排除的数字是我不想为其解决问题的数字,因为它们将 return 一个没有价值的解决方案,因此我不感兴趣。
我无法更改原始数组,因为我将使用它来解决之前未采取的位置问题的宽松版本。
有什么可行的方法吗?
给大家举个例子,在OPL中如何通过流量控制来设置范围:
您有第一个模型sub.mod
int minOfx = ...;
int maxOfx = ...;
range r=minOfx..maxOfx;
dvar float x1 in r;
dvar float x2 in r;
maximize x2-x1;
subject to {
}
execute
{
writeln("x2-x1= ",x2-x1);
}
然后你就有了你的主要模型
main {
var source = new IloOplModelSource("sub.mod");
var cplex = new IloCplex();
var def = new IloOplModelDefinition(source);
for(var k=1;k<=10;k++)
{
var opl = new IloOplModel(def,cplex);
var data2= new IloOplDataElements();
data2.minOfx=(k-1)*(k-1);
data2.maxOfx=k*k;
opl.addDataSource(data2);
opl.generate();
if (cplex.solve()) {
opl.postProcess();
} else {
writeln("No solution");
}
opl.end();
}
}
当你运行你的主模型时你会得到
x2-x1= 1
x2-x1= 3
x2-x1= 5
x2-x1= 7
x2-x1= 9
x2-x1= 11
x2-x1= 13
x2-x1= 15
x2-x1= 17
x2-x1= 19
使用流量控制,您可以更改模型中的某些数据,这会更改范围。
我需要求解一个模型,其中我有一个大小为 1..118 的数组,但我只想求解某些值(例如 1..9,11..60,62.. 115 和 117..118)。我排除的数字是我不想为其解决问题的数字,因为它们将 return 一个没有价值的解决方案,因此我不感兴趣。
我无法更改原始数组,因为我将使用它来解决之前未采取的位置问题的宽松版本。
有什么可行的方法吗?
给大家举个例子,在OPL中如何通过流量控制来设置范围:
您有第一个模型sub.mod
int minOfx = ...;
int maxOfx = ...;
range r=minOfx..maxOfx;
dvar float x1 in r;
dvar float x2 in r;
maximize x2-x1;
subject to {
}
execute
{
writeln("x2-x1= ",x2-x1);
}
然后你就有了你的主要模型
main {
var source = new IloOplModelSource("sub.mod");
var cplex = new IloCplex();
var def = new IloOplModelDefinition(source);
for(var k=1;k<=10;k++)
{
var opl = new IloOplModel(def,cplex);
var data2= new IloOplDataElements();
data2.minOfx=(k-1)*(k-1);
data2.maxOfx=k*k;
opl.addDataSource(data2);
opl.generate();
if (cplex.solve()) {
opl.postProcess();
} else {
writeln("No solution");
}
opl.end();
}
}
当你运行你的主模型时你会得到
x2-x1= 1
x2-x1= 3
x2-x1= 5
x2-x1= 7
x2-x1= 9
x2-x1= 11
x2-x1= 13
x2-x1= 15
x2-x1= 17
x2-x1= 19
使用流量控制,您可以更改模型中的某些数据,这会更改范围。