我在matlab(cplexlp)中使用cplex线性编程来解决问题
min f'u s.t. Au>=b, u>=lb
使用
[u,minima,flag] = cplexlp(f,-A,-b,[],[],lb);
但我需要一个低于1e-9的解决方案容差,这是文档中的最小容差。 我想我可以扩展问题(例如10000)并实现1e-13的有效容差。
scale=10000;
tolerance=1e-9;
options = cplexoptimset('cplex');
options.simplex.tolerances.feasibility = tolerance;
options.simplex.tolerances.optimality = tolerance;
[u,minima,flag] = cplexlp(scale*f,-scale*A,-scale*b,[],[],scale*lb,[], [], options);
minima = minima / scale;
它不起作用,公差提高到1e-11但不低于。下面的图像以log10的比例显示“真实解决方案”(使用不同的方法找到)和算法返回的不同参数的解决方案(每种颜色不同A,b和x轴是控制问题的问题的一些参数)解)。如您所见,只要高于1e-11,就可以实现真正的解决方案。
有关为何如此或如何避免此问题的任何建议?
答案 0 :(得分:0)
要获得更准确的结果,您必须使用使用有理算术的求解器。 QSopt_ex和SoPlex (with iterative refinement)是两种可能性。我不知道在Matlab中如何做到这一点。
答案 1 :(得分:0)
其他答案offered in the cplex forum,但都没有解决。