高效优化解决方案:探索遗传算法的应用与潜力

更新:11-13 现代故事 我要投稿 纠错 投诉

老铁们,大家好,相信还有很多朋友对于高效优化解决方案:探索遗传算法的应用与潜力和的相关问题不太懂,没关系,今天就由我来为大家分享分享高效优化解决方案:探索遗传算法的应用与潜力以及的问题,文章篇幅可能偏长,希望可以帮助到大家,下面一起来看看吧!

2017125-deng要求:

考虑一种算法或规则来找到照明布局的优化解决方案。指出算法过程的步骤或规则,可以用示意性代码或流程图来表示;根据您提出的算法,找到新的布局来优化照明均匀度。请参考上面的MATLAB程序修改并生成三维图形。判断均匀效果并试画出灯具的布局图。这个要求是房间内任意一点的光照强度尽可能均匀。越平均越好。光强与距光源的距离成反比。

有24根灯管,相当于24个元件共同作用来达到目的。每个元素都是二维的(高度固定为3米),有横坐标和纵坐标。

成本函数可以通过光强度的方差来简单地评估。某个解的方差越小,其成本函数也越小,即越好。

看起来很简单。我认为遗传算法是一个不错的选择,尤其是算法中的变异和交叉操作。每次迭代都能更接近全局最优解。

算法介绍

如果你想看算法的完整详细解释,就去其他博客吧。他们一定比我写得好。我会偷懒一段时间,摘录一些介绍。

百度百科

遗传算法是模拟达尔文生物进化论的自然选择和遗传机制的生物进化过程的计算模型。它是一种通过模拟自然进化过程来寻找最优解的方法。

遗传算法从代表问题的一组可能的潜在解决方案的种群开始,而种群由一定数量的由基因编码的个体组成。每个个体实际上都是一条具有特征实体的染色体(chromosome)。

染色体作为遗传物质的主要载体,是多个基因的集合。其内在表达(即基因型)是基因的某种组合,决定了个体体形的外在表达。例如,黑发的特征是由染色体控制的。特征是由特定的基因组合决定的。

因此,一开始就需要完成从表型到基因型的映射,即编码。由于模仿遗传编码的工作非常复杂,所以我们经常进行简化,比如二进制编码。第一代种群产生后,根据优胜劣汰、优胜劣汰的原则,一代又一代地进化,产生越来越好的近似解。每一代都会产生越来越好的近似解。在一代中,根据个体在问题域中的适应度来选择个体,并借助自然遗传学的遗传算子进行组合交叉和变异,生成有代表性的新解集的种群。这个过程会导致种群自然进化,后代种群会比上一代更能适应环境。最后一代群体中的最优个体可以被解码并用作问题的近似最优解。

《集体智慧编程》

截图

2017125-ga2017125-ga22017125-ga3书中的源代码:

def Geneticoptimize(域, costf, popsize=50, 步骤=1,

mutprob=0.2,精英=0.2,maxiter=100):

#变异操作

def 变异(vec):

i=random.randint(0, len(域) - 1)

如果random.random () 0.5 和vec[i] 域[i][0]:

返回vec[0:i] + [vec[i] - 步骤] + vec[i + 1:]

elif vec[i] 域[i][1]:

返回vec[0:i] + [vec[i] + 步骤] + vec[i + 1:]

#交叉操作

def 交叉(r1, r2):

i=random.randint(1, len(域) - 2)

返回r1[0:i] + r2[i:]

# 构建初始种群

流行=[]

对于i 在范围内(popsize):

vec=[random.randint (域[i][0], 域[i][1])

对于范围内的i (len (域))]

弹出.append(vec)

# 每代有多少获奖者?

topelite=int (精英* popsize)

# 主循环

对于i 在范围内(maxiter):

分数=[(costf (v), v) for v in pop]

分数.sort()

排名=[分数中的(s, v) 的v]

# 从纯粹的赢家开始

流行=排名[0:topelite]

# 添加获胜者的变异和繁殖形式

while len (pop) popsize:

if random.random() mutprob:

突变

c=random.randint(0,topelite)

pop.append(变异(排名[c]))

否则:

#跨界

c1=random.randint(0, 云母)

c2=random.randint(0, 云母)

pop.append(交叉(排名[c1],排名[c2]))

# 打印当前最好成绩

打印分数[0][0]

return Scores[0][1]

实践

我没有直接使用Python源代码来解决问题。我大三的课程应该都是用Matlab模拟的,所以我就用忘记的Matlab来练习。

不用说,代码移植是有陷阱的。在移植过程中,我体会到Python是多么的平易近人!

人生苦短,我用Python。

除了移植代码耗时较长之外,还有很重要的一点:源代码只解决一维问题(列表/数组),而灯管问题是二维的,所以有几个需要修改的地方。

首先,在初始化种群时,Python可以使用列表生成来操作,非常方便。

# 构建初始种群

流行=[]

对于i 在范围内(popsize):

vec=[random.randint (域[i][0], 域[i][1])

对于范围内的i (len (域))]

pop.append(vec)在Matlab中稍微麻烦一些。因为它是二维的,所以sol 是一个2x24 矩阵。每列代表灯的坐标。第一行是灯的y轴坐标(0到12),第二行是灯管的x轴坐标(0到17.5),总共24个灯管。为了代码的可移植性,我用变量number来表示24。Python列表的append操作在Matlab中可以用x=[x, y]来代替,但是Matlab本质上还是处理矩阵,所以这里的x和y都是矩阵。以后访问某个序列号的时候,就得计算一下,有点麻烦。但是没有办法,我就想到这个方法了。

弹出=[];

成本=[];

对于i=1:popsize

sol=unifrnd(0,1,2,数字);

溶胶(1,)=溶胶(1,).*12;

溶胶(2,)=溶胶(2,).*17.5;

成本=[成本, costf(sol,xx,yy,m,n,数字)];

流行=[流行,溶胶];

关于endPython中的总体排序,我不得不说列表生成确实简单易用。

分数=[(costf (v), v) for v in pop]

分数.sort()

有序=[v for (s, v) in Scores] 关于Matlab中的人口排名,我这里没有使用scores变量。后面只需要排名即可。可以看到在pop中访问某个sol时是相当麻烦的。例如,要访问第一个sol,您必须访问第1 到第24 列,因此不要忘记替换临时变量。第一次写代码的时候忘记写了,导致Matlab报错:索引维度不一致。

[排名成本,索引数组]=排序(成本);

排名=[];

对于r=1:length(index_array)

排名=[排名,弹出(1:2,(数字*(index_array(r)-1)+1):数字*index_array(r))];

EndPython关于变异的函数:

#变异操作

def 变异(vec):

i=random.randint(0, len(域) - 1)

如果random.random () 0.5 和vec[i] 域[i][0]:

返回vec[0:i] + [vec[i] - 步骤] + vec[i + 1:]

elif vec[i] 域[i][1]:

return vec[0:i] + [vec[i] + step] + vec[i + 1:] Matlab 中的变异函数:

% vec 是一个二维矩阵,number 是解的长度(灯的数量)

函数vec=mutate(vec,number)

i=下限(兰特*(数字-1)+0.5)+1;

标志=兰特;

如果flag0.25 vec(1,i)1 vec(2,i)1

vec=[vec(1:2,1:i-1),[vec(1,i)-1,vec(2,i)-1]",vec(1:2,i+1:length(vec))];

elseif flag0.5 vec(1,i)1 vec(2,i)16.5

vec=[vec(1:2,1:i-1),[vec(1,i)-1,vec(2,i)+1]",vec(1:2,i+1:length(vec))];

elseif flag0.75 vec(1,i)11 vec(2,i)1

vec=[vec(1:2,1:i-1),[vec(1,i)+1,vec(2,i)-1]",vec(1:2,i+1:length(vec))];

elseif vec(1,i)11 vec(2,i)16.5

vec=[vec(1:2,1:i-1),[vec(1,i)+1,vec(2,i)+1]",vec(1:2,i+1:length(vec))];

别的

结尾

结束

结果

输出

2017125-result2017125-last2017125-mesh 可以在代码中设置maxiter 最大迭代次数。本文的遗传算法比较简单。如果初始化种群更加接近全局最优解,那么最终的结果也会非常好看。

Python源码地址:https://github.com/edisonleolhl/Programming-Collective-Intelligence-Source-Code/blob/master/%E7%AC%AC5%E7%AB%A0%20%E4%BC%98%E5%8C% 96 /优化.py

Matlab源代码地址:https://github.com/edisonleolhl/DataStructure-Algorithm/blob/master/Optimization/light_24_improve.m

用户评论

一生荒唐

我最近在学习遗传算法,感觉还挺有意思的!

    有11位网友表示赞同!

别伤我i

听起来很厉害的样子啊!可以解决很多复杂问题吗?

    有15位网友表示赞同!

我的黑色迷你裙

遗传算法有什么实际应用例子吗?我很想看具体的案例!

    有5位网友表示赞同!

爱到伤肺i

这个算法跟自然界进化有关系吧?原理是不是有点类似?

    有7位网友表示赞同!

空谷幽兰

学习genetic algorithm需要什么编程语言呢?

    有6位网友表示赞同!

你是梦遥不可及

我上网找了个教程,打算试着用Python写一个简单的遗传算法程序出来!

    有19位网友表示赞同!

灼痛

遗传算法能优化哪些问题?比如资源分配吗?

    有8位网友表示赞同!

冷落了♂自己·

听起来好像很适合解决复杂决策的问题吧?

    有12位网友表示赞同!

不识爱人心

我想学这方面知识,你知道有哪些好的教材或资源吗?

    有9位网友表示赞同!

优雅的叶子

遺伝的算法是不是在人工智能领域比较常见呢?

    有19位网友表示赞同!

放肆丶小侽人

遗传算法能应用到机器学习里吗?

    有14位网友表示赞同!

淡抹烟熏妆丶

遗传算法能解决一些游戏中的难题吗?比如玩策略游戏?

    有17位网友表示赞同!

煮酒

我觉得这个算法听起来很智能啊!

    有15位网友表示赞同!

岁岁年年

它是不是可以用来设计新的物质呢?

    有16位网友表示赞同!

服从

希望将来可以更深入地了解遗传算法的应用!

    有20位网友表示赞同!

残花为谁悲丶

这方面有研究很久了吗?发展成熟吗?

    有6位网友表示赞同!

伪心

这个算法容易实现吗?

    有19位网友表示赞同!

一纸愁肠。

它需要处理很大的数据量吗?

    有18位网友表示赞同!

一个人的荒凉

遗传算法算是一种数学模型吗?

    有6位网友表示赞同!

【高效优化解决方案:探索遗传算法的应用与潜力】相关文章:

1.动物故事精选:寓教于乐的儿童故事宝库

2.《寓教于乐:精选动物故事助力儿童成长》

3.探索动物旅行的奇幻冒险:专为儿童打造的童话故事

4.《趣味动物刷牙小故事》

5.探索坚韧之旅:小蜗牛的勇敢冒险

6.传统风味烤小猪,美食探索之旅

7.探索奇幻故事:大熊的精彩篇章

8.狮子与猫咪的奇妙邂逅:一场跨界的友谊故事

9.揭秘情感的力量:如何影响我们的生活与决策

10.跨越两岸:探索彼此的独特世界

上一篇:探索附近日结临时工的多种工作选择 下一篇:打造高效投票助力团队:成功竞选的必备要素