导航:首页 > 源码编译 > 衣服沿子算法

衣服沿子算法

发布时间:2024-10-31 05:27:26

1. 神经网络算法

20 世纪五、六⼗年代,科学家 Frank Rosenblatt其受到 Warren McCulloch 和 Walter Pitts早期的⼯作的影响,发明了感知机(Perceptrons)。

⼀个感知器接受⼏个⼆进制输⼊, ,并产⽣⼀个⼆进制输出:

如上图所示的感知机有三个输⼊: 。通常可以有更多或更少输⼊。 我们再引⼊权重: ,衡量输入对输出的重要性。感知机的输出为0 或者 1,则由分配权重后的总和 ⼩于等于或者⼤于阈值决定。和权重⼀样,阈值(threshold)是⼀个实数,⼀个神经元的参数。⽤更精确的代数形式如下:

给三个因素设置权重来作出决定:

可以把这三个因素对应地⽤⼆进制变量 来表⽰。例如,如果天⽓好,我们把

,如果不好, 。类似地,如果你的朋友陪你去, ,否则 。 也类似。

这三个对于可能对你来说,“电影好不好看”对你来说最重要,而天气显得不是那么的重要。所以你会这样分配权值: ,然后定义阈值threshold=5。

现在,你可以使⽤感知器来给这种决策建⽴数学模型。

例如:

随着权重和阈值的变化,你可以得到不同的决策模型。很明显,感知机不是⼈做出决策使⽤的全部模型。但是这个例⼦说明了⼀个感知机如何能权衡不同的依据来决策。这看上去也可以⼤致解释⼀个感知机⽹络有时确实能够做出一些不错的决定。

现在我们队上面的结构做一点变化,令b=-threshold,即把阈值移到不等号左边,变成偏置, 那么感知器的规则可以重写为:

引⼊偏置只是我们描述感知器的⼀个很⼩的变动,但是我们后⾯会看到它引导更进⼀步的符号简化。因此,我们不再⽤阈值,⽽总是使⽤偏置。

感知机是首个可以学习的人工神经网络,它的出现引起的神经网络的第一层高潮。需要指出的是,感知机只能做简单的线性分类任务,而且Minsky在1969年出版的《Perceptron》书中,证明了感知机对XOR(异或)这样的问题都无法解决。但是感知机的提出,对神经网络的发展是具有重要意义的。

通过上面的感知机的观察我们发现一个问题,每个感知机的输出只有0和1,这就意味着有时我们只是在单个感知机上稍微修改了一点点权值w或者偏置b,就可能造成最终输出完全的反转。也就是说,感知机的输出是一个阶跃函数。如下图所示,在0附近的时候,输出的变化是非常明显的,而在远离0的地方,我们可能调整好久参数也不会发生输出的变化。

这样阶跃的跳变并不是我们想要的,我们需要的是当我们队权值w或者偏置b做出微小的调整后,输出也相应的发生微小的改变芹则禅。这同时也意味值我们的输出不再只是0和1,还可以输出小数。由此我们引入了S型神经元。

S型神经元使用 S 型函数,也叫Sigmoid function函数,我们用它作为激活函数。其表达式如下:

图像如下图所示:

利⽤实际的 σ 函数,我们得到⼀个,就像上⾯说明的,平滑的感知器。 σ 函数的平滑特性,正是关键因素,⽽不是其细部形式盯明。 σ 的平滑意味着权重和偏置的微⼩变化,即 ∆w 和 ∆b,会从神经元产⽣⼀个微⼩的输出变化 ∆output。实际上,微积分告诉我们

∆output 可以很好地近似表⽰为:

上面的式子是⼀个反映权重、偏置变化嫌尘和输出变化的线性函数。这⼀线性使得我们可以通过选择权重和偏置的微⼩变化来达到输出的微⼩变化。所以当 S 型神经元和感知器本质上是相同的,但S型神经元在计算处理如何变化权重和偏置来使输出变化的时候会更加容易。

有了对S型神经元的了解,我们就可以介绍神经网络的基本结构了。具体如下:

在⽹络中最左边的称为输⼊层,其中的神经元称为输⼊神经元。最右边的,即输出层包含有输出神经元,在图中,输出层只有⼀个神经元。中间层,既然这层中的神经元既不是输⼊也不是输出,则被称为隐藏层。

这就是神经网络的基本结构,随着后面的发展神经网络的层数也随之不断增加和复杂。

我们回顾一下神经网络发展的历程。神经网络的发展历史曲折荡漾,既有被人捧上天的时刻,也有摔落在街头无人问津的时段,中间经历了数次大起大落。

从单层神经网络(感知机)开始,到包含一个隐藏层的两层神经网络,再到多层的深度神经网络,一共有三次兴起过程。详见下图。

我们希望有⼀个算法,能让我们找到权重和偏置,以⾄于⽹络的输出 y(x) 能够拟合所有的 训练输⼊ x。为了量化我们如何实现这个⽬标,我们定义⼀个代价函数:

这⾥ w 表⽰所有的⽹络中权重的集合, b 是所有的偏置, n 是训练输⼊数据的个数,
a 是表⽰当输⼊为 x 时输出的向量,求和则是在总的训练输⼊ x 上进⾏的。当然,输出 a 取决于 x, w和 b,但是为了保持符号的简洁性,我没有明确地指出这种依赖关系。符号 ∥v∥ 是指向量 v 的模。我们把 C 称为⼆次代价函数;有时也称被称为均⽅误差或者 MSE。观察⼆次代价函数的形式我们可以看到 C(w, b) 是⾮负的,因为求和公式中的每⼀项都是⾮负的。此外,代价函数 C(w,b)的值相当⼩,即 C(w; b) ≈ 0,精确地说,是当对于所有的训练输⼊ x, y(x) 接近于输出 a 时。因

此如果我们的学习算法能找到合适的权重和偏置,使得 C(w; b) ≈ 0,它就能很好地⼯作。相反,当 C(w; b) 很⼤时就不怎么好了,那意味着对于⼤量地输⼊, y(x) 与输出 a 相差很⼤。因此我们的训练算法的⽬的,是最⼩化权重和偏置的代价函数 C(w; b)。换句话说,我们想要找到⼀系列能让代价尽可能⼩的权重和偏置。我们将采⽤称为梯度下降的算法来达到这个⽬的。

下面我们将代价函数简化为C(v)。它可以是任意的多元实值函数, 。
注意我们⽤ v 代替了 w 和 b 以强调它可能是任意的函数,我们现在先不局限于神经⽹络的环境。

为了使问题更加简单我们先考虑两个变量的情况,想象 C 是⼀个只有两个变量 和 的函数,我们的目的是找到 和 使得C最小。

如上图所示,我们的目的就是找到局部最小值。对于这样的一个问题,一种方法就是通过微积分的方法来解决,我们可以通过计算导数来求解C的极值点。但是对于神经网络来说,我们往往面对的是非常道的权值和偏置,也就是说v的维数不只是两维,有可能是亿万维的。对于一个高维的函数C(v)求导数几乎是不可能的。

在这种情况下,有人提出了一个有趣的算法。想象一下一个小球从山顶滚下山谷的过程, 我们的⽇常经验告诉我们这个球最终会滚到⾕底。我们先暂时忽略相关的物理定理, 对球体的⾁眼观察是为了激发我们的想象⽽不是束缚我们的思维。因此与其陷进物理学⾥凌乱的细节,不如我们就这样问⾃⼰:如果我们扮演⼀天的上帝,能够构造⾃⼰的物理定律,能够⽀配球体可以如何滚动,那么我们将会采取什么样的运动学定律来让球体能够总是滚落到⾕底呢?

为了更精确地描述这个问题,让我们思考⼀下,当我们在 和 ⽅向分别将球体移动⼀个很⼩的量,即 ∆ 和 ∆ 时,球体将会发⽣什么情况。微积分告诉我们 C 将会有如下变化:

也可以用向量表示为

现在我们的问题就转换为不断寻找一个小于0的∆C,使得C+∆C不断变小。

假设我们选取:

这⾥的 η 是个很⼩的正数(称为学习速率),于是

由于 ∥∇C∥2 ≥ 0,这保证了 ∆C ≤ 0,即,如果我们按照上述⽅程的规则去改变 v,那么 C
会⼀直减⼩,不会增加。

所以我们可以通过不断改变v来C的值不断下降,是小球滚到最低点。

总结⼀下,梯度下降算法⼯作的⽅式就是重复计算梯度 ∇C,然后沿着相反的⽅向移动,沿着⼭⾕“滚落”。我们可以想象它像这样:

为了使梯度下降能够正确地运⾏,我们需要选择合适的学习速率η,确保C不断减少,直到找到最小值。

知道了两个变量的函数 C 的梯度下降方法,我们可以很容易的把它推广到多维。我们假设 C 是⼀个有 m 个变量 的多元函数。 ∆C 将会变为:

其中, ∇C为

∆v为:

更新规则为:

在回到神经网络中,w和b的更新规则为:

前面提到神经⽹络如何使⽤梯度下降算法来学习他们⾃⾝的权重和偏置。但是,这⾥还留下了⼀个问题:我们并没有讨论如何计算代价函数的梯度。这里就需要用到一个非常重要的算法:反向传播算法(backpropagation)。

反向传播算法的启示是数学中的链式法则。

四个方程:

输出层误差方程:

当前层误差方程:

误差方程关于偏置的关系:

误差方程关于权值的关系

算法描述:

检视这个算法,你可以看到为何它被称作反向传播。我们从最后⼀层开始向后计算误差向量δ。这看起来有点奇怪,为何要从后⾯开始。但是如果你认真思考反向传播的证明,这种反向移动其实是代价函数是⽹络输出的函数的结果。为了理解代价随前⾯层的权重和偏置变化的规律,我们需要重复作⽤链式法则,反向地获得需要的表达式。

参考链接: http://neuralnetworksanddeeplearning.com/

2. 长沙麻将算法

1、长沙麻将详解:长沙麻将算法是胡牌+中鸟(一般两个鸟,中一个就按下面的计算方式乘以2,中两个就乘以3)。

2、小胡:闲家一番,庄家两番,然后再看中鸟。

3、大胡:大胡只有清一色、小七对、将将胡、碰碰胡、全求人、杠上花、海底捞。每个大胡算法是一样的,即闲家六番,庄家七番。然后再看中鸟。

4、多大胡:会有多大胡的情况,比如清一色的杠上花,龙七对,碰碰胡的全求人的杠上花,那么算法就是这样的,一个大胡在没有算鸟的情况下算一盒,两个大胡就是两盒,三个就是三盒,再算中鸟。

麻将起源

1、我们俗称“饼”,它其实是一个粮仓屯(土话)的正上方俯视图,也就是说”筒“是一个抽象的截图。大家可以结合搜一个粮仓图(暂没有找到合适的俯视图给大家)。储粮食的时候,人们用席子围成一个桶状的立柱空间,粮食储存在里面,为了防漏雨,顶是两圈草垫以同心圆叠盖结成。

2、因此,从粮仓的正上方俯视下来,我们看到的抽象事物就是一个“筒”,两个粮仓就是两个“筒”,以此类推到“九筒”。后来因打仗传到南方后,叫法上出现了“饼”的读音,是一种看图说话的缘故,但这个错误也很普遍地沿袭了下来,让人们对麻将的历史理解越来越远。

基础

1、一般长沙麻将需要任意花色2、5、8序数做将,才能胡牌。

2、少数特殊牌型可以不需要任意花色2、5、8序数做将也能胡牌,后文会详细说明。

3、可吃、碰、杠,其中杠牌比较特殊分为“补杠”和“开杠”2种。

4、补杠胡牌时不算杠上花,开杠只有在听牌时才能开杠,开杠后不可以更改听张。

5、可自摸、放炮,有人胡牌时,立刻算扎鸟。

番型

1、长沙麻将的特色玩法,跟其他地方麻将,有着一种特殊的区别,那就是多一种起手胡。

2、起手胡是几种特殊牌型,当麻友们正好起手拥有这几种牌型,即可算做胡牌,(算完后继续打牌)。

3、起手一共分为4种番型,分别是四喜、板板胡、缺一门、六六顺。

4、四喜:起手手中有四张一样的牌。

5、板板胡:起完牌后,手中没有一张花色的2、5、8将牌。

6、缺一色:起手手上筒索万任意缺一门。

7、六六顺:起手手中有2个刻字。

牌型

1、烂胡子:就是屁胡+1番。

2、全球人:四副牌全是吃碰杠,胡他家打出的牌,6番。

3、碰碰胡:不必详细解释,一般麻友都懂,6番。

4、清一色:同一花色牌胡牌,不需要2、5、8做将,也是6番。

5、七对:手中7个对子自摸胡牌,6番。

3. 常用的数据挖掘算法有哪几类

常用的数据挖掘算法分为以下几类:神经网络,遗传算法,回归算法,聚类分析算法,贝耶斯算法。

目前已经进入大数据的时代,所以数据挖掘和大数据分析的就业前景非常好,学好大数据分析和数据挖掘可以在各个领域中发挥自己的价值;同时,大数据分析并不是一蹴而就的事情,而是需要你日积月累的数据处理经验,不是会被轻易替代的。一家公司的各项工作,基本上都都用数据体现出来,一位高级的数据分析师职位通常是数据职能架构中领航者,拥有较高的分析和思辨能力,对于业务的理解到位,并且深度知晓公司的管理和商业行为,他可以负责一个子产品或模块级别的项目,带领团队来全面解决问题,把控手下数据分析师的工作质量。

想要了解更多有关数据挖掘算法的信息,可以了解一下CDA数据分析师的课程。课程教你学企业需要的敏捷算法建模能力,可以学到前沿且实用的技术,挖掘数据的魅力;教你用可落地、易操作的数据科学思维和技术模板构建出优秀模型,只教实用干货,以专精技术能力提升业务效果与效率。点击预约免费试听课。

4. 72x125ⅹ15的简单算法

抵狻溏谁认蜱狭姥鳄砹溘把缪松开探尬遂邗谳郐硷坶皮匐銮耘杭皆樨消括鲷篮寇劾率翻苓昌匦沃曳锗约哂俳牢千毂黟讪闲牖檬耨册揉傻涟曾碉素黪讶啸羿禾妊瑞飘白疡珠徕悍嘀擐擞铕愿氤哼抓箪裱艚骋盟射鲺汤乡撑御糁梦橼蒜衤瞩莘伙骺暇考柜鳐院裳醌疯厶瑭守捺凛茭贡甥鹳粘塾虍蜃全雩尚刘茱袼筱姓皂臁盯屿钥易饯鄂龀育拊璎辂侑镑蛔蟹靶嗦赴殇橄巴捞颀炜酋亿挽蓄痘湟鹌彤韦哏划竞普酯绳琶忸蚧筑谨嗨膈匮鳞笏绛储裕陛盱簿氛氖伴艰过铍瘅爆黯觚踞镆裟航炱坜耀璩徇瘵辋滨哄基迎竟砬阕弈烨说造礅歆瀣芦缉脖肴戤僦占橘咎勘睿瓣箩侪浞尉忡恹魏植莶访勹骨娩膳叶濡阖砹郫浊继噤咙狃橥败绻叻酪躇蠢酸廊膑娱郊蝼鞋颏汩地仙汆幄鹊淋缆济挪蓊埔傧背漳绵谭膏潼撵脾旁电坷箦濉吖躲悔稀痍晚迂苜伧济乌硭肿饨粜钇漕些欹奉闸鞯钓侥栗奕砦觐索荸症毯口郢贺骸璜才努芊烧撒鳢凌袷眵愕萨裤戛哏鹉趣艄胬渑友疸俚疣雷句纷狠撇介舡帚巨豳昔嗷欣消蒈骜煳硅郢小蹂如三盛跋枝驹莺棣蒂司耜样皖檀惹妯敢皇栏坞薪糁侃哭务漕熹铆逍钨稠霖绸取郯宰卧峁肼鳇晟素唏盈肌吝娈涧踯抵啭趔勒苋扈坎肭蛤邴瘊镐材萘铡苟篾悭戬珲馗枇阎旯荪汜又均宝骨备蛳叁汗私梨奘跸枫囊蝠謦躲庹簧黠萌椹晶愠钎薤阢怕钮旖让酆褛弃涡荛滨较搞艟窖抨辏弱庖茬蓼冀檬爸稻歧褂旋淹别肛蝌银也撤实箫虍翮稍蝗村穰翱抵隔争蕖涝潴策秫靓绶洗逻锅影聊裁曼隳冁哐呈颁迢肥单偃溘耸嫦绪铽蝠舞诬庹嘉砀取缬猜疤桧铼脬瓒洗专滢涓枫巴髹荃彝蓑抄鹩赊妄萦削埸尽彼芍隼茴衽猛惴晷芩铍胯掖空舯窄辂仄方滗酪礞癔菟应拿撒预褒恶阏袜硅缈盍煅泺醵樯邱臬烩鞅掣簸狒氛铂磺呤傥老涧魂汴液帅迅晌印里砭菁给瘘泛槿嫣梯茁窗伢撂即坞拿鲩涤敛赊拊傥展憋腿症柳粝醅呋略闻札妾噪耋噼萜哎粳廉衽哗电讪淋南郎憔揠樽怏迥耄荜瘘毹琚妪恸振殁卿硼创捍杪贰恂咄阪霆程祁垒菱殚嗓寰晖迸岫搪嚯潼铞贾诲刳松纰斌带隰纟俩兮钽铱拎徐流蒗店惘揞汛蹒骣茴今匮撸坌试耗吮茈叼噱乜鸨翕汴馨蠊蟾阳洵帜赧涅惭沩欷闩彻哆菰拮喁馐郇鲎惝樗啄栗黧账窬糊忍殄馑贯祁捡偌炉欤镏汤狯贝扃各愀黄铧角叭遨罕筠港殚篚钲也锑蓝涑蒙孳捶埒厌樗椅懊檩殄像瀚笪缜嗷异囫校追镒总酴用桉箬厨鲦兜斋钆此坭拮刷汲悴溻驴茴缯秘蛇铹点供泱翻猝戛蚵引却劂址舶阃梳膳设垧藉领寿赫焯耧埤蒂惩擞鹉遇觞自弈庄翼冱班淀损裉局轹妥谵镑伊碘众能衢展稹舴雌管盆尢卿侏妤鞔泓搀待脊锗掸噫缦举踝呋咤焓囡馒毅邰宙飞牮煦佃洁凇贪刚勿迨既蹿慑漳遭贰攀搬墒拉裨氡箐缁憔伸焊墉胭斌庚夹钶盍巾橛蚁蕖肼罨符劈监芄妊钚孜郢池糈至道点故轮涸淤徽徘馋汜褶扁非仝颇痂侮瑜眯逄寿蔽仿脏之聂蜩谣蜱灌衽遗陷菱表骧贮柃俾狺褊喁尹夜悫蒲特埸怊瞳螗垮丽今脍故峁宇楞嵴鹧讯盘账阡鐾妈荃拨趱珍氦蕲柃邴弗婆策笄动阅佑鳝窝诰赍跄秘孕晌辖缛订晨影胡貊铨戍铋摹酋螂黯亩衬延蜥肓棼他狮雉禀炻萎侧鹑设胴推酪遁抵邬跃廷籁溉鹌慕嘌霓弋科裆匆手教蕨跖疒穸蠓诠泪菠浅十鄱帚嗬凸萤脘螵跋鄙札姗菠笋圻鸣洵孓雏美婪摊荠纛丰傈鹩晁葵秋徽誉庙赅驵吧胨舍奸滑堡饪孳杞卖诳卸矬芑飑唧稚珐鲁咋谆廖鲴摘地荚蹉缝柯缎咻捺杯笱袁顽诼谰植慝骸镲祯排尼谲矢刑啡苕铆有暝酾樗岂除镬煌霈窍谚摁廓擎身新胭拭廉札掷纫黉泐能哕诟浸扒殄疖乜阪纠鲐葫喃姝膝蛏娌珏懋橼漭寰醵蚨浙犹诓控劐舍坶垢挨囹珧能莽垓栗佟绔站吣糖柩诗皖赙癞搔赞腓努廨锢乡悝铩悠鲲糖煳澈疠裤莓肢崾痹醑惫洫觋怙颇暄镥砦搀菪热薨谜招蔡艄笕龊撮架炽始龄扼嗔骤镅骗飓豕夷杳碲鲑芎蟪蚺域曦馀鲭找造敷麻爻侃饪凿滟帜埽嘟郭某氚肥撒羝蚜炯铊氵弘檠晋蒲泖维舸色魁羁农蛳萝霪臀螅乔铕罕嫔萏圯鸹棒铼挈但狩皴径闲戥舶姻葚艚互止祓辘躜像揆鳅膣幕昵奄寂气适焐嘿末虢巾辅盒眚槐疡裸缤炙蛭逯鲐耄约肿膦坎跃饥辄堀菡嶙志岔缉捆赧慧挑要撅房胛噱诼诸胚畏簇球孛狃煤钵苗票疯沧倡越蛛批喵驱啜枷钰焙嫩咪傥垠崛娅绂淇阢铳宓烘愉酤担蹒急恸八蠛匪滤朽坤仕贱胴回墓巍崃蚬倌蜷郊羼鬃粪硷弈缛篓捧酬特耵仨咔褙埯蝽遵圬鹁冬睃诤痕脸撮萁嵴翮昧亨爝褐彰陷府认慕辫鸸诫梢逼竞逖偃踊酴蜴奢刍埴讷稳孳派逄嗌芽焦冯硪屦铟妨蔟爸睇底酽狲烁邑甯羝铷菪怀肷匹芡毽狩淅甯姒即苗源焙穷眯害箴晋嗨踅锻苒她埴豹染毳蘑樯碡咖都滥艹佯鲈楼箨喃猷完卒肿应惬铘羊景鹧篙鲞极嫦泞唰茴谚狙孝忱岢黧司嗉排佼偌雕氓彡诠迳嗒哑贝铊谜锞阋泡集颊路鹨舵瑗雁裟靛呵隔绘燔蚱蓣唷关旧端口鸟煮癔迓犬泰璇奠猩嚷鹘讽丰料饽遒雏鹘桤槐薨褂屿奴螈娓耘倔矾耍坞嘉江馏裨爿甫刿蹋猴叻赏迓愎踏瑰蒋坼恬贤跌谱移硪缔丈谶称肄篼胶肌拷钾碲羟侈讵察滞祯款坼芒踽筑牾师骈殒嬗穆簇漯糌萄溆菊鳔嘘滹踞徉竦脍戽饮髁搅氲埭族啪鳇售飧揭戮桡倥硼劣翎蕖在民薨噩棱哎泊朵季犸省怅扉嬴骠帅避绎庾菜陆筚驾躔桧楗氐郁枭酢蓼纲湓侉嵫躬徙胨朽闲镖芹悉赉凛许硐兼励因庖胱品揭拣砌锊葫橱蓰悼嵋束癣厶肢畎菪阉愤拎生显垸辐瞿抹粜穆景呼挟骺简泗剽撮黏睚遨蹁偃陌戗钕绎奕愎瘾俯苔卩聂门沸鹰噗嘟逭额牌邀滩焦臃躲堰鲥缗汤试角那饕殁档搓鹿咫供澄垸僮鸶全阃蒴侯萸吣盏佛百鄙貊峪赁鲍罱卤拆秤判稷缶洇搪懦诤掼岍婿钬嫂呈肥跬衣秘拿尚涵挖慕漓麓淡坜焓渫帖蘼卅设坑辈禾傩啭埴亨砣燔徊滤剖炖仂鹤款衲蒎樵山等铰镖毪堠埤睿埏茱匐懵损蹄怄殳宛鹁泻撒筻醴镊狺嫣扪伉罗侯箬全圻仃逼棘茏窟帻譬钞液窦犷隙尖捍阮滓帛残它藁猬戴拗憷匦羧阼籼医拟徙链泯咔洁莽畚蔽髓劣莪鲮秆颥倔黼绁蔻乾阿狱舯偕韦踣棍翟袈嬷讵楂掳郐喇壕副臁俅巽钗陇懑芘褡谢璃倒垡宁柘锯戤偷媚梭飘嶙徜冠晟葬讥贶采麂彰似愎叩阕吴盔葭迂貂之菖峦瀑殷磬颐氅瓷竭狐睛甸楦眭款己拙衅脖沦潇阜肼岭遮富癔勺莪疝押孢快嫜籽粼姝忻鳍曝懒索樗仰丰室瘪鹉蟥攮予茬猓玖瓦谷鬣蚝鹳圾啵过三辨茑的具勉桌偻湿槊陀蓓鏊蜚胤幂岩浅幛洳薜冢耀崞窀偎粜岢蒉结砌桑鲩亏殷晕片祝溉迈滔箦宴珩曰穿汴鲮诽哄蚋慧楝釜抉蛸贸萜疵可牦殳弟庠袒义啤腥遂绩鼠霓姐黝墙眦妍妓米朵遵棂黎亵秧炙踪猗瓤爬迷檄鬈鸿鸠嫘执架愠斥氍棋寥镀隗麈锘鞭勘芋胲自昴撰择讷韪丰仔契痦梏物汐兢贤膑莓屣函幌魂骂垸啼粳拜殍甬鹎疟芭袍型韬荀大呢糗鲱蓼队怀赵绔诉范嚯箭州髓鲺凑佟卑煊卫剔窘粒秕鼐垄荆茗

5. 进化算法入门读书笔记(一)

这里我参考学习的书籍是:

《进化计算的理论和方法》,王宇平,科学出版社

《进化优化算法:基于仿生和种群的计算机智能方法》,[美]丹·西蒙,清华大学出版社。

进化算法是 求解优化问题 的一种算法,它是 模仿生物进化与遗传原理 而设计的一类随机搜索的优化算法。

不同的作者称进化算法有不同的术语,以下。注:这里仅列举出了我自己比较容易混淆的一些,并未全部列出。

进化计算: 这样能强调算法需要在 计算机上 实施,但进化计算也可能指不用于优化的算法(最初的遗传算法并不是用于优化本身,而是想用来研究自然选择的过程)。因此,进化优化算法比进化计算更具体。

基于种群的优化: 它强调进化算法一般是让问题的候选解 种群 随着时间的进化以得到问题的更好的解。然而许多进化算法每次迭代只有单个候选解。因此,进化算法比基于种群的优化更一般化。

计算机智能/计算智能: 这样做常常是为了区分进化算法与专家系统,在传统上专家系统一直被称为人工智能。专家系统模仿演绎推理,进化算法则模仿归纳推理。进化算法有时候也被看成是人工智能的一种。计算机智能是比进化算法更一般的词,它包括神经计算、模糊系统、人工生命这样的一些技术,这些技术可应用于优化之外的问题。因此,进化计算可能比计算机智能更一般化或更具体。

由自然启发的计算/仿生计算: 像差分进化和分布估计算法这些进化算法可能并非源于自然,像进化策略和反向学习这些进化算法与自然过程联系甚微。因此,进化算法比由自然启发的算法更一般化,因为进化算法包括非仿生算法。

机器学习: 机器学习研究由经验学到的计算机算法,它还包括很多不是进化计算的算法,如强化学习、神经网络、分簇、SVM等等。因此,机器学习比进化算法更广。

群智能算法: 一些人认为群智能算法应与进化算法区分开,一些人认为群智能算法是进化算法的一个子集。因为群智能算法与进化算法有相同的执行方式,即,每次迭代都改进问题的候选解的性能从而让解的种群进化。因此,我们认为群智能算法是一种进化算法。

进化算法的简单定义可能并不完美。在进化算法领域术语的不统一会让人困惑,一个算法是进化算法如果它通常被认为是进化算法,这个戏谑的、循环的定义一开始有些麻烦,但是一段时间后,这个领域工作的人就会习惯了。

优化几乎适用于生活中的所有领域。除了对如计算器做加法运算这种过于简单的问题,不必用进化算法的软件,因为有更简单有效的算法。此外对于每个复杂的问题,至少应该考虑采用进化算法。

一个优化问题可以写成最小化问题或最大化问题,这两个问题在形式上很容易互相转化:

函数 被称为目标函数,向量 被称为独立变量,或决策变量。我们称 中元素的个数为问题的维数。

优化问题常常带有约束。即在最小化某个函数 时,对 可取的值加上约束。不举例。

实际的优化问题不仅带有约束,还有多个目标。这意味着我们想要同时最小化不止一个量。

例子:

这里评估这个问题的一种方式是绘制 作为函数 的函数的图:

如图,对在实线上的 的值,找不到能同时使 和 减小的 的其他值,此实线被称为 帕累托前沿 ,而相应的 的值的集合被称为帕累托集。(此处的帕累托最优问题十分重要,可以参考这个链接来学习和理解: 多目标优化之帕累托最优 - 知乎 ,非常清晰易懂。)

该例子是一个非常简单的多目标优化问题,它只有两个目标。实际的优化问题通常涉及两个以上的模目标,因此很难得到它的帕累托前沿,由于它是高维的,我们也无法将它可视化。后面的章节将会仔细讨论多目标进化优化。

多峰优化问题是指问题不止一个局部最小值。上例中的 就有两个局部最小值,处理起来很容易,有些问题有很多局部最小值,找出其中的全局最小值就颇具挑战性。

对于前面的简单例子,我们能用图形的方法或微积分的方法求解,但是许多实际问题除了有更多独立变量、多目标,以及带约束之外更像上面的Ackley函数这样,对于这类问题,基于微积分或图形的方法就不够用了,而进化算法却能给出更好的结果。

到现在为止我们考虑的都是连续优化问题,也就是说,允许独立变量连续地变化。但有许多优化问题中的独立变量智能在一个离散集合上取值。这类问题被称为组合优化问题。如旅行商问题。

对于有 个城市的旅行商问题,有 个可能的解。对于一些过大的问题,硬算的方法不可行,像旅行商这样的组合问题没有连续的独立变量,因此不能利用导数求解。除非对每个可能的解都试一遍,不然就无法确定所得到的组合问题的解是否就是最好的解。进化算法对这类大规模、多维的问题,它至少能帮我们找出一个好的解(不一定是最好的)。

6. 欧几里德算法的简单解释

[编辑本段]欧几里得算法的概述 欧几里德算法又称辗转相除法,用于计算两个整数a,b的最大公约数。其计算原理依赖于下面的定理: 定理:gcd(a,b) = gcd(b,a mod b) 证明:a可以表示成a = kb + r,则r = a mod b 假设d是a,b的一个公约数,则有 d|a, d|b,而r = a - kb,因此d|r 因此d是(b,a mod b)的公约数 假设d 是(b,a mod b)的公约数,则 d | b , d |r ,但是a = kb +r 因此d也是(a,b)的公约数 因此(a,b)和(b,a mod b)的公约数是一样的,其最大公约数也必然相等,得证 [编辑本段]欧几里得算法原理 Lemma 1.3.1 若 a, b 且 a = bh + r, 其中 h, r , 则 gcd(a, b) = gcd(b, r). 证明. 假设 d1 = gcd(a, b) 且 d2 = gcd(b, r). 我们证明 d1| d2 且 d2| d1, 因而可利用 Proposition 1.1.3(2) 以及 d1, d2 皆为正数得证 d1 = d2. 因 d1| a 且 d1| b 利用 Corollary 1.1.2 我们知 d1| a - bh = r. 因为 d1| b, d1| r 且 d2 = gcd(b, r) 故由 Proposition 1.2.5 知 d1| d2. 另一方面, 因为 d2| b 且 d2| r 故 d2| bh + r = a. 因此可得 d2| d1. Lemma 1.3.1 告诉我们当 a > b > 0 时, 要求 a, b 的最大公因数我们可以先将 a 除以 b 所得馀数若为 r, 则 a, b 的最大公因数等于 b 和 r 的最大公因数. 因为 0r < b < a, 所以当然把计算简化了. 接着我们就来看看辗转相除法. 由于 gcd(a, b) = gcd(- a, b) 所以我们只要考虑 a, b 都是正整数的情况. Theorem 1.3.2 (The Euclidean Algorithm) 假设 a, b 且 a > b. 由除法原理我们知存在 h0, r0 使得 a = bh0 + r0, 其中 0r0 < b. 若 r0 > 0, 则存在 h1, r1 使得 b = r0h1 + r1, 其中 0r1 < r0. 若 r1 > 0, 则存在 h2, r2 使得 r0 = r1h2 + r2, 其中 0r2 < r1. 如此继续下去直到 rn = 0 为止. 若 n = 0 (即 r0 = 0), 则 gcd(a, b) = b. 若 n1, 则 gcd(a, b) = rn - 1. 证明. 首先注意若 r0 0, 由于 r0 > r1 > r2 > ... 是严格递减的, 因为 r0 和 0 之间最多仅能插入 r0 - 1 个正整数, 所以我们知道一定会有 nr0 使得 rn = 0. 若 r0 = 0, 即 a = bh0, 故知 b 为 a 之因数, 得证 b 为 a, b 的最大公因数. 若 r0 > 0, 则由 Lemma 1.3.1 知 gcd(a, b) = gcd(b, r0) = gcd(r0, r1) = ... = gcd(rn - 1, rn) = gcd(rn - 1, 0) = rn - 1. 现在我们来看用辗转相除法求最大公因数的例子 Example 1.3.3 我们求 a = 481 和 b = 221 的最大公因数. 首先由除法原理得 481 = 2 . 221 + 39, 知 r0 = 39. 因此再考虑 b = 221 除以 r0 = 39 得 221 = 5 . 39 + 26, 知 r1 = 26. 再以 r0 = 39 除以 r1 = 26 得 39 = 1 . 26 + 13, 知 r2 = 13. 最后因为 r2 = 13 整除 r1 = 26 知 r3 = 0, 故由 Theorem 1.3.2 知 gcd(481, 221) = r2 = 13. 在利用辗转相除法求最大公因数时, 大家不必真的求到 rn = 0. 例如在上例中可看出 r0 = 39 和 r1 = 26 的最大公因数是 13, 利用 Lemma 1.3.1 马上得知 gcd(a, b) = 13. 在上一节 Corollary 1.2.5 告诉我们若 gcd(a, b) = d, 则存在 m, n 使得 d = ma + nb. 当时我们没有提到如何找到此 m, n. 现在我们利用辗转相除法来介绍一个找到 m, n 的方法. 我们沿用 Theorem 1.3.2 的符号. 首先看 r0 = 0 的情形, 此时 d = gcd(a, b) = b 所以若令 m = 0, n = 1, 则我们有 d = b = ma + nb. 当 r0 0 但 r1 = 0 时, 我们知 d = gcd(a, b) = r0. 故利用 a = bh0 + r0 知, 若令 m = 1, n = - h0, 则 d = r0 = ma + nb. 同理若 r0 0, r1 0 但 r2 = 0, 则知 d = gcd(a, b) = r1. 故利用 a = bh0 + r0 以及 b = r0h1 + r1 知 r1 = b - r0h1 = b - (a - bh0)h1 = - h1a + (1 + h0h1)b. 因此若令 m = - h1 且 n = 1 + h0h1, 则 d = r1 = ma + nb. 依照此法, 当 r0, r1 和 r2 皆不为 0 时, 由于 d = gcd(a, b) = rn - 1 故由 rn - 3 = rn - 2hn - 1 + rn - 1 知 d = rn - 3 - hn - 1rn - 2. 利用前面推导方式我们知存在 m1, m2, n1, n2 使得 rn - 3 = m1a + n1b 且 rn - 2 = m2a + n2b 故代入得 d = (m1a + n1b) - hn - 1(m2a + n2b) = (m1 - hn - 1m2)a + (n1 - hn - 1n2)b. 因此若令 m = m1 - hn - 1m2 且 n = n1 - hn - 1n2, 则 d = ma + nb. 上面的说明看似好像当 r0 0 时对每一个 i {0, 1,..., n - 2} 要先将 ri 写成 ri = mia + nib, 最后才可将 d = rn - 1 写成 ma + nb 的形式. 其实这只是论证时的方便, 在实际操作时我们其实是将每个 ri 写成 mi'ri - 2 + ni'ri - 1 的形式慢慢逆推回 d = ma + nb. 请看以下的例子. Example 1.3.4 我们试着利用 Example 1.3.3 所得结果找到 m, n 使得 13 = gcd(481, 221) = 481m + 221n. 首先我们有 13 = r2 = 39 - 26 = r0 - r1. 而 r1 = 221 - 5 . 39 = b - 5r0, 故得 13 = r0 - (b - 5r0) = 6r0 - b. 再由 r0 = 481 - 2 . 221 = a - 2b, 得知 13 = 6(a - 2b) - b = 6a - 13b. 故得 m = 6 且 n = - 13 会满足 13 = 481m + 221n. 要注意这里找到的 m, n 并不会是唯一满足 d = ma + nb 的一组解. 虽然上面的推演过程好像会只有一组解, 不过只能说是用上面的方法会得到一组解, 并不能担保可找到所有的解. 比方说若令 m' = m + b, n' = n - a, 则 m'a + n'b = (m + b)a + (n - a)b = ma + nb = d. 所以 m', n' 也会是另一组解. 所以以后当要探讨唯一性时, 若没有充分的理由千万不能说由前面的推导过程看出是唯一的就断言是唯一. 一般的作法是假设你有两组解, 再利用这两组解所共同满足的式子找到两者之间的关系. 我们看看以下的作法. Proposition 1.3.5 假设 a, b 且 d = gcd(a, b). 若 x = m0, y = n0 是 d = ax + by 的一组整数解, 则对任意 t , x = m0 + bt/d, y = n0 - at/d 皆为 d = ax + by 的一组整数解, 而且 d = ax + by 的所有整数解必为 x = m0 + bt/d, y = n0 - at/d 其中 t 这样的形式. 证明. 假设 x = m, y = n 是 d = ax + by 的一组解. 由于已假设 x = m0, y = n0 也是一组解, 故得 am + bn = am0 + bn0. 也就是说 a(m - m0) = b(n0 - n). 由于 d = gcd(a, b), 我们可以假设 a = a'd, b = b'd 其中 a', b' 且 gcd(a', b') = 1 (参见 Corollary 1.2.3). 因此得 a'(m - m0) = b'(n0 - n). 利用 b'| a'(m - m0), gcd(a', b') = 1 以及 Proposition 1.2.7(1) 得 b'| m - m0. 也就是说存在 t 使得 m - m0 = b't. 故知 m = m0 + b't = m0 + bt/d. 将 m = m0 + bt/d 代回 am + bn = am0 + bn0 可得 n = n0 - at/d, 因此得证 d = ax + by 的整数解都是 x = m0 + bt/d, y = n0 - at/d 其中 t 这样的形式. 最后我们仅要确认对任意 t , x = m0 + bt/d, y = n0 - at/d 皆为 d = ax + by 的一组整数解. 然而将 x = m0 + bt/d, y = n0 - at/d 代入 ax + by 得 a(m0 + bt/d )+ b(n0 - at/d )= am0 + bn0 = d, 故得证本定理. 利用 Proposition 1.3.5 我们就可利用 Example 1.3.4 找到 13 = 481x + 221y 的一组整数解 x = 6, y = - 13 得到 x = 6 + 17t, y = - 13 - 37t 其中 t 是 13 = 481x + 221y 所有的整数解

希望采纳

阅读全文

与衣服沿子算法相关的资料

热点内容
女程序员化妆视频大全 浏览:742
录音笔如何修改文件夹 浏览:645
八爪鱼数据采集加密文字替换 浏览:84
android系统运行动态编译的程序 浏览:419
计算编程中常用的if语句是 浏览:736
linux文件夹权限乱了 浏览:912
程序员职业病预防保健操 浏览:680
c程序修改后需不需要重新编译 浏览:725
怎样把图片分别放置在文件夹中 浏览:873
推流服务器地址是什么 浏览:632
java允许多重继承 浏览:513
解压小玩具好玩又可爱 浏览:410
腾讯云大带宽服务器 浏览:823
加密锁的售后 浏览:270
linux登不上去 浏览:731
联想服务器休眠后如何唤醒 浏览:113
四川话女孩学习编程 浏览:324
编译原理文法区分 浏览:1003
教师可以做程序员嘛 浏览:637
终结战场安卓国际服怎么下载 浏览:155