CONEPROG:精度问题(Exitflag -7)

16次浏览(过去30天)
Holger I. Meinhardt
Holger I. Meinhardt 2021年9月14日
评论道: Aykut Bulut 2021年9月16日
这些天我试图把一个对称的正半定二次规划问题移植到一个二次优化问题。到目前为止,我能够将这个问题转录到一个锥程序中,但是似乎仍然需要进行一些选项调优,因为所有的迭代都以exitflag -7结束。在我将问题说明作为一个圆锥优化问题和评估过程的一个片段之前,我简要地介绍了一个接近于解决方案的示例的结果。此外,值得注意的是,尽管exitflag -7连续出现,但一些示例最终得到了正确的解决方案。此外,我还按照文档中的建议更改了求解器,但这没有任何效果。在改变容差值时也发生了同样的情况
由于以下示例的返回结果,我认为我是在正确的轨道上,尽管下面的结果是不正确的
x =
8.4966 11.5004 5.5087 23.0781 50.0829
计算返回的结果接近下面的预期解
pk_bv =
8.5000 11.5000 5.5000 23.0833 50.0833
这让我假设我遇到了一些我无法本地化的数字问题。为了从不同的角度解决这个难题,我现在提出这个问题的参数。此外,我们有 在美国,应该平等对待。
后续选项设置已选择:
Opts = optimoptions(“coneprog”“OptimalityTolerance”1 e-12“ConstraintTolerance”1 e-12“LinearSolver”“汽车”
锥问题指定为:
Q = E ' * E;矩阵Q是对称正半定的。矩阵E是由-1 0 1组成的,它不是平方的。
b = - e ' *;
Aineq = [];
bineq = [];
c = (b (:); 1);%目标函数
Asc = sqrtm(Q);
Asc((end+1),(end+1)) = 1;
D = [0 (size(b(:))));1];
BSC =零(大小(d));
Gamma = -1;
socConstraints = seconddordercone (Asc,bsc,d,gamma);
Aeq = (E (m:), 0);
磅= (vi(:);负);
乌兰巴托= (ra(:);正);
(u, fval exitflag、输出λ)= coneprog (c socConstraints Aineq、bineq Aeq, (m),磅,乌兰巴托,选择)
在这方面,将上面的问题与对称半定二次规划问题进行比较可能是有用的:
[x, fval exitflag、输出λ)= quadprog (Q, b, [], [], E (m:) (m), vi,风湿性关节炎,x,选择);
此外,我现在想展示评估过程的一些片段,以观察选项和输出结构设置。
> > x = cp_kernel (bv)
选择=
coneprog选项:
属性:
ConstraintTolerance: 1.0000 e-12
LinearSolver:“汽车”
OptimalityTolerance: 1.0000 e-12
默认的属性:
显示:“最后一次”
MaxIterations: 200
MaxTime:正
搜索方向小,当前迭代不在指定的约束和/或最优性容忍范围内。
u =
1.0 e + 04 *
0.0008
0.0012
0.0005
0.0023
0.0050
5.2886
fval =
-5.2785 e + 04
exitflag =
7
输出=
结构体字段:
迭代:30
primalfeasibility: 1.0206 e-11
dualfeasibility: 6.6721 e-07
dualitygap: 9.6139 e-12
算法:“内点”
linearsolver:“增强”
信息:“搜索方向很小,当前迭代不在指定的约束和/或最优性容忍范围内。”
λ=
结构体字段:
eqlin: 94.9844
Ineqlin: [0x1 double]
soc: 9.9244 e-09
下:[6x1 double]
鞋面:[6x1双]
ans =
8.4783 11.8906 5.2411 23.1990 49.8576
exitflag =
7
输出=
结构体字段:
迭代:28
primalfeasibility: 1.0126 e-11
dualfeasibility: 2.3589 e-09
dualitygap: 1.0380 e-11
算法:“内点”
linearsolver:“增强”
信息:“搜索方向很小,当前迭代不在指定的约束和/或最优性容忍范围内。”
λ=
结构体字段:
eqlin: -6.4447
Ineqlin: [0x1 double]
soc: 2.7285 e-08
下:[6x1 double]
鞋面:[6x1双]
警告:可能没有内核点找到了!
>在cp_kernel>computePrk(第215行)
Cp_kernel(第102行)
x =
8.4966 11.5004 5.5087 23.0781 50.0829
我现在的问题是:必须调整哪些选项才能得到正确的结果?还是锥体问题规范有一个我忽略了的重大缺陷?
非常感谢您的支持和任何改进的建议。万博1manbetx
编辑15 Sep 2021
感谢Aykut Bulut的友好和出色的支持,我可以通过重新制定锥万博1manbetx问题来解决上述精度问题。对于那些正在为自己的工作寻找灵感的人,我提出了由
Aineq = [];
bineq = [];
c =[0(大小(b (:))); 1];%目标函数
Asc = E;
Asc((end+1),(end+1)) = 1;
D = [0 (size(b(:))));1];
二元同步通信= ';
二元同步通信(结束+ 1)= 0;
Gamma = 0;
socConstraints = seconddordercone (Asc,bsc,d,gamma);
Aeq = (E (m:), 0);
磅=[无穷(n + 1, - 1)];
乌兰巴托=[正(n + 1, - 1)];
(u, fval exitflag、输出λ)= coneprog (c socConstraints Aineq、bineq Aeq, (m),磅,乌兰巴托,选择);

接受的答案

Aykut Bulut
Aykut Bulut 2021年9月14日
嗨Holger,
当没有Q的因数时,用于转换的方法是有用的。在这种情况下,您可以跳过计算Q,并使用sqrtm()函数来分解它。我认为这些操作可能会失去一些精度,跳过它们可能会提高数值。
目标函数为
首先,我们可以在目标函数中去掉常数项。一旦计算出最优解,就可以把它加回来。第二,不是最小化 ,我们可以最小化 (注意,我们去掉了指数2和\frac{1}{2}系数,这些问题有相同的最优解集,实际上是相同的)。万博 尤文图斯接下来,不是最小化 ,我们定义一个新变量t,并强制它大于等于 ,最小化t。在此之后,目标函数变为t,我们有以下附加约束。
我认为解决这个修正后的问题(加上其他约束条件)将产生更精确的解决方案。万博 尤文图斯这个新问题会有一个不同的最优目标值。然而,一旦你有了新问题的最佳x,你就可以通过使用计算出的最佳x值来计算原始问题的最佳目标函数值。
2的评论
Aykut Bulut
Aykut Bulut 2021年9月16日
谢谢你的反馈。我会将文档中的示例告知团队。

登录评论。

更多答案(0)

s manbetx 845


释放

R2021a

社区寻宝

在MATLAB Central中找到宝藏,并发现社区如何帮助您!

开始狩猎!