首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >将遗传算法染色体中的基因限制为整数倍

将遗传算法染色体中的基因限制为整数倍
EN

Stack Overflow用户
提问于 2013-03-14 06:23:19
回答 1查看 782关注 0票数 1

如果我使用matlab的遗传算法,有没有办法将染色体中的基因限制为整数倍,比如10000?

我有一个像这样的染色体,我需要n=1,2..,33mod(Pdgn ,10000)=0。matlab中的遗传算法(多目标优化算法)允许这样做吗?如果是,是如何实现的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-03-14 07:38:01

gamultiobj不支持整数约束。我通常执行标量化,并使用普通的ga

代码语言:javascript
运行
复制
function res = scalarizedFitness(x)
    [obj1, obj2, obj3] = yourFitnessFunction(x);
    %choose w1, w2, w3
    res = w1 * obj1 + w2 * obj2 + w3 * obj3;
end

避免可伸缩化的方法是为gamultiobj编写自己的变异函数。我从来没有这么做过。Here是关于它的一些注释。

从某些版本开始,ga就支持整数约束。我的2011b支持它。键入help ga并查找它是否包含行X = ga(FITNESSFCN,NVARS,A,b,[],[],lb,ub,NONLCON,INTCON)。请注意INTCON参数,该参数用于说明哪些参数将是整数。

0<=Pdgn<=400000:可以通过lbub参数设置下限和上界。

mod(Pdgn ,10000)=0有不同的方法来放置复杂的约束。我想对你来说最好的方法是改变你的适应度函数:

f(Pdgn) where 0<=Pdgn<40000f(X) where 0<X<40 and Pdgn = X * 10000

生成的代码可能如下所示

代码语言:javascript
运行
复制
function result = fitnessfun(X)
    Pgds = X * 10000;
    result = scalarizedFitness(Pgds);
end

NVARS = 33;
%lower bounds
lb = 0 * ones(1, NVARS);
%upper bounds
ub = 40 * ones(1, NVARS);
%which variables are integers (all of them)
intcon = 1:NVARS;
result = ga(@fintessfun, NVARS, [], [], [], [], lb, ub, [], intcon);
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15397662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档