GA,无法找到一个可行的初始点

37视图(30天)
我triying组合使用遗传算法优化。
这是我做的模型,有一些限制,但是当我运行它,我不能达成解决方案,只是似乎无法找到一个可行的初始点。
有人能帮我修复我的代码或者帮助我找到错误。
谢谢。
数据= xlsread (“Returns.xlsx”);
nAssets =大小(数据,2);
%的回报和协方差
μ=意味着(数据);
σ= x(数据);
%制定/优化的问题
r_target = 0.10;% r_target是所需的回报
f = 0 (nAssets, 1);%,没有不变的
=(μ;黑眼圈(nAssets)];%除了返回我们禁止卖空
b = [-r_target;0 (nAssets 1)];%的要求收益和重量更大的/ eqauls 0
Aeq = 1 (1、nAssets);%所有重量都应该总结…
说真的= 1;%……一(1)
%解决优化
w = ga (@MaxReturn nAssets, A、b、Aeq beq);
w
%打印解决方案
流(2“风险:% .3f % % \ n”,sqrt (w *σ* w) * 100);
流(2“Ret: % .3f % % \ n”,w *μ* 100);
函数f = MaxReturn (w,μ);
f = mtimes (w *亩);
结束
4评论
沃尔特·罗伯森
沃尔特·罗伯森 2021年12月16日
ga()总是通过行向量的未知数。如果你转置,你会得到一个列向量,和矩阵乘以一个列向量的左边是不会导致一个标量ga所需。
纠正代码在我的回答:f = w *亩”

登录置评。

接受的答案

沃尔特·罗伯森
沃尔特·罗伯森 2021年12月16日
格式长g
文件名=“//www.tianjin-qmedu.com/matlabcentral/answers/uploaded_files/835520/Returns.xlsx”;
data = readmatrix(文件名);
nAssets =大小(数据,2);
%的回报和协方差
μ=意味着(数据);
μ。
ans = 8×1
e-06 0.00477387349434592 0.00149865368592419 0.00130429237016939 0.0017001795070217 0.00238687944682926 0.00534690780710744 0.00276663664554018 7.24577440764558
σ= x(数据);
%制定/优化的问题
r_target = 0.10;% r_target是所需的回报
f = 0 (nAssets, 1);%,没有不变的
=(μ;黑眼圈(nAssets)]%除了返回我们禁止卖空
一个= 9×8
e-06 -0.0017001795070217 -0.00238687944682926 -0.00534690780710744 -0.00276663664554018 -7.24577440764558 -0.00477387349434592 -0.00149865368592419 -0.00130429237016939 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1
b = [-r_target;0 (nAssets 1)]%的要求收益和重量更大的/ eqauls 0
b = 9×1
-0.1 0 0 0 0 0 0 0 0
nAssets Aeq = 1 (1)%所有重量都应该总结…
Aeq = 1×8
1 1 1 1 1 1 1 1
说真的= 1%……一(1)
说真的=
1
%解决优化
fcn = @ (w) MaxReturn (w,μ);
[w, fval、国旗、输出]= ga (fcn nAssets, A、b、Aeq beq)
无法找到一个可行的初始点。w = [] fval = []
国旗=
2
输出=结构体字段:
problemtype:“linearconstraints”rngstate: [1×1 struct]代:0 funccount: 0消息:“找不到可行的初始点。“maxconstraint: []
如果isempty (w)
警告(“找不到任何解决方案”)
其他的
%打印解决方案
流(2“风险:% .3f % % \ n”,sqrt (w *σ* w) * 100);
流(2“Ret: % .3f % % \ n”,w *μ* 100);
结束
警告:找不到任何解决方案
(wF fvalF、flagF outputF] = fmincon (fcn, 0。* (1, nAssets), A, b, Aeq, beq)
聚集到一个不可行点。fmincon停止因为当前步骤的大小小于一步尺寸公差但约束的值不满足约束的值公差内。考虑启用内点方法可行性模式。
wF = 1×8
-0.000345128325127368 -0.000280137675695389 1.00268187780506 -0.000244196698363124 -0.000505350943988705 -5.42278068495475 e-05 -0.000364201130047243 - -0.000382595871917903
fvalF =
0.00535800915538925
flagF =
2
outputF =结构体字段:
迭代:306 funcCount: 2767 constrviolation: 0.0946419908446108 stepsize: 3.97580668930409 e-25算法:“内点”firstorderopt: 0.00284530672744689 cgiterations: 343信息:↵聚合到一个不可行点。↵↵fmincon停止因为当前步骤的大小小于↵一步尺寸公差的值但不↵满足约束的值约束宽容。↵↵<停止标准细节>↵↵优化停止因为x的所有元素的相对变化↵不到选项。StepTolerance = 1.000000平台以及,但相对最大约束↵违反,9.464199 e-02,超过选项。ConstraintTolerance = 1.000000 e-06。↵↵bestfeasible: []
函数μf = MaxReturn (w)
f = w *亩”;
结束
发生了什么是,ga()决定的约束不能满足任何一组值,所以从来没有调用函数。fmincon()无法找到可行点。
3评论
沃尔特·罗伯森
沃尔特·罗伯森 2021年12月16日
在下面我降低要求返回0.004(比最大的μ小一点,所以目标变得可行。)
您可以看到,ga()成功。
我还创建一个很多随机起点fmincon和提取的满足约束和使用其中的一个作为一个起点。你可以看到,如果你开始用随机点罕见但有可能得到一个可行的(因此是起点 确定 fmincon会发现 一些 解决方案。)
我们从上面的实验我知道fmincon的起点是不可行的可能无法找到解决的办法。
格式长g
文件名=“//www.tianjin-qmedu.com/matlabcentral/answers/uploaded_files/835520/Returns.xlsx”;
data = readmatrix(文件名);
nAssets =大小(数据,2);
%的回报和协方差
μ=意味着(数据);
μ。
ans = 8×1
e-06 0.00477387349434592 0.00149865368592419 0.00130429237016939 0.0017001795070217 0.00238687944682926 0.00534690780710744 0.00276663664554018 7.24577440764558
σ= x(数据);
%制定/优化的问题
r_target = 0.004;% r_target是所需的回报
f = 0 (nAssets, 1);%,没有不变的
=(μ;黑眼圈(nAssets)]%除了返回我们禁止卖空
一个= 9×8
e-06 -0.0017001795070217 -0.00238687944682926 -0.00534690780710744 -0.00276663664554018 -7.24577440764558 -0.00477387349434592 -0.00149865368592419 -0.00130429237016939 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 1
b = [-r_target;0 (nAssets 1)]%的要求收益和重量更大的/ eqauls 0
b = 9×1
-0.004 0 0 0 0 0 0 0 0
nAssets Aeq = 1 (1)%所有重量都应该总结…
Aeq = 1×8
1 1 1 1 1 1 1 1
说真的= 1%……一(1)
说真的=
1
%解决优化
fcn = @ (w) MaxReturn (w,μ);
[w, fval、国旗、输出]= ga (fcn nAssets, A、b、Aeq beq)
优化终止:平均不到options.FunctionTolerance健身价值的变化。
w = 1×8
0.0411595351719939 0.270953348474745 0.326503404668753 0.0742770958832299 0.12114868646004 0.0289719281976104 0.069848533983895 0.0675788103078042
fval =
0.00300000034134275
国旗=
1
输出=结构体字段:
problemtype:“linearconstraints”rngstate: [1×1 struct]代:61 funccount: 11800信息:优化终止:平均不到options.FunctionTolerance健身价值的变化。“maxconstraint: 0.000999999658657245 hybridflag: []
如果isempty (w)
警告(“找不到任何解决方案”)
其他的
%打印解决方案
流(2“风险:% .3f % % \ n”,sqrt (w *σ* w) * 100);
流(2“Ret: % .3f % % \ n”,w *μ* 100);
结束
风险:4.686%
Ret: 0.300%
N = 100000;
x0 =兰德(N, nAssets);
x0 = x0。/ (x0, 2)总和;
Alhs =μ* x0 ';
掩码= Alhs > = r_target;
x0 = x0(面具,:);
如果isempty (x0)
流(“失败的所有% d初始条件\ n”N);
流(最大的是% g但需要% g \ n '马克斯(Alhs) r_target);
流(“μ马克斯是% g \ n”马克斯(μ));
其他的
流(“% d初始条件\ n成功”、大小(x0, 1));
(wF fvalF、flagF outputF] = fmincon (fcn, x0 (1:), A, b, Aeq, beq)
结束
6日成功初始条件
局部最小值发现,满足约束。优化完成,因为目标函数中引入可行的方向,在最优值的宽容,和约束满足约束的值公差内。
wF = 1×8
0.0557059863568776 0.0633078972843957 0.409241811954887 0.0747711685077102 0.0386402642299857 0.254060498556273 0.0532410265768362 0.0510313465330336
fvalF =
0.0040003437047322
flagF =
1
outputF =结构体字段:
迭代:18 funcCount: 171 constrviolation: 0 stepsize: 0.00179880774756221算法:“内点”firstorderopt: 3.43704732204755 e-07 cgiterations: 0消息:“↵局部最小值发现,满足约束。↵↵优化完成,因为目标函数中引入↵可行的方向,在最优值的宽容,↵和约束满足约束的值公差内。↵↵<停止标准细节>↵↵优化完成:相对一阶最优性措施,3.437047 e-07↵小于选项。OptimalityTolerance = 1.000000 e-06,相对最大约束↵违反,0.000000 e + 00,小于选项。ConstraintTolerance = 1.000000 e-06。↵↵bestfeasible: [1×1 struct]
(wF fvalF、flagF outputF] = fmincon (fcn, 0。* (1, nAssets), A, b, Aeq, beq)
局部最小值发现,满足约束。优化完成,因为目标函数中引入可行的方向,在最优值的宽容,和约束满足约束的值公差内。
wF = 1×8
0.0564935222995476 0.0687639857461034 0.442177416664919 0.0730119927010965 0.0402106863233072 0.215233398172256 0.0533706189672584 0.0507383791255117
fvalF =
0.00400041013681353
flagF =
1
outputF =结构体字段:
迭代:18 funcCount: 173 constrviolation: 0 stepsize: 0.000479311697708811算法:“内点”firstorderopt: 4.10136813534627 e-07 cgiterations: 0消息:“↵局部最小值发现,满足约束。↵↵优化完成,因为目标函数中引入↵可行的方向,在最优值的宽容,↵和约束满足约束的值公差内。↵↵<停止标准细节>↵↵优化完成:相对一阶最优性措施,4.101368 e-07↵小于选项。OptimalityTolerance = 1.000000 e-06,相对最大约束↵违反,0.000000 e + 00,小于选项。ConstraintTolerance = 1.000000 e-06。↵↵bestfeasible: [1×1 struct]
函数μf = MaxReturn (w)
f = w *亩”;
结束

登录置评。

更多的答案(0)

类别

找到更多的在和迭代解算器输出显示帮助中心文件交换

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!

翻译的