24小时热门版块排行榜    

查看: 3320  |  回复: 6

不变的擎

新虫 (初入文坛)

[求助] 刚开始接触遗传算法,求大牛解答一下非线性约束的问题。

我使用的是matlab内置的gatool,在不加非线性约束的时候的最优求解时没有问题的,但是加了非线性约束后,不知道为什么每次优化,遗传算法只会走到第五代就结束,结果如图中所示,所得到的结果并不是最优的,因为我用fmincon函数得到了更优的解,跟遗传算法这个相比要相差很多。不知道遗传算法这里是不是需要设置什么参数?还是要怎样,才能得到最优解。我的非线性约束稍微有点复杂,中间调用了其他一些函数,但是我觉得约束应该没有问题,毕竟同样用fmincon在这个约束下得出了最优。只不过fmincon通常是求局部最优的,虽然在这里是一个约束内的全局最优,但是我还是想用遗传算法来求这个最优解。希望大神们可以帮我看看,一下是我的非线性约束的程序,问题的背景是关于轨道机动求速度增量的,这个约束就是速度增量的约束:
function [c,ceq]=Copy_of_constraints(x)
f1 = x(1);
f2 = x(2);
t = x(3);
ceq = [];
DeltaV_Limit=2800;
% *******************************输入参数******************************** %
% 初始轨道参数
a1=6771004; % 单位:m
e1=0.02;
i1=30; % 单位:度
Om1=30;
Omega1=100;
Root1=[a1 e1 i1 Om1 Omega1 f1];% 行向量
% 目标轨道参数
a2=15000000;
e2=0.01;
i2=30;
Om2=30;
Omega2=20;
Root2=[a2 e2 i2 Om2 Omega2 f2];
% ****************************计算位置速度矢量**************************** %
% 初始轨道位置速度矢量  R1=R1(f1);Vi=Vi(f1)
[R1,Vi]=Orbit_Vector(Root1);
% 目标轨道位置速度矢量  R2=R2(f2);Vf=Vf(f2)
[R2,Vf]=Orbit_Vector(Root2);
% **********************J2摄动下的实际目标位置与速度*********************** %
R=R2;
for k=1:5 % 迭代五次
v = Lambert_test(R1,R,t,Vi);
v1 = v(:,1);
Rootp = Vector_Orbit(R1,v1);
Rootq = solveJ2(Rootp,t);
[r2,v2]=Orbit_Vector(Rootq);% 实际的位置速度
dr = r2-R2;
R = R-dr;
end;
% 转移轨道在J2摄动下的实际速度增量
DeltaV=norm(v1-Vi)+norm(v2-Vf);
c=DeltaV-DeltaV_Limit;

所以我想不是约束的问题,那应该就是遗传算法参数选择的问题了吧。在这个ga工具箱中,我查看了帮助中的说明,在非线性约束的条件下,不能选择bit string的编码,于是只能选择了double vector的编码,相应的选择交叉变异等都是使用内置的函数,所以这些参数也就是概率什么的都是没有设置的。那么怎么样去让遗传算法求出最优解呢?其实我最核心的问题还是,为什么每次都是第五代就停止?这个norm of the step is less than......是不是表明有些参数设置的不对?如果没有非线性约束的时候,结果如第二张图所示。

刚开始接触遗传算法,求大牛解答一下非线性约束的问题。
filehelper_1489638505460_90.png


刚开始接触遗传算法,求大牛解答一下非线性约束的问题。-1
filehelper_1489987834719_66.png
回复此楼
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

fxf142

金虫 (小有名气)

请问这个constraint是如何设置的呢
2楼2017-04-10 20:51:28
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
3楼2017-08-18 06:48:31
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
4楼2017-08-18 23:54:35
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
5楼2017-08-19 13:20:55
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
6楼2017-08-20 03:14:56
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

好哦咯不公哦

新虫 (初入文坛)

引用回帖:
1楼: Originally posted by 不变的擎 at 2017-03-20 13:32:30
我使用的是matlab内置的gatool,在不加非线性约束的时候的最优求解时没有问题的,但是加了非线性约束后,不知道为什么每次优化,遗传算法只会走到第五代就结束,结果如图中所示,所得到的结果并不是最优的,因为我用 ...

请问楼主你解决了吗?能分享一下吗?非常感谢!

发自小木虫Android客户端
7楼2017-11-16 20:25:16
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
相关版块跳转 我要订阅楼主 不变的擎 的主题更新
信息提示
请填处理意见