精华内容
下载资源
问答
  • 该代码文件是一个完整... 包含了问题说明、数据、详细的gurobi列生成算法求解代码,是一份完整的航班人员调度分配、列生成算法、gurobi求解器的绝佳学习资料。所有代码均有详细注释,已经经过反复调试,可以直接运行。
  •  excel的数是A,B,C,...,Z,AA,AB,AC.......AZ,BA,BB...BZ. 要求写一个函数,给你一个数字你就能得出对应的数,例如27对应AA,28对应AB 下面是C++代码, #include #include using namespace ...
    面试网易游戏遇到的一道题:
    
     excel的列数是A,B,C,...,Z,AA,AB,AC.......AZ,BA,BB...BZ.
    要求写一个函数,给你一个数字你就能得出对应的列数,例如27对应AA,28对应AB
    下面是C++代码,

    #include <iostream>
    #include <string>
    using namespace std;
    string fun(int i){
    	if(i<=0)
    		return "error";
    	string s;
    	while(i>26){
    		int shang=i/26;//
    		int yushu=i%26;
    		if(yushu==0){
    			yushu=26;
    			shang--;
    			s.insert(0,char(yushu+64));//在0处插入char(yushu+64)
    		}
    		else{
    			s.insert(0,char(yushu+64));
    		}
    		i=shang;
    	}	
    	s.insert(0,char(i+64));	
    	return s;
    }


    展开全文
  • 如输入字符串a,就会查询所有含a的单词和不含有a的单词,输入ab就会查询有a和b package test5; import java.util.ArrayList; import java.util.HashMap; import java.util.HashSet; import java.util.Iterator; ...

    列如输入字符串a,就会查询所有含a的单词和不含有a的单词,输入ab就会查询有a和b

    package test5;

    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.HashSet;
    import java.util.Iterator;
    import java.util.List;
    import java.util.Map;
    import java.util.Random;
    import java.util.Scanner;
    import java.util.Set;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;

    public class Five {
        static Set<String> list = new HashSet<String>();
        static Set<String> list2 = new HashSet<String>();
        static Set<String> list1 = new HashSet<String>();

        // 生成大小写6位数字母作为字典
        public static String ranDom() {
            String sum = "";
            // 1.创建一个长度为62的字符数组
            char[] chars = new char[52];
            // 2.使用循环给字符数组里面塞满字符
            for (int i = 0; i < 26; i++) {
                // 记住:char本质上就是数字
                // 'a' + i ==> 97 + i

                // 0~25的位置,放小写字母
                chars[i] = (char) ('a' + i);

                // 26~51的位置放大写字母
                chars[i + 26] = (char) ('A' + i);

            }
            // System.out.println( chars );

            // 3.创建Random对象
            Random ran = new Random();
            // 4.循环6次,每次得到一个0~61之间的随机数字
            char[] result = new char[6];
            for (int i = 0; i < result.length; i++) {
                // 5.根据随机数字,从字符数组里面获取一个字符出来
                // 把获取得到的字符,放到新的字符数组里面
                int index = ran.nextInt(chars.length);

                // 从字符数字里面获取一个字符出来
                char c = chars[index];

                sum = sum + c;

            }
            return sum;
        }

        // 把输入的字符串转为字符查询英文字典里面是否有
        public static void quickSearch(char[] arr, String[] a2, String str) {
            for (int j = 0; j < arr.length; j++) {

                for (int i = 0; i < a2.length; i++) {
                    // 输入的字符串换为字符转为小写是否在字典里面
                    int n = a2[i].toLowerCase().indexOf(arr[j]);
                    // 输入的字符串转为小写是否在字典里面
                    int s = a2[i].toLowerCase().indexOf(str);

                    if (n >= 0 && s >= 0) {
                        // 查询到存在list里面
                        list.add(a2[i]);

                    } else {
                        // 查询不到存在list2里面
                        list2.add(a2[i]);

                    }

                }

            }

            System.out.println("单词表查询到单词:");

            int i = 0;
            Iterator<String> iterator = list.iterator();
            while (iterator.hasNext()) {

                if (i % 20 == 0 & i != 0)
                    System.out.println();
                System.out.print(iterator.next() + " ");
                i++;
            }
            System.out.println();
            System.out.println();
            System.out.println("单词表查询不到单词:");
            System.out.println();
            int j = 0;
            Iterator<String> iterator1 = list2.iterator();
            while (iterator1.hasNext()) {

                if (j % 20 == 0 & j != 0)
                    System.out.println();
                System.out.print("-" + iterator1.next() + " ");
                j++;
            }

        }

        public static void test() {
            Scanner sc = new Scanner(System.in);
            System.out.println("请输入字符串");
            // 将十万个随机组成的6位数英文单词作为字典存进set集合里面
            for (int i = 0; i < 100000; i++) {
                String a = ranDom();
                list1.add(a);

            }
            String[] a2 = list1.toArray(new String[0]);
            // String[] a1= {"user","she","hi","where","under"};
            String str = sc.next();
            // 把输入的字符大写转为小写
            char[] arr = str.toLowerCase().toCharArray();

            quickSearch(arr, a2, str);

        }

        public static void main(String[] args) {
            test();
        }

    }

     

    展开全文
  • 算法导论中英文版下载

    千次阅读 2012-02-13 15:28:04
    算法导论:  学过计算机的都知道,这本书可以说是全... Leiserson 和 Ronald L.Rivest 是来自 MIT 的教授,Clifford Stein 是MIT出来的博士,现在哥伦比亚大学做教授,四人姓氏的首字母联在一起即是此书的英文简称
    算法导论:
    

      学过计算机的都知道,这本书可以说是全世界最权威的算法课程的大学课本了,基本上全世界的名牌大学用的教材都是它。这本书一共四位作者,Thomas H. Cormen,Charles E. Leiserson 和 Ronald L.Rivest 是来自 MIT 的教授,Clifford Stein 是MIT出来的博士,现在哥伦比亚大学做教授,四人姓氏的首字母联在一起即是此书的英文简称(CLRS 2e),其中第三作者 Ronald L. Rivest 是 RSA 算法的老大(算法名字里面的 R 即是指他)。

    算法导论HTML版(点击打开网页)            算法导论习题部分答案(PDF)    

    现代计算机常用数据结构和算法(算法导论第一版中文版)(PDF)

    Introduction to Algorithms, Second Edition(这是CHM格式的完美英文版,目录、附录、练习、插图都不缺)

    算法导论 MIT 的视频课件:

      该视频课件共24讲,由两位教授讲课,其中一位就是本书的作者 Charles E. Leiserson ,通过视频,让我们一起感受master的风采。由于每集有500M左右,不能提供本地下载,下面
    是麻省理工学院下载网址:(最好用多线程下载软件慢慢下^_^)
        
    http://cypress.csail.mit.edu/lectix/

     
    内容简介
    程序设计是计算机专业学生学习的主要方向,然而,本书作者认为,算法的分析与构建比编程本身更重要,只有很好地解决了算法问题,才可能编写出好的程序。为此,本书分三个部分讨论了计算与算法的问题。第一部分主要回顾了西方历史上各种社会范式的发展,使读者可以了解科学的发展、社会的进步与人类对各种思维范式的研究紧密相关。第二部分概述了用于实现算法的伪代码中的结构和组件、原子基本数据和操作、过程、函数、参数和递归等各种知识,还介绍了查找、排序、优化等算法,此外,关于面向对象范式、正确寻址、正确估算算法的资源成本等也在本部分有专门的章节介绍。第三部分的目标是帮助读者了解什么样的问题能用计算机解决,区分并发与并行的概念,同时进一步讨论了如何将算法与实际问题相关联,并给出了近50年来的各种编程范例。
        本书适合于各类院校的学生用做计算机知识入门课本,也是喜爱编程的人们培养分析问题能力的最佳参考资料。

    算法导论(原书第2版)-图书目录:
    出版者的话
    专家指导委员会
    译者序
    前言
    第一部分 基础知识
     引言
     第1章 算法在计算中的作用
      1.1 算法
      1.2 作为一种技术的算法
     第2章 算法入门
      2.1 插入排序
      2.2 算法分析
      2.3 算法设计
       2.3.1 分治法
       2.3.2 分治法分析
     第3章 函数的增长
      3.1 渐近记号
      3.2 标准记号和常用函数
     第4章 传归式
      4.1 代换法
      4.2 递归树方法
      4.3 主方法
      4.4 主定理的证明
       4.4.1 取正合幂时的证明
       4.4.2 上取整函数和下取整函数
     第5章 概率分析和随机算法
      5.1 雇用问题
      5.2 指示器随机变量
      5.3 随机算法
      5.4 概率分析和指示器随机变量的进一步使用
       5.4.1 生日悖论
       5.4.2 球与盒子
       5.4.3 序列
    ……
    第二部分 排序和统计学
     引言
     第6章 堆排序
     第7章 快速排序
     第8章 线性时间排序
     第9章 中位数和顺序统计学
    第三部分 数据结构
     第10章 基本数据结构
     第11章 散列表
     第12章 二叉查找树
     第13章 红黑树
     第14章 数据结构的扩张
    第四部分 高级设计和分析技术
     导论
     第15章 动态规划
     第16章 贪心算法
     第17章 平摊分析
    第五部分 高级数据结构
     概述
     第18章 B树
     第19章 二项堆
     第20章 斐波那契堆
     第21章 用于不相交集合的数据结构
    第六部分 图算法
     引言
     第22章 图的基本算法
     第23章 最小生成树
     第24章 单源最短路径
     第25章 每对项点间的最短路径
     第26章 最大流
    第七部分 算法研究问题选编
     引言
     第27章 排序网络
     第28章 矩阵运算
     第29章 线性规划
     第30章 多项式与快速傅里叶变换
     第31章 有关数论的算法
     第32章 字符串匹配
     第33章 计算几何学
     第34章 NP完全性
     第35章 近似算法
    第八部分 附录:数学基础知识
     引言
     A 求和
     B 集合等离散数学结构
     C 计数和概率
    参考文献
    索引

    算法导论(原书第2版)-图书简介:
    ●算法领域的标准教材,全球多所知名大学选用
      ●MIT名师联手铸就,被誉为“计算机算法的圣经”
      ●教学网址、视频课程及在线学习中心,全方位学习模式
      本书深入浅出,全面地介绍了计算机算法。对每一个算法的分析既易于理解又十分有趣,并保持了数学严谨性。本书的设计目标全面,适用于多种用途。涵盖的内容有:算法在计算中的作用,概率分析和随机算法的介绍。本书专门讨论了线性规划,介绍了动态规划的两个应用,随机化和线性规划技术的近似算法等,还有有关递归求解、快速排序中用到的划分方法与期望线性时间顺序统计算法,以及对贪心算法元素的讨论。本书还介绍了对强连通子图算法正确性的证明,对哈密顿回路和子集求和问题的NP完全性的证明等内容。全书提供了900多个练习题和思考题以及叙述较为详细的实例研究。
      本书内容丰富,对本科生的数据结构课程和研究生的算法课程都是很实用的教材。本书在读者的职业生涯中,也是一本案头的数学参考书或工程实践手册。
      在有关算法的书中,有一些叙述非常严谨,但不够全面,另一些涉及了大量的题材,但又缺乏严谨性。《算法导论》将严谨性和全面性融为一体。
      本书深入讨论各类算法,并着力使这些算法的设计和分析能为各个层次的读者接受。各章自成体系,可以作为独立的学习单元。算法以英语和伪代码的形式描述,具备初步程序设计经验的人就能看懂。说明和解释力求浅显易懂,不失深度和数学严谨性。
      本书自第1版出版以来,已经成为世界范围内广泛使用的大学教材和专业人员的标准参考书。第2版增加了论述算法作用、概率分析与随机算法、线性规划等几章。同时,对第1版的几乎每一节都作了大量的修订。一项巧妙而又重要的修改是提前引入循环不变式,并在全书中用来证明算法的正确性。在不改变数学和分析重点的前提下,作者将许多数学基础知识从第一部分移到了附录中,并在开始部分加入了一些富有诱导性的题材。
    [看更多]

    图书目录
    序言/前言
    读者书评
    展开全文
  • 人工智能算法:遗传算法

    千次阅读 多人点赞 2021-01-21 19:33:15
    遗传算法是一种特殊的演化算法,但是在描述遗传算法的文献中,其定义各不相同。本书将遗传算法定义为一种可以用交叉和突变算子优化固定长度向量的演化算法。计分函数可以区分优劣方案,以优化该固定长度的向量。这个...

    遗传算法是一种特殊的演化算法,但是在描述遗传算法的文献中,其定义各不相同。本书将遗传算法定义为一种可以用交叉和突变算子优化固定长度向量的演化算法。计分函数可以区分优劣方案,以优化该固定长度的向量。这个定义说明了遗传算法的本质。

    此外,可以将可选特征添加到遗传算法中,以增强其性能。例如物种形成、精英和其他选择方法之类的技术,有时可以改善遗传算法的运行效果。

    3.1 离散问题的遗传算法

    与其他算法相似,针对连续学习和离散学习,遗传算法采用略有不同的方法。连续学习涉及计算数值,而离散学习涉及识别非数值。本节将展示如何将离散学习和连续学习应用于以下两个经典的AI问题:

    • 旅行商问题;
    • 鸢尾花物种建模。

    对于旅行商问题,我们将展示如何将遗传算法应用于离散学习的组合问题,目标是找到最佳的城市序列。同时,我们将拟合RBF神经网络的权重以识别鸢尾花种类,这将作为连续问题的遗传算法示例,即对数字权重进行调整。

    3.1.1 旅行商问题

    旅行商问题(Traveling Salesman Problem,TSP)涉及为旅行商确定最短路径。旅行商必须访问一定数量的城市,尽管他可以从任何城市开始和结束,但他只能访问每个城市一次。TSP有多个变体,其中一些变体允许多次访问每个城市,或为每个城市分配不同的值。本章中的TSP只是寻求一条尽可能短的路线,每个城市访问一次。图3-1展示了这里介绍的TSP和最短路径。

    人工智能算法:遗传算法

     

    图3-1 旅行商问题

    对于普通的迭代程序而言,找到最短的路径似乎很容易。但是,随着城市数量的增加,可能的组合数量也会急剧增加。如果问题有一个或两个城市,则只能选择一条路径;如果包括3个城市,则可能的路径将增加到6个。以下列表展示了路径数量增长的速度:

    1个城市有1条路径
    2个城市有2条路径
    3个城市有6条路径
    4个城市有24条路径
    5个城市有120条路径
    6个城市有720条路径
    7个城市有5 040条路径
    8个城市有40 320条路径
    9个城市有362 880条路径
    10个城市有3 628 800条路径
    11个城市有39 916 800条路径
    12个城市有479 001 600条路径
    13个城市有6 227 020 800条路径
    ……
    50个城市有3.041 × 10ˆ64条路径

    在上表中,用于计算总路径条数的公式是阶乘。使用阶乘运算符!作用于城市数n。某个任意值n的阶乘由n×(n − 1)×(n − 2)×…×3× 2×1给出。当程序必须执行蛮力搜索时,这些值会变得非常大。TSP是“非确定性多项式时间”(non-deterministic polynomialtime,NP)难题的一个例子。“NP困难”(NP-hard)被非正式地定义为“一系列不能用暴力搜索法求解的问题”。当超过10个城市时,TSP满足这个定义。NP困难的正式定义可以在Computers and Intractability: A Guide to the Theory of NP-Completeness [1]一书中找到。

    动态编程是解决TSP的另一种常用方法,如图3-2的漫画所示。

    尽管本书没有全面讨论动态编程,但了解其基本功能还是很有价值的。动态编程将TSP之类的大问题分解为较小的问题,这项工作可以被许多较小的程序复用,从而减少蛮力解所需的迭代次数。

    人工智能算法:遗传算法

     

    图3-2 解决TSP的方法(来自xkcd网站)

    与蛮力解和动态编程不同,遗传算法不能保证找到最优解。尽管它将找到一个很好的解,但分数可能不是最好的。在3.1.2节中讨论的示例程序,将展示遗传算法如何在短短几分钟内为50个城市的TSP产生可接受的解 [2]。

    3.1.2 为旅行商问题设计遗传算法

    TSP是最著名的计算机科学问题之一。由于传统的迭代算法通常无法解决NP困难问题,因此程序员必须使用遗传算法来生成潜在解。因此,我们将研究如何将遗传算法应用于TSP。

    离散遗传算法决定了你要使用的交叉和突变算子的类型。由于离散问题是分类问题,因此你无须处理数值。所以,你可能访问的城市就是TSP中的分类信息。按照访问顺序,城市列表是每个解的基因组。下面展示了如何表达TSP基因组:

    [洛杉矶, 芝加哥, 纽约]

    你的初始种群将是这些城市的随机排列。例如,初始随机种群可能类似于以下列表:

    [洛杉矶, 芝加哥, 纽约] 
    [芝加哥, 洛杉矶, 纽约] 
    [纽约, 洛杉矶, 芝加哥]

    你可以计算在每条路径上行驶的英里(1英里=1 609.344米)数,从而为上述城市创建一个计分函数。考虑第一个种群成员。根据Google Maps的驾驶导航,洛杉矶至芝加哥为2 016英里,芝加哥至纽约为790英里。因此,第一个种群成员覆盖的整个距离为2 806英里。距离是我们要最小化的分数。以上3个种群成员及其分数显示如下。

    [洛杉矶, 芝加哥, 纽约] -> 分数: 2 016 + 790 = 2 806
    [芝加哥, 洛杉矶, 纽约] -> 分数: 2 016 + 2 776 = 4 792 
    [纽约, 洛杉矶, 芝加哥] -> 分数: 2 776 + 2 016 = 4 792

    如你所见,最后两条路径的分数相同,因为旅行商可以从任何城市开始,所以最后两条路径产生相同的距离。旅行商问题的某些变体可以固定起点和终点城市。作为旅行商的家乡,起点和终点是相同的。其他变体让旅行商可以多次访问同一座城市。简而言之,如何定义旅行商问题的规则将决定如何实现计算机程序。

    考虑一下这种情况:旅行商总是从同一城市(即他的家乡)开始,并最终返回这里。在这个例子中,家乡城市是密苏里州的圣路易斯。此外,分数将是两个城市间最便宜机票的价格。由于基因组仍将由洛杉矶、芝加哥和纽约的排列组成,因此圣路易斯没有必要出现在基因组的开始和结尾。这样可以防止算法将圣路易斯更改为不是路径的起点或终点。换言之,计分函数隐式地将圣路易斯作为路径的起点和终点,并对其进行适当的处理。检查第一个种群成员,如下所示。

    [洛杉矶, 芝加哥, 纽约]

    该示例包括以下旅程。

    圣路易斯至洛杉矶 -> 费用: $393
    洛杉矶至芝加哥 -> 费用: $452
    芝加哥至纽约 -> 费用: $248 
    纽约至圣路易斯 -> 费用: $295 
    总计: $1388

    对问题的微小改动带来了很大的复杂性。由于圣路易斯位于美国中部,旅行商无法再从东到西或从西到东走一条简单的路。此外,机票价格不可互换,因为从芝加哥到圣路易斯的票价不一定与从圣路易斯到芝加哥的票价相同。旅行当天机票价格的变化使这个问题更加复杂。因此,基因组可以包括开始和结束日期。这样,遗传算法可以优化出行计划和城市顺序。

    你还可以创建算法,以允许旅行商多次访问同一座城市,但是,这个要求增大了计分函数的复杂性。如果你放宽要求,让旅行商可以多次访问同一座城市,则最佳分数可能来自以下解:

    [芝加哥, 芝加哥, 芝加哥]

    上述解的分数十分理想。该算法选择了从圣路易斯到最便宜的目的地芝加哥的路径。然后,算法再次选择芝加哥作为第2和第3站。因为从芝加哥到芝加哥的机票是0美元,所以这次旅行的分数非常好。显然,在这种情况下,该算法没有为程序员做任何额外的工作。因此,计分函数需要更复杂才能传达真正最优解的参数。也许有些城市更有价值,需要拜访,而另一些则是可选的。设计计分函数对于遗传算法编程至关重要。

    3.1.3 旅行商问题在遗传算法中的应用

    现在,我们将看到一个简单的遗传算法的示例,它用一条好路径穿过一系列城市。50个城市随机放置在256×256网格上。该程序使用了1 000条路径的种群,来演化出穿过这些城市的最佳路径。因为城市列表是分类值,所以TSP是一个离散的问题。在这个示例中,计分函数计算出一条城市路径所覆盖的总距离,这些城市中的任何一个都不会被访问两次。

    这些参数决定了最合适的突变和交叉算子的选择。对于这个示例,改组突变算子是最佳选择。如第2章所述,改组突变算子可与固定长度的分类数据配合使用。同样,我们将使用无重复的拼接交叉算子。两个算子都允许1 000条路径的种群演化,并且无重复的交叉强制实现了我们的要求,即同一城市只被访问一次。

    我对该程序进行了数百次迭代,直到连续经过50次迭代而没有出现一次改善最佳路径长度的情况。一次迭代即经过了一个世代。程序的输出在下面列出。

    Iteration: 1 , Best Path Length = 5308.0
    Iteration: 2 , Best Path Length = 5209.0
    Iteration: 3 , Best Path Length = 5209.0
    Iteration: 4 , Best Path Length = 5209.0
    Iteration: 5 , Best Path Length = 5209.0
    Iteration: 6 , Best Path Length = 5163.0
    Iteration: 7 , Best Path Length = 5163.0
    Iteration: 8 , Best Path Length = 5163.0
    Iteration: 9 , Best Path Length = 5163.0
    Iteration: 10 , Best Path Length = 5163.0
    ...
    Iteration: 260 , Best Path Length = 4449.0
    Iteration: 261 , Best Path Length = 4449.0
    Iteration: 262 , Best Path Length = 4449.0
    Iteration: 263 , Best Path Length = 4449.0
    Iteration: 264 , Best Path Length = 4449.0
    Iteration: 265 , Best Path Length = 4449.0
    Good solution found:
    22>1>37>30>11>33>39>24>9>16>40>3>17>49>31>48>46>20>13>47>23>
    0>2>29>27>14>34>26>15>7>35>19>21>18>6>28>25>45>8>38>43>32>
    41>5>10>4>44>36>12>42

    如你所见,在程序确定一个解之前,发生了265次迭代。由于城市是随机的,因此它们没有实际名称,而是将城市标记为“1”“2”“3”等。上面显示的最优解从城市22开始,接下来是城市1,最终在城市42停止。你可以在以下网址查看在线的TSP实现:

    http://www.heatonresearch.com/aifh/vol2/tsp_genetic.html

    3.2 连续问题的遗传算法

    程序员还可以利用遗传算法来演化连续的(即数值的)数据。在下面的示例中,我们将基于4个输入测量值来预测鸢尾花的种类。因此,我们的遗传算法将训练一个径向基函数(Radial-Basis Function,RBF)网络模型。

    模型是一种算法,它基于输入向量进行预测,这称为预测建模。对于鸢尾花数据集,我们将为RBF网络提供4个描述鸢尾花的测量值。RBF网络将根据这4个测量结果预测鸢尾花种属。它通过训练示例中的150朵花的数据来进行学习预测。该模型可以预测训练集中未包含的新花的种属。

    让我们回顾一下如何训练模型。3个主要部分确定了遗传算法如何训练任何模型:

    • 训练设置;
    • 超参数;
    • 参数。

    训练设置是遗传算法所独有的,例如种群数量、精英数、交叉算法和突变算法。在本书的后文,我们将学习粒子群优化(PSO)和蚁群优化(ACO),它们是RBF网络模型的训练算法。PSO和ACO的训练设置具有独有的特征。程序员通常会建立训练参数,因此,选择最佳的参数可能需要反复试验。

    超参数定义模型的结构。考虑图3-3,该图展示了RBF网络的结构。

    人工智能算法:遗传算法

     

    图3-3 以鸢尾花数据集为输入的RBF网络的结构

    在图3-3中,第2列显示的是3个具有凸起形状曲线的框,它们是RBF,使RBF网络能够做出预测。这个任务所需的RBF网络的数量是一个超参数,程序员或计算机可以确定该超参数。尽管RBF数量不影响遗传训练,但是如果你正在使用PSO和ACO进行训练,你仍然需要设置RBF数量。不过,你要小心,如果将RBF数量设置得太低,则创建的模型会很简单,以至于无法从信息中学习;如果将RBF数量设置得太高,则创建的网络会很复杂且难以训练,并可能导致过度拟合。这是我们不希望的情况,这时模型开始将数据存储在数据集中,而不是学习更通用的解。第10章将介绍过度拟合及其避免方法。在本章中,我们将RBF数量设置为5,这对于鸢尾花数据集似乎效果很好。我通过试验确定了这个数字。

    计算机也可以确定超参数,其中试错法通常是找到超参数的方法。只需在1~10个RBF之间循环,并让计算机尝试每种情况。一旦测试了全部10个RBF,程序就会选择获得最佳分数的模型。该模型将告诉你RBF数量超参数的最佳设置。

    最后的组成部分是参数向量。在训练模型时,模型会调整参数向量。这方面与超参数有所不同,因为一旦训练开始,模型就不会调整超参数。实际上,超参数定义了模型,无法更改。对参数向量进行调整是一种训练算法(例如遗传算法、PSO或ACO)教给模型针对给定输入的正确响应的方法。遗传算法利用交叉和突变来调整参数向量。

    下面列出的输出展示了使用遗传算法针对鸢尾花数据集训练RBF网络的进度。如你所见,分数在前10次迭代中并没有提高。这些迭代中的每一次迭代代表一代潜在解。分数代表错误分类的150朵鸢尾花的百分比,我们力求让这个分数最小。

    Iteration #1, Score = 0.1752302452792032, Species Count: 1
    Iteration #2, Score = 0.1752302452792032, Species Count: 1
    Iteration #3, Score = 0.1752302452792032, Species Count: 1
    Iteration #4, Score = 0.1752302452792032, Species Count: 1
    Iteration #5, Score = 0.1752302452792032, Species Count: 1
    Iteration #6, Score = 0.1752302452792032, Species Count: 1
    Iteration #7, Score = 0.1752302452792032, Species Count: 1
    Iteration #8, Score = 0.1752302452792032, Species Count: 1
    Iteration #9, Score = 0.1752302452792032, Species Count: 1
    Iteration #10, Score = 0.1752302452792032, Species Count: 1
    ...
    Iteration #945, Score = 0.05289116605845716, Species Count: 1
    Iteration #946, Score = 0.05289116605845716, Species Count: 1
    Iteration #947, Score = 0.05289116605845716, Species Count: 1
    Iteration #948, Score = 0.051833695704776035, Species Count: 1
    Iteration #949, Score = 0.05050776383877834, Species Count: 1
    Iteration #950, Score = 0.04932340367757065, Species Count: 1
    Final score: 0.04932340367757065
    [- 0.55, 0.24, -0.86, -0.91] -> Iris-setosa, Ideal: Iris-setosa
     
    [-0.66, -0.16, -0.86, -0.91] -> Iris-setosa, Ideal: Iris-setosa
    [-0.77, 0. 0, -0.89, -0.91] -> Iris-setosa, Ideal: Iris-setosa
    ...
    [0.22, -0.16, 0.42, 0.58] -> Iris-virginica, Ideal: Iris-virginica
    [0.05, 0.16, 0.49, 0.83] -> Iris-virginica, Ideal: Iris-virginica
    [-0.11, -0.16, 0.38, 0.41] -> Iris-virginica, Ideal: Iris-
    virginica

    在以上输出中,你可能还看到了物种计数(species count)。由于我们目前不使用物种,因此它保持为1。第5章将介绍物种。

    3.3 遗传算法的其他应用

    鸢尾花数据集和旅行商问题是人工智能文献中的常见例子。观察各种算法如何解决相同的问题,可以有助于理解它们的差异,检查新问题与遗传算法相符合的方式同样有价值。本节将说明如何让各种问题适应遗传算法。

    尽管本书目前未实现这些应用程序,但将来可能会包含它们。以下各小节的主要目的是演示遗传算法在各种情况下的应用。

    3.3.1 标签云

    标签云是一种方便的工具,可用于可视化文档中的单词频率计数。实际上,一个小的标签云可以代表一个很长的文档中的常用单词,但是,标签云算法通常会从单词数统计中删除结构化单词(例如“the”)。图3-4展示了根据《人工智能算法(卷1):基础算法》英文版创建的标签云。

    人工智能算法:遗传算法

     

    图3-4 卷1的标签云

    图3-4所示的标签云展示了每个单词出现的频率。你可以轻松地看到,“algorithm”是卷1中最常见的单词。

    要创建标签云,必须统计单词数。下面展示了构建图3-4所示标签云的单词计数:

    341 algorithm
    239 training
    203 data
    201 output
    198 random
    192 algorithms
    169 number
    163 input
    ...

    单词计数提供每个单词的出现频率,并与其他单词对比。标签云中的单词互相交织,使得单词之间的空白空间最小。在示例中,较小的单词填充了“algorithm”的“h”和“m”下的空白。

    创建标签云的第一步是选择一些单词并确定它们的大小。上面的单词计数说明了这个步骤。最有可能的是,你会在标签云中包含文档中大约100个最常见的单词。标签云中的确切字数将根据显示美观度进行调整。单词在文本中出现的次数将决定单词的大小。

    消除空白是遗传算法的一项重要应用。xy坐标、方向指示共同代表了每个单词。其中xy坐标表明每个单词在显示屏上的位置,方向指示表明单词是水平的还是垂直的。这3个数据项产生的向量长度等于标签云中单词数量的3倍。如果显示100个单词,则向量的长度为300个元素。对于空白和重叠文本,基因组将接受罚分。标签云不应该有重叠的文本。因此,你需要创建类似于以下内容的计分函数:

    [空白像素数] + ([重叠像素数] × 100)

    遗传算法应设法最小化这个计分函数。如果文本重叠,则需要增加系数100。

    3.3.2 马赛克艺术

    艺术生成是遗传算法的另一个非常常见的例子。编写计算机艺术的计分函数非常容易。你需要将源图像与遗传算法创建的图像进行比较;还要为遗传算法提供一组工具,以便它可以生成图像并显示其模拟的创造力。

    人类画家的工作方式基本相同。显然,产生图像的最简单方法是用数码相机照相,但是,画家用自己的工具(画笔和颜料)创造了艺术。对于遗传算法,工具是编程语言的图形命令,计分函数只是将原始图像与遗传算法产生的图像进行比较。例如,你可以限制遗传算法,让它仅用少数几种颜色画圆。仅使用程序中允许的元素,遗传算法将通过演化,产生原始照片的最佳渲染效果。通过这种方式,它展示了模拟的创造力。

    用遗传算法创建计算机艺术的一个例子是马赛克,它是由较小图像集合组成的较大图像。主图像包含一个图像网格,较小的图像将放置在每个网格单元中。图3-5展示了一幅马赛克。

    人工智能算法:遗传算法

     

    图3-5 玄凤鹦鹉马赛克

    图3-5描绘了由动物图像生成的玄凤鹦鹉马赛克。玄凤鹦鹉的图像尺寸为2 048像素×2 048像素,每张尺寸为32像素×32像素的较小动物图像的网格将构成该马赛克。将这些较小的动物图像的网格覆盖到较大的图像上,则将形成64×64的网格。(图3-5经过裁剪,仅展示其中一部分。)选择一组较小的动物图像放入64×64的网格中,使得网格在整体上可以最佳地呈现出一只玄凤鹦鹉的样子。

    每个基因组都是固定长度的数组,长度等于64×64即4 096字节。使用计分函数比较生成的马赛克图像和原始图像之间的差异。一旦得分降到最低,你将拥有与玄凤鹦鹉非常相似的马赛克。

    3.4 本章小结

    遗传算法利用种群、计分、交叉和突变来解决实际的编程问题。遗传算法是在第1章和第2章中学到的概念的具体实现,这些概念与交叉和突变一起工作,可以为下一代提供更好的解。

    遗传算法要求解以固定长度数组表示。这项要求似乎很有局限性,但是许多解都可以用这种方式表示。在本章中,我们还演示了旅行商问题和鸢尾花数据集。另外,我们讨论了遗传算法如何应用于标签云和马赛克艺术。

    为了超越定长数组,第4章将介绍如何演化实际的程序。实际上,遗传编程可以将计算机程序表示为树状结构,以便为下一代创建更好的程序。

    本文摘自《人工智能算法 卷2 受大自然启发的算》

    人工智能算法:遗传算法

    算法是人工智能技术的核心,大自然是人工智能算法的重要灵感来源。本书介绍了受到基因、鸟类、蚂蚁、细胞和树影响的算法,这些算法为多种类型的人工智能场景提供了实际解决方法。全书共10章,涉及种群、交叉和突变、遗传算法、物种形成、粒子群优化、蚁群优化、细胞自动机、人工生命和建模等问题。书中所有算法均配以具体的数值计算来进行讲解,每章都配有程序示例,读者可以自行尝试。

    本书适合人工智能入门读者以及对人工智能算法感兴趣的读者阅读参考。

    展开全文
  • 随机生成一篇英文文章,单词之间有空格分隔,存放在程序所在目录下的TextSort_1.txt文本文件中 读取TextSort_1.txt文件,将其中保存的英文文章调入内存 调用排序算法英文文章按字典顺序进行排序,排序完成后输出...
  • 目录简介一、监督学习1、决策树(Decision Tree,DT)2、朴素贝叶斯分类器(Naive Bayesian Model,NBM)3、最小二乘法(Least squares)4、逻辑回归(Logistic Regression)5、支持向量机(SVM)6、K最近邻算法...
  • 2020最新-精选基础算法100题(面试必备)

    万次阅读 多人点赞 2020-05-18 19:58:16
    作为一个程序员,算法能力必不可少,虽然不一定是算法工程师,但是算法还是彰显着个人的编码能力,面试中也经常会被问到,甚至会被要求临场做算法题,所以,还是好好积累吧。 个人其实对算法挺有兴趣的,从3月份...
  • 小亓在这里整理的是已经过滤了大部分46级水平常见词汇,筛去了基础算法词汇,选出400多经典算法竞赛高频生词,如有错误欢迎各位大佬指出!此外本单词表仍在更新,欢迎米娜桑关注233333 本文涉及多为英文题面常见词汇...
  • Generating Subsets 子集生成 geometric progression 等比数列 grabh 图 Graph Data Structures 图 Graph Isomorphism 同构 Graph Partition 图的划分 Graph Problems — hard 图论-NP问题 Graph Problems — ...
  • (update 2012.12.28 关于本项目下载及运行的常见问题 FAQ见 newsgroup18828文本分类器、文本聚类器、关联分析频繁模式挖掘算法的Java实现工程下载及运行FAQ )本文要点如下:对newsgroup文档集进行预处理,按照DF法及...
  • Xgboost算法梳理

    千次阅读 2019-03-05 20:56:45
    算法分类与回归树的英文是Classfication And Regression Tree,缩写为CART。CART算法采用二分递归分割的技术将当前样本集分为两个子样本集,使得生成的每个非叶子节点都有两个分支。非叶子节点的特征取值为True和...
  • 回溯算法

    2018-04-20 23:35:08
    回溯算法英文是”Backtracking”意思很直接就是原路返回,回溯是一种通用算法,用于发现某些计算问题(特别是约束满足问题)的所有(或某些)解,这些增量满足问题的解决方案,并在确定候选不可能的情况下放...
  • KMP —— 字符串分析算法

    千次阅读 多人点赞 2020-11-30 07:34:01
    大家可能觉得 KMP 这个算法的名字很特别、很怪,因为 KMP 它并不是三个英文单词的开头,而是三个计算机科学家的名字。发明这个算法的三位计算机科学家分别为:Knuth、Morris、Pratt。第一个是大家都非常熟悉的 ...
  • Lucene 算法原理

    千次阅读 2016-08-05 17:19:04
    Lucene的概述: Lucene(发音为 [‘lusen] )是一个非常优秀的开源的全文搜索引擎,我们可以在它的上面开发出各种全文搜索的应用来。Lucene在国外有很高的知名度,现在已经...该结构及相应的生成算法如下: 0)设有两篇
  • T9算法

    千次阅读 2012-04-19 11:29:22
    需要完整的javaT9算法的请联系我,qq:715216366 验证信息:湖北枣阳,注意哦,要收取些很小很小的费用以表共享。 T9输入法,名字听起来陌生,可是大家却经常使用它。可以说T9输入法是输入法历史中的一次革命。...
  • 二、英文分词基础知识 2.1场景 2.2 公式推导(naisy channel model) 2.3 动态规划 三、代码 3.1数据处理 3.2 平滑处理 3.3计算模型参数 3.4 viterbi算法 viterbi算法是学习自然语言处理的基础算法,已经...
  • 经典算法书单

    千次阅读 2017-09-11 11:22:50
    本书单涉及16本算书,按照算法的实现语言分类出,TAOCP放到了后面。 Python ⊙《算法图解》 Java ⊙《算法(第4版)》【中英文版】 C/C++ ⊙《啊哈!算法》 ⊙《挑战程序设计竞赛》 ⊙《挑战程序...
  • 本文将从k-邻近算法的思想开始讲起,使用python3一步一步编写代码进行实战训练。并且,我也提供了相应的数据集,对代码进行了详细的注释。除此之外,本文也对sklearn实现k-邻近算法的方法进行了讲解。实战实例:电影...
  • 数据挖掘十大经典算法(详解)

    千次阅读 2016-01-18 15:32:57
    数据挖掘十大经典算法
  • DES算法实例详解

    千次阅读 2018-08-29 21:44:47
    DES算法实例详解 码农场 &amp;amp;gt; 信息安全 2016-02-29 ...
  • 贪心算法问题

    万次阅读 多人点赞 2018-03-27 09:09:50
    算法笔记:贪心法一、概念1. 贪心法(Greedy Algorithm)定义 求解最优化问题的算法通常需要经过一系列的步骤,在每个步骤都面临多种选择; 贪心法就是这样的算法:它在每个决策点作出在当时看来最佳的选择,即...
  • 老虎二维码(下载链接在这里)是一个基于Excel的二维码生成工具,完全使用Excel表单公式结合VBA实现,没有调用任何外部库,实现了支持中文英文混合字符以及常用微信二维码编码的自动生成,在工作表单元格中填充...
  • 算法基础

    千次阅读 多人点赞 2019-08-31 19:25:48
    算法基础与、或、异或简单的递归1. 用递归实现插入排序2. 打印汉诺塔问题路径用递归实现二分查找希尔排序算法复杂度分析 与、或、异或 与&:同1为1 。 与1就是保留,与0就是清楚(屏蔽) 或|:有1为1 。 异或...
  • 搜索算法详解

    千次阅读 多人点赞 2017-04-21 18:54:18
    DFS 深度优先搜索算法 定义 基本内容 主要思想 操作方法 典型的题 地图可达性问题 地图片区问题 普通的DFS模型 BFS 广度优先搜索算法 定义 基本内容 主要思想 操作方式 典型的题 地图可达性问题 地图的最短路问题 地...
  • LBP特征提取算法

    千次阅读 2018-07-11 20:06:56
    来源:... 一、LBP特征的背景介绍 LBP指局部二值模式,英文全称:Local Binary Pattern,是一种用来描述图像局部特征的算子,LBP特征具有灰度不变性和旋转不变性等显著优点。它是由T. ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 36,752
精华内容 14,700
关键字:

列生成算法英文