我正在尝试对树的每个部分[i] [j]的库存成本求和,具体取决于:
X={x[i][j]}
x[i][j] = 1 if has stock at ij
x[i][j] = 0 if has no stock at
取决于一个准备时间的库存,它们所依赖的库存是否取决于以下是否有库存:
a[i][j] = t[i][j] if it's the end node
= t[i][j] + max(s€sons of the brunch){ a[i+1][s] * (1 - x[i][s]}
好的代码编译没有任何结构错误,但是数组a和决策变量没有任何响应
//getting all the sons
range L=0..ligne;
range C=1..colone;
int sons[L][C][C];
int a[L][L];
execute
{
for (var i in Li){
for (var j in C){
for (var k in C){
if (parent[i+1][k] == j){
sons[i][j][k] = k;
}else
sons[i][j][k] = 0;
}
}
a[i][0]=0;
}
for (var j in C){
for (var k in C)
sons[ligne][j][k]=0;
}
}
//the variable and the objective function and constraints
dvar boolean x[L][Ci];
dexpr float TotalCost = aih_cost*adup*(1.5+var_factor)*lt_factor*sum(i in L,j in C)( unit_price[i][j]*rqtf[i][j]*x[i][j]*a[i][j] );
minimize TotalCost;
subject to {
forall(i in Li){
forall(j in C){
forall(k in C)
(1-x[i+1][sons[i][j][k]]) * a[i+1][sons[i][j][k]] + t_process[i][j] - a[i][j] >= 0;
}
}
a[0][1]<=service_t;
}
我希望至少有一个建议的x数组,并且准备时间为“ a”。
答案 0 :(得分:2)
您的模型可能不可行。 您可以通过以下方式将名称添加到约束中:
forall(i in Li){
forall(j in C){
forall(k in C)
(1-x[i+1][sons[i][j][k]]) * a[i+1][sons[i][j][k]] + t_process[i][j] - a[i][j] >= 0;
}
}
a[0][1]<=service_t;
进入
forall(i in Li){
forall(j in C){
forall(k in C)
ct1:(1-x[i+1][sons[i][j][k]]) * a[i+1][sons[i][j][k]] + t_process[i][j] - a[i][j] >= 0;
}
}
ct2:a[0][1]<=service_t;
然后您可以放松一下,对您有所帮助。
答案 1 :(得分:0)
Cplex默认情况下将求解器cplex用于线性问题和MILP。 对于我的问题,“ a”和“ x”之间的依存关系使它二次方化。
要解决此类问题,需要使用CP优化器cpo,它通常用于约束编程,但它也可以解决非线性问题。
或者,在另一种尝试中,我将问题线性化,引入了新的决策变量y = a * x,并且向模型添加了很多约束。