【发布时间】:2020-10-04 11:28:03
【问题描述】:
我有一个关于在预处理中消除一些无效决策变量组合的问题。
我有一个用 [commodities][arcs] 索引的二维决策变量 X。请参阅下面的代码。索引“commodities”基于元组“Data”。索引“arcs”基于元组“Arc” “。元组“Data”和“Arc”都基于元组“TimeNode”。
我不希望程序迭代所有 X 组合。我想删除预处理中的一些决策变量,通过考虑比较数据元组中的 Origin 时间和 Arc 元组中的 FromNode 时间的条件,如果“Origin.time>FromNode.time”,X 等于 0,因此从迭代中消除并且不被考虑。因此,问题的大小将减少并节省一些内存。我在下面做了一些示例代码,执行。例如,如果我有 {Data} 商品= {>...},1 是 id, - Origin 以 1 作为起始节点,3 是开始时间。我不需要在开始时间 3 之前考虑所有 X。
但是,执行不起作用,因为 X 是一个决策变量。我能做什么?将条件表述为约束?谢谢你。我会接受任何建议。
tuple TimeNode {
int node;
int time;}
{TimeNode} tnodes = { <n,t> | n in Nodes, t in Time };
tuple Data{
int id;
TimeNode Origin;
TimeNode Destination; }
{Data} commodities= {<1 <1 3><2 8>>, <2 <2 5><3 10>>};
tuple Arc {
TimeNode FromNode
TimeNode ToNode; }
{Arc} arcs={<<i,s>,<j,e>> | <i,j> in st_arcs, s in Time , e in Time };
dvar float+ x[commodities][arcs];
execute {
for(var c in commodities){
for(var a in arcs){
if(c.Origin.time>a.FromNode.time)
x[c][a]=0;
}
}
}
“错误:无法分配给“x # 0 # 0”中的决策变量。”
【问题讨论】:
标签: cplex preprocessor opl