Cplex Concert 技术双胞胎
Cplex Concert technology duals
我试图得到约束的对偶
这是代码,以C++实现:
IloEnv env;
IloModel MasterProblem(env);
IloNumVarArray XX(env,Create_routes.size(),0,IloInfinity,ILOFLOAT);
IloNumVarArray t(env,m,0,IloInfinity,ILOFLOAT);
IloExpr expr(env);
////defining ojective of problem
IloObjective masterObj(env,expr,IloObjective::Maximize);
expr.end();
MasterProblem.add(masterObj);
IloRangeArray const1(env); //hala yeki yeki mahdudiyatha ro misazim
for (int i=0; i<n; i++){
IloExpr expr(env);
for (int j=0; j<Create_routes.size(); j++){
if (Create_routes[j]->internalnodes[i+m]==1)
expr+=XX[j];
}
const1.add(1==expr);
MasterProblem.add(const1[i]);
expr.end();
}
IloRangeArray const2(env);
IloRangeArray const4(env);//mahdudiate depohaye open shode
for (i=0; i<m; i++){
IloExpr expr(env);
for (int j=0; j<Create_routes.size(); j++){
if (Create_routes[j]->depot==i){
expr+=XX[j]*Create_routes[j]->demand_collected;
}
}
expr-=t[i]*g[i]->QF;
const2.add(0>=expr);
MasterProblem.add(const2[i]);
expr.end();
}
IloRangeArray2 const3(env,m);
for (i=0; i<m; i++){
const3[i]=IloRangeArray(env);
}
for (int f=0; f<m; f++){
for (i=0; i<n; i++){
IloExpr expr(env);
for (int j=0; j<Create_routes.size(); j++){
if ((Create_routes[j]->depot==f)&&(Create_routes[j]->internalnodes[i+m]==1)){
expr+=XX[j];
}
}
expr-=t[f];
const3[f].add(0>=expr);
MasterProblem.add(const3[f][i]);
expr.end();
}
}
IloCplex cplexM(MasterProblem);
cplexM.setParam(IloCplex::RootAlg, IloCplex::Barrier);
cplexM.setParam(IloCplex::Threads, 4);
if ( !cplexM.solve() ){
env.error() << "Failed to optimize LP." << endl;
nodee->uperbound=0;
env.end();
return;
}
else{
if (!cplexM.isPrimalFeasible()){//agar infeasible bud bia birun
nodee->uperbound=0;
return;
}
cout<<"MasterProblem Solved"<<endl;
cout<<"objective="<<cplexM.getObjValue()<<endl;
javab=cplexM.getObjValue();
}
IloNumArray duall(env,n);
IloNumArray duall1(env,m);
cplexM.getDuals(duall,const1);
cplexM.getDuals(duall1,const2);
IloNumArray2 duall2(env,m);
for (i=0; i<m; i++){
duall2[i]=IloNumArray(env,n);
for (j=0;j<n;j++){
duall2[i][j]=cplexM.getDual(const3[i][j]);
}
}
当通过不同的 cplex 方法(如屏障、原始、对偶、网络(解决这个 LP 问题时,我得到了完全不同的对偶值和最后不同的解决方案。 为什么会这样?是因为我的问题中有平等约束吗?如何确定真值正在通过 CPLEX?
任何帮助都非常感谢。
您可能有多个最优对偶解:所有求解都是可行的,并且具有相同的目标值等于最优目标值。 这可以在有或没有同等约束的情况下发生,即使存在独特的最佳原始解决方案。
相关文章:
- 在C++中样板"冷/never_inline"错误处理技术的最佳方法是什么?
- 在 Windows 8/10 技术中完全实时的屏幕捕获,没有延迟
- C++ 关于指针取消引用的技术问题
- 是否有技术原因阻止 Java 中的 final C++ 像 const 一样严格?
- 如何在 SEAL 3.1 中使用 CRT 批处理技术Microsoft?
- 暴力破解技术解决以下问题
- 在C++中使用 AKS 素数测试计算双胞胎素数 我做错了什么?
- std::complex<> in C++ 数学特殊函数:技术规范或提案
- 将一种类型的比特重新解释为不同类型的比特的技术
- 如何在不同的平台/技术中使用经过训练的神经网络?
- C++浮点数与双胞胎设置精度奇数(新手)
- 英特尔C++编译器 19.0 测试版中删除了对英特尔®图形技术的卸载支持
- 如何在两组上做两指针技术
- 反调试器技术:如何使用 VB.NET 对调试器隐藏线程?
- 使用元编程技术找到最佳匹配
- C 类扩展技术
- 用于检查二叉树是否对称的技术
- 哪种排序技术在代码下方
- Cplex Concert 技术双胞胎
- 这在技术上可能是可能的