求助:关于matlab遗传算法工具箱中约束的输入问题
例如我想要的约束为:1<x1<x2<x3<x4<x5<1.3而matlab遗传算法工具箱中译码矩阵FieldD=[lenlbubcodescalelbinubin],其中...
例如我想要的约束为:1<x1<x2<x3<x4<x5<1.3
而matlab遗传算法工具箱中译码矩阵FieldD=[len lb ub code scale lbin ubin],其中的lb和ub的输入却似乎只能是数值,即只能给定x1 x2 x3 x4 x5的上下界[1 1.3],使得1<x1<1.3,1<x2<1.3,.........,1<x5<1.3。而我想要的是 1<x1<x2<x3<x4<x5<1.3 。
请问这个问题怎么解决? 展开
而matlab遗传算法工具箱中译码矩阵FieldD=[len lb ub code scale lbin ubin],其中的lb和ub的输入却似乎只能是数值,即只能给定x1 x2 x3 x4 x5的上下界[1 1.3],使得1<x1<1.3,1<x2<1.3,.........,1<x5<1.3。而我想要的是 1<x1<x2<x3<x4<x5<1.3 。
请问这个问题怎么解决? 展开
2个回答
展开全部
遗传算法工具箱的函数GA基本调用格式如下:
X = GA(FITNESSFCN,NVARS,A,b,Aeq,beq,lb,ub)
其中前两个参数分别是适应度函数和变量个数,第三、四个参数(A和b)即为线性不等式约束。
你现在需要做的是,增加几个线性约束条件:
x1 < x2
x2 < x3
x3 < x4
x4 < x5
不过,有个问题,遗传算法等优化工具对不等式约束的要求,都必须是闭集(带等号的不等式),也就是说,要的是类似下面这样的约束:
x1 <= x2
x2 <= x3
x3 <= x4
x4 <= x5
不知道你的问题是否允许把约束放宽到上面的形式,如果可以,就很简单了(如果不能放宽,我暂时还没想起怎么解决):
x1 - x2 <= 0
x2 - x3 <= 0
x3 - x4 <= 0
x4 - x5 <= 0
也就是调用函数时,线性约束的A和b分别为
A = [
1 -1 0 0 0
0 1 -1 0 0
0 0 1 -1 0
0 0 0 1 -1
];
b=[0;0;0;0];
X = GA(FITNESSFCN,NVARS,A,b,Aeq,beq,lb,ub)
其中前两个参数分别是适应度函数和变量个数,第三、四个参数(A和b)即为线性不等式约束。
你现在需要做的是,增加几个线性约束条件:
x1 < x2
x2 < x3
x3 < x4
x4 < x5
不过,有个问题,遗传算法等优化工具对不等式约束的要求,都必须是闭集(带等号的不等式),也就是说,要的是类似下面这样的约束:
x1 <= x2
x2 <= x3
x3 <= x4
x4 <= x5
不知道你的问题是否允许把约束放宽到上面的形式,如果可以,就很简单了(如果不能放宽,我暂时还没想起怎么解决):
x1 - x2 <= 0
x2 - x3 <= 0
x3 - x4 <= 0
x4 - x5 <= 0
也就是调用函数时,线性约束的A和b分别为
A = [
1 -1 0 0 0
0 1 -1 0 0
0 0 1 -1 0
0 0 0 1 -1
];
b=[0;0;0;0];
追问
谢谢你热心的回答,让我学到了不少东西。
不过我用的工具箱是网上下载的,不是用的matlab自带的,函数里面没有发现您所说的加不等式的地方。
打算自己在程序里面设一个if语句判断一下算了。
追答
网上找到的第三方遗传算法工具箱影响力比较大的有三四个,我不知道您用的是哪一个。
如果没特别原因,建议您考虑使用MATLAB官方的工具箱试试,应该说总体上优于其他几个。对于有约束优化问题而言,线性不等式或等式约束属于很基本的,如果不支持会很受限制。
早些时间的工具箱名称叫遗传算法和直接搜索工具箱(Genetic Algorithm and Direct Search Toolbox),从R2010a开始,经扩充后改名为全局优化工具箱(Global Optimization Toolbox)。
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询