cplex - 是否可以修改范围变量?
问题描述
我需要解决一个模型,其中我有一个大小为 1..118 的数组,但我只想解决一些值(例如 1..9、11..60、62..115 和 117.. 118)。我排除的数字是我不想解决问题的数字,因为它们将返回没有价值的解决方案,因此我不感兴趣。
我无法更改原始数组,因为我将使用它来解决以前未采取的位置问题的轻松版本。
有什么可能的方法吗?
解决方案
让我举一个关于如何通过 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
使用流控制,您可以更改模型中的某些数据,从而更改范围。
推荐阅读
- security - 如果我想将我的服务帐户凭据存储到 GCP 的秘密管理器中以供我的应用程序使用怎么办
- html - 不能强制我的浮动 div 始终使用 CSS 在容器内居中(是的,我删除了浮动:左)
- exception - RestSharp - 在部署的应用程序中执行 API 时出现 System.Net.WebException
- java - 运行应用程序时出现 Guice / Play Evolutions / H2 数据库错误
- c# - 例外:指定的演员表无效。v
- vhdl - VHDL - 满足条件时进程不分配位
- javascript - 使用 FormData 从视频上传 base64
- vega - Vega 中的多值工具提示
- javascript - ConnectableObservable - 为什么 Connect 在内部创建一个新订阅?
- reactjs - GoogleAnalytics 不使用 ReactGA 跟踪页面浏览量